我的黄瓜场景测试套件中有许多特性文件。
我通过使用CLI启动Cucumber来运行测试。
以下是在运行测试过程时发生的步骤:
static实例,它为我的黄瓜测试管理测试容器的生命周期。当前包含三个容器:(i) Postgres (应用我们的模式),(ii) Axon (事件存储),(iii)一个单独的应用程序容器。@Before我们对测试容器执行的每个场景都进行了一些清理。etc.--
尽管测试通过得很好,但在默认情况下,测试套件运行所需的时间太长了。因此,我正在寻找一种方法来增加并行性,以加快速度。
--threads <n>将无法工作,因为static容器将处于争用状态(我已经尝试过这一点,正如我所预期的那样,它失败了)。在我看来,并行有不同的选择,它们可以工作:
我认为在一个理想的世界里,我们会选择1(见*)。但这需要一台具有大量内存和CPU(我无法访问)的机器。所以选择2对我来说可能是最有意义的。
我的问题是:
可以将
)。
*部署和测试每个场景与黄瓜文档一致:“每个场景应该是独立的;您应该能够以任何顺序或并行方式运行它们,而不需要一个场景干扰另一个场景。每个场景都应该测试一件事情,这样当它失败时,它就会因为一个明确的原因而失败。这意味着您不会在另一个场景中重用一个场景。”
发布于 2020-08-15 11:47:26
这实际上不是堆栈溢出的问题。没有一个正确的答案--这主要取决于。您可能希望在将来尝试https://softwareengineering.stackexchange.com/。
不是的。这是不可能的黄瓜不支持分叉JVM。当然,当然支持分叉,您可以通过为每个特性文件创建一个运行程序来利用这一点。
然而,我会重新考虑测试策略,可能也会重新考虑应用程序设计。要并行执行测试,系统必须支持并行调用。因此,我不认为为每个测试重置数据库和事件存储是一个良好的实践。相反,考虑编写测试时,每个测试都使用自己的一组独立资源。因此,例如,如果您正在测试用户,您将为每个测试创建随机用户。如果这些用户是组织的一部分,则创建一个随机组织,等等。这并不总是可能的。一些应用程序是在代码中使用隐式单例资源设计的。在本例中,您必须重构应用程序以使这些资源显式化。
或者,考虑将Cucumber测试推到堆栈中。您可以在任何抽象级别测试业务逻辑。它不必是一个集成测试。然后,您可以使用JUnit与保险火代替,并使用安全火创建多个叉子。
https://stackoverflow.com/questions/63300169
复制相似问题