使用 LocalStack 和 JVM Testcontainers 清除所有状态

问题描述 投票:0回答:1

当将 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,解决方案必须:

  • 能够使用单个命令一次性删除所有队列/主题,
  • 或者能够列出所有存在的队列/topcis,然后单独删除它们。
java scala jvm testcontainers localstack
1个回答
0
投票

对于 sqs,我目前使用 AWS api 来清除队列,但有时会留下幽灵消息。 Localstack 还有

/_localstack/state/reset
api

© www.soinside.com 2019 - 2024. All rights reserved.