使用 Cucumber 进行多级测试

Multi-level testing using Cucumber

我的软件有一些 BDD 测试,在 Gherkin 中声明,运行 使用 Cucumber JVM。 Cucumber JVM 测试 could 运行 在 any 我的应用程序的几个级别(层):通过前端(HTML 使用 Testcontainers),通过后端(JSON over HTTP 通过 REST API 使用 Testcontainers),通过后端(Spring 使用 Java 方法调用)使用模拟 HTTP 服务器测试工具,或(对于某些测试)通过服务层(Java 方法调用)。

但我当然想在某种程度上测试 所有 我的应用程序的那些层。这意味着我 想要 一些 我的 BDD 测试的重复。我不想 运行 所有级别的所有 BDD 测试。而且不想只通过前端进行测试,这样更容易调试测试失败。在某些级别上,我只想做一些关键测试,以表明应用程序的各个层都正确地粘合在一起。

如果我天真地实现一些重复的 Cucumber JVM 测试,Cucumber 会抱怨重复的步骤定义。如何进行重复测试,而不会让 Cucumber 被重复的步骤定义混淆?

这是一个不同于 reusing step definitions: at different levels, the code for a step is very different. And it is distinct from 的问题,其中不同的构建环境使用不同的步骤定义。

为此,您必须在多个级别上实施步骤定义。因此,对于一个应该在一个测试中对 UI 进行操作,但在另一个测试中对 API 进行操作的步骤;您需要 2 个步骤定义。

如果将这些步骤定义分组到不同的文件中,则可以创建指向不同 "glue" 类(步骤定义文件)的不同运行程序。

您可以将可在不同级别之间共享的步骤定义分组到一个文件中,供所有跑步者使用。

也就是说,我想知道您是否需要在应用程序的多个级别测试相同的东西(即使只是一个子集)?考虑每个测试的价值是什么,以及这将如何改变您要验证的内容。 例如: 如果一个方法在不同的输入上给出不同的输出,这可以在 uni 测试中进行测试。 要测试该结果是否正确显示,这可能是 UI 或 API 级别的测试。 如果 UI 中有关于如何显示的额外逻辑,那可能是 UI 级别的测试。