首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在每个特性文件中分叉JVM进程?

在每个特性文件中分叉JVM进程?
EN

Stack Overflow用户
提问于 2020-08-07 10:42:16
回答 1查看 233关注 0票数 0

我的黄瓜场景测试套件中有许多特性文件。

我通过使用CLI启动Cucumber来运行测试。

以下是在运行测试过程时发生的步骤:

  • 我们创建了一个类的static实例,它为我的黄瓜测试管理测试容器的生命周期。当前包含三个容器:(i) Postgres (应用我们的模式),(ii) Axon (事件存储),(iii)一个单独的应用程序容器。

  • @Before我们对测试容器执行的每个场景都进行了一些清理。etc.

--

  • --这是为了使每个场景都有一个干净的板子。
  • 它涉及截断表中的数据(postgres容器),重置我们事件存储中的所有事件(Axon容器),以及我们的应用程序的一些其他工作(重置相关的跟踪事件处理器)、

尽管测试通过得很好,但在默认情况下,测试套件运行所需的时间太长了。因此,我正在寻找一种方法来增加并行性,以加快速度。

  • 添加参数--threads <n>将无法工作,因为static容器将处于争用状态(我已经尝试过这一点,正如我所预期的那样,它失败了)。

在我看来,并行有不同的选择,它们可以工作:

  1. 每个场景都会启动自己的spring应用程序上下文(本质上是对JVM的分叉),获得自己的容器并以这种方式运行测试。
  2. 每个特性文件都会启动自己的spring应用程序上下文(尤其是分叉JVM),获得自己的容器并按常规顺序运行每个场景。

我认为在一个理想的世界里,我们会选择1(见*)。但这需要一台具有大量内存和CPU(我无法访问)的机器。所以选择2对我来说可能是最有意义的。

我的问题是:

可以将

  • is配置为运行指定功能文件的分叉JVM(这与选项2匹配,above?)
  • what是将这种情况并行化的最佳方法(使用testcontainers)?

)。

*部署和测试每个场景与黄瓜文档一致:“每个场景应该是独立的;您应该能够以任何顺序或并行方式运行它们,而不需要一个场景干扰另一个场景。每个场景都应该测试一件事情,这样当它失败时,它就会因为一个明确的原因而失败。这意味着您不会在另一个场景中重用一个场景。”

EN

Stack Overflow用户

回答已采纳

发布于 2020-08-15 11:47:26

这实际上不是堆栈溢出的问题。没有一个正确的答案--这主要取决于。您可能希望在将来尝试https://softwareengineering.stackexchange.com/

不是的。这是不可能的黄瓜不支持分叉JVM。当然,当然支持分叉,您可以通过为每个特性文件创建一个运行程序来利用这一点。

然而,我会重新考虑测试策略,可能也会重新考虑应用程序设计。要并行执行测试,系统必须支持并行调用。因此,我不认为为每个测试重置数据库和事件存储是一个良好的实践。相反,考虑编写测试时,每个测试都使用自己的一组独立资源。因此,例如,如果您正在测试用户,您将为每个测试创建随机用户。如果这些用户是组织的一部分,则创建一个随机组织,等等。这并不总是可能的。一些应用程序是在代码中使用隐式单例资源设计的。在本例中,您必须重构应用程序以使这些资源显式化。

或者,考虑将Cucumber测试推到堆栈中。您可以在任何抽象级别测试业务逻辑。它不必是一个集成测试。然后,您可以使用JUnit与保险火代替,并使用安全火创建多个叉子。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63300169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档