ruby - 想在多个场景的 Cucumber 特性文件中只执行一次 Background

标签 ruby selenium-webdriver cucumber capybara site-prism

我只想在多个场景的每个 cucumber 功能文件中执行一次后台。我怎样才能在步骤文件中做到这一点?

特点:用户可以验证......

背景: 给定输入特定逻辑的测试数据

场景:验证......... 1 当A1 和B1 然后C1

场景:验证......... 2 当A2 和B2 然后C2

场景:验证......... 2 当A3 和B3 然后C3

最佳答案

测试应该被隔离。这就是 Cucumber 的设计方式,这是有充分理由的。除非绝对必要,否则我会强烈反对它。

如果您需要在整个测试套件之前执行某些操作,请考虑使用 @BeforeAll Hook 。

也就是说,我以前遇到过这种情况。我们有一些测试会启动一个需要很长时间的过程(例如配置 VM,一次需要 10 分钟......),但如果已经完成,可以在其他测试中跳过。

因此您可能希望按照以下方式设计步骤..

“鉴于.. X已经完成”

并在步骤中检测X是否完成,如果没有,则执行X。如果完成,则跳过。例如,假设创建用户是一个绝对需要很长时间的过程。然后我们可以做..

鉴于已创建用户“Joe Bloggs”

步骤定义将首先尝试确定 Joe 是否存在,然后如果不存在,则创建用户。您有一个初始启动问题,但随后其他测试将能够安全地假设 Joe 存在。

为什么你不应该这样做

如果您这样做,您的测试很可能会相互冲突。

假设您有很多使用 Joe Bloggs 用户的测试。也许有些人会把他从系统中删除。有些人可能会暂时停用用户、添加角色、更改他们的名字……各种各样的事情。所有测试都假设了他们正在测试的系统的某些事情,而你是在故意破坏你的测试假设。

如果您正在运行并行测试,则情况尤其糟糕。也许您的系统有一个限制,即一次只能有一个人以 Joe 的身份登录。或者每个测试都在改变有关 Joe 的负载,并且没有任何测试可以假设有关 Joe 用户状态的任何信息。那样你就会陷入一片困惑。

最好的解决方案通常是为您运行的每个测试创建全新的数据。打开这些 API 并为每次测试运行创建一次性数据。这是一篇关于它的好博客文章:https://opencredo.com/test-automation-concepts-data-aliases/

关于ruby - 想在多个场景的 Cucumber 特性文件中只执行一次 Background,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752426/

相关文章:

ruby - rubinius 是否有等效的 isitruby19?

ruby - 当不为零时返回枚举上的 block 的值

Cucumber 1.2.4 找不到步骤定义 : "You can implement missing steps with the snippets below" (2016)

java - 如何在 Java 中使用 Cucumber DataTable 匹配包含 ("${") 的参数值

java - Maven 忽略了 Cucumber 测试

ruby - 用户在服务器中提供的 ruby​​ 代码可以做的令人讨厌的事情

ruby - 将 `gem ' pg'` 添加到您的 Gemfile 并确保其版本处于 ActiveRecord 所需的最低版本

python - 我正在尝试计算绝对 Xpath 一个作为子元素的添加按钮

selenium - 如何获取机器人框架中的所有文本?

java - 无法在 Java 11 中独立构建 Selenium