入门和帮助

如何开始使用 Cucumber?

要从头开始,请尝试 10 分钟教程.

您可以阅读这些文档以了解有关 GherkinCucumberBDD 的更多信息。还有一些链接到有关 Cucumber 和 BDD 的几篇 博客文章

在哪里可以获得更深入的信息?

如果您想更深入地了解,请尝试以下方法之一

在哪里可以获得帮助?

如有疑问,您可以 与社区联系

安装和运行 Cucumber

如何安装 Cucumber?

如何安装 Cucumber,取决于您使用的是哪种编程语言。

您可以在 安装 页面上找到有关如何安装您喜欢的 Cucumber 版本的信息。

我应该使用哪个版本的 Cucumber?

通常建议您为您的编程语言使用最新发布的 Cucumber 版本。每个版本都会修复已知错误和/或添加新功能。

您可以在 10 分钟教程安装 页面或 GitHub 上找到 Cucumber 的最新版本。

升级

Cucumber 尝试遵循 SemVer 规范来进行版本号发布。从本质上讲,这意味着

  • 如果发布版本中的最右边(补丁)数字发生变化,您不必担心。
  • 如果发布版本中的中间(次要)数字发生变化,您不必担心。
  • 如果最左边(主要)数字发生变化,您可能会发现有些东西会失效。

如何运行 Cucumber?

有关如何运行 Cucumber 的信息,请参阅 运行 Cucumber

如何从 CLI 运行 Cucumber?

有关如何运行 Cucumber CLI 的信息,请参阅 从命令行

运行 Cucumber 的配置选项有哪些?

有关配置选项的信息,请参阅 配置

Cucumber 说我的步骤未定义,但我已经实现了步骤定义!

如果 Cucumber 告诉您您的步骤未定义,而您已经定义了步骤定义,这意味着 Cucumber 无法找到您的步骤定义。您需要确保正确指定了步骤定义的路径(粘合路径)。

Cucumber 表达式与正则表达式

有关 Cucumber 表达式的更多信息,请参阅有关 Cucumber 表达式 的部分。您仍然可以使用正则表达式(regex),但您不能在同一个步骤定义中使用 Cucumber 表达式和正则表达式。

如何使用 lambda 来定义步骤定义?

如何调用其他步骤或场景?

每个场景都应该是独立的;您应该能够以任何顺序或并行运行它们,而不会出现一个场景干扰另一个场景的情况。

每个场景都应该测试一件特定的事情,以便在它失败时,它会因明确的原因而失败。这意味着您不会在一个场景中重用另一个场景。

如果您的场景使用相同或相似的步骤,或对您的系统执行相似的操作,您可以提取 辅助方法 来执行这些操作。

如何使用辅助方法

辅助方法允许您在步骤中重复使用操作,并避免为类似的行为编写多个步骤定义。您可以为诸如*登录到您的应用程序*之类的操作编写辅助方法,然后将它们作为步骤或其他步骤的一部分重复使用。这有助于保持测试的清洁、简洁和可维护。

要了解更多关于使用辅助方法的信息,请查看辅助方法分组步骤定义

我的场景应该有多详细?

您的场景应该包含*足够*的信息来描述系统的*行为*。它们不应该描述应用程序的实现,因为这可能会发生变化 - 导致您的测试失败。它们不应该包含太多细节,因为这会分散对实际*行为*的注意力。

让我们用一个例子来说明这一点。假设我们有一个用户将收到结果通知的过程。目前,这可能是通过向他们发送电子邮件来实现的,但将来可能会改变(例如,改为短信)。您可以将步骤指定如下:

Then the user will be notified

这样,如果用户通知方式的实现发生变化,您只需更改步骤定义(或该步骤定义调用的辅助方法),而无需更改步骤本身**和**所有底层代码。

有关更多信息,请查看编写更优质的Gherkin和/或编写可维护的自动化验收测试 (pdf)

如何在 Excel / csv 中指定我的测试用例?

我们建议您*不要*使用 Excel 或 csv 文件来定义您的测试用例;使用 Excel 或 csv 文件被认为是一种反模式。

Cucumber 的目标之一是拥有*可执行规范*。这意味着您的功能文件应该只包含足够的信息来记录系统的预期行为。如果您的测试用例保存在单独的文件中,您如何阅读文档?

这也意味着您不应该在功能文件中包含太多细节。如果您这样做,您可能需要考虑将它们移到您的步骤定义或辅助方法中。例如,如果您有一个需要填充许多不同字段的表单,您可以使用Builder 模式来做到这一点。

如何让 Cucumber 有条件地跳过步骤?

每个场景应该测试*一件事情*,并因一个特定的原因而失败。这意味着没有理由跳过步骤。

如果似乎确实有一个理由让你想有条件地跳过步骤,你可能使用了一种反模式。例如,您可能试图在一个场景中测试多个事物,或者您可能无法控制您的测试环境或测试数据的状态。

这里最好的做法是修复根本原因。

如何在步骤失败后让 Cucumber 运行跳过的步骤?

Cucumber 默认情况下会跳过失败步骤后的所有步骤。一旦一个步骤失败,测试就失败了,没有理由执行后续步骤。如果您需要运行额外的步骤,很可能您的场景一次测试了太多不同的东西。考虑将您的场景拆分成更小的测试。

在(失败的)步骤后截取屏幕截图

当场景失败时截取屏幕截图,可能会帮助您找出问题所在。要在失败时截取屏幕截图,您可以配置一个after hook

有关如何使用 为失败的场景截取屏幕截图并将其嵌入到 Cucumber 的报告中的示例,请查看浏览器自动化页面。

请注意,在*每一步*之后截取屏幕截图被认为是一种反模式。您应该能够依靠您的测试自动化,而无需使用屏幕截图检查场景的每一步。您的自动化应该稳定,测试应该因明确的原因而失败。

在控制台输出中获得奇怪的字符

如果您在步骤输出中获得了一些奇怪的额外字符,例如[32m,这是转义 ANSI 颜色代码的问题。

如何共享步骤之间的状态?

参数不匹配

参数不匹配异常表示步骤没有提供步骤定义所需的正确数量的参数。

重复的步骤定义

DuplicateStepDefinitionException 表示您两次定义了同一个步骤。首先,Cucumber 在关键字与特定步骤一起使用时不会区分匹配步骤。这意味着Given an order existsThen an order exists 都会匹配“an order exists”。当使用 Cucumber 表达式和/或正则表达式提供参数时,多个步骤可能匹配相同的表达式。最后,这意味着您不能扩展定义步骤定义的类,因为这会导致重复。

Cucumber-JVM 是否支持 Kotlin?

您可以使用Cucumber-JVM 在 Kotlin 中编写步骤定义。请查看cucumber-jvm 的 Kotlin 示例。目前无法在 Kotlin 中生成步骤定义。原因是没有实现 Kotlin 后端。如果您想参与这方面的工作,有一个请求。还有一个请求用于Cucumber 的原生 Kotlin 实现

Cucumber 在 IntelliJ IDEA 中找不到我的步骤定义

在这种情况下,您需要在 IntelliJ IDEA 中配置一个新的运行配置。1. 从 IntelliJ IDEA 菜单中点击**运行**>**编辑配置**。2. 点击左上角的**+**图标,输入cucumber。选择**Cucumber Java**。3. 根据 JetBrains 的运行/调试配置 Cucumber Java 说明创建配置。

如果 IntelliJ IDEA 无法识别包含步骤定义的包,您可以通过在 Glue 字段中手动输入包名来指定它,例如stepdefs

有关更多信息,请参阅 JetBrains 文档的运行 Cucumber 测试

如何修复 Cucumber-JVM 错误,其中堆栈跟踪包含“无法实例化 public cucumber.runtime.java.JavaBackend”或“NoSuchMethodException”?

检查所有 Cucumber 依赖项的 Cucumber 版本是否相同,并确保您只有所需的依赖项。这意味着您需要确保获得与您所拥有的 Cucumber 版本一起提供的传递依赖项。

您可以通过运行mvn dependency:tree查看所有 Maven 依赖项,包括传递依赖项。

如果您使用的是任何其他库,该库也包含对 Cucumber 的依赖项(传递依赖项),请尝试在您的 pom 文件中排除该传递依赖项,以确保只引用一个版本的 Cucumber。有关排除传递依赖项的步骤,请参考 Maven 的排除依赖项说明

您可以帮助我们改进这份文档。编辑此页面