当将 LocalStack 容器与 Testcontainers 一起使用时,有没有办法清除 all 状态,无论它是什么?这意味着,删除所有 SQS 队列及其内容、所有 SNS 主题以及 LocalStack 可能存储的所有其他内容。
LocalStack 用于集成测试。容器由测试用例通过 Testcontainers 启动。现在有很多使用 LocalStack 的集成测试,并且每个测试都启动自己的 LocalStack 实例。为了将测试用例彼此隔离,这是必要的;先前测试用例的剩余消息不得影响另一个测试用例的结果。
随着集成测试用例数量的增加,LocalStack 启动时间已成为一个问题。我正在寻找一种方法,为所有集成测试重用相同的 LocalStack 实例,而不对集成测试的编写方式施加任何限制。
作为解决方法,我正在考虑为所有 SQS 队列和 SNS 主题生成唯一的前缀,该前缀将添加到相应的队列/主题名称之前。每个测试用例这个前缀应该是唯一的。
但是,这有点不干净,因为即使测试用例完成,消息仍然会残留在 LocalStack 实例上。最好在每个测试用例完成后创建一个真正的“干净的石板”状态。
在我的例子中,测试是使用 Scala 实现的,并使用 Testcontainers-Scala 库。但是,任何基于 JVM 的解决方案都应该可以工作,例如基于 Java 的解决方案。
到目前为止,我发现文档和 API 很混乱,这可能反映出我对 LocalStack 缺乏深入的了解。
我想可以通过使用 CLI 命令和一些技巧来“清除”整个 LocalStack 实例。然而,这将涉及从 JVM 内运行的集成测试调用 Bash 脚本,这听起来不是一个好主意。它不能(轻松)移植到 Windows 机器上。如果所有这些都可以直接从 JVM 完成,例如通过 HTTP 与正在运行的 LocalStack 容器交互,那将会更加有用。
我将问题集中在 SQS 和 SNS 上,因为这是当前的用例。未来,随着项目的发展,可能会添加其他服务。但这些可能被视为单独的案例。
对于SQS和SNS,解决方案必须: