我如何有条件地跳过Cucumber中的场景?

Ben*_*nMQ 8 ruby cucumber

我如何有条件地跳过一个场景?

例如,我希望只有在满足某些条件的情况下才能继续使用方案,但如果不存在则我不希望它注册为失败.

Ben*_*ter 6

这是我遇到的一个问题.我编写的测试是针对具有不断变化的BE数据库的UI,我目前无法获得静态数据.这意味着有时可能没有测试数据.不是通过不是失败,只是无法运行.

我发现最好的方法是调用黄瓜待定.

示例测试:

Scenario: Test the application
  Given my application has data
  When I test something
  Then I get a result
Run Code Online (Sandbox Code Playgroud)

示例步骤def:

Given /^my application has data$/ do
  pending unless application.has_data?
end
Run Code Online (Sandbox Code Playgroud)

这些是我能看到的结果:

201 scenarios (15 pending, 186 passed)
1151 steps (15 pending, 1136 passed)
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我有额外的调试并且标记了这些测试,以便我可以在任何时候再次运行这些待处理的测试.

希望这有帮助,本.


小智 5

对于仍在寻找答案的人:除了使用pending或特定的配置文件跳过具有某些标签的方案之外,还有至少2种方法可以实现这一点.

我可以理解为什么你需要这个,因为我有类似的问题并得到了解决方案,因此值得分享.在我的情况下,我有一个功能预计可以在3/10设备上使用,并且预计在剩余的7个设备上不可用.

使用'待定'​​跳过的注意事项:

  • 由于测试和代码已经实现,因此将步骤标记为不正确pending.
  • 它引起了混乱,因为很难在运行结束时将真实pending场景与跳过但标记的pending场景区分开来
  • 某些CI作业(Jenkins/Hudson)可能会因未决方案而配置为失败,从而导致更多麻烦.

因此,我宁愿在执行期间跳过它们,具体取决于使用哪种浏览器的条件.我也不希望有太多特定于某些浏览器/设备的配置文件

方案:

  1. 使用cucumber.yml有条件地跳过标记的场景

这是一个关于黄瓜的已知忽略的有趣事实(来自https://github.com/cucumber/cucumber/wiki/cucumber.yml):

cucumber.yml文件由ERb预处理; 这允许您使用ruby代码在cucumber.yml文件中生成值

  • 在此基础上,用一些独特的东西标记你的场景,比方说 @conditional

    • 在黄瓜配置(cucumber.yml)的开头,在所提到的任何配置文件之外应用条件逻辑:

      <% included = (ENV['BROWSER'] =~ /chrome/) ? "-t @conditional" : "-t ~@conditional" %>

      included 只是一个变量,根据条件,它将包含要包含/排除的标记值

    • 现在在默认配置文件中使用此条件变量 default: <%= included %>

因此,现在您的默认配置文件将使用条件逻辑标识的包含/排除测试.

  1. (更复杂,更不优雅)使用rake任务执行黄瓜:

有条件地选择要在rake任务中包含/排除的标签,并将它们传递给黄瓜执行.

希望这可以帮助.


Dav*_*lla 3

您可以在启动 Cucumber 之前检查条件,然后使用一个配置文件来跳过带有某些标签的场景。将其放入您的 cucumber.yml 中:

default: --tags ~@wip --tags ~@broken --no-source --color 
limited: --tags @core --tags ~@wip --tags ~@broken --no-source --color
Run Code Online (Sandbox Code Playgroud)

将 @core 替换为您要运行的 cuke 所使用的任何标签(或使用 ~ 排除 cuke)。然后从 shell 脚本运行受限配置文件来检查条件:

cucumber -p limited
Run Code Online (Sandbox Code Playgroud)