如何在黄瓜中有条件地运行测试



对这个问题做了一些研究,我看到以前有人问过这个问题。答案似乎总是"如果你需要有条件地跳过测试,你就做错了什么。我是黄瓜和编程的新手,所以我希望有人对如何解决我目前的困境有建议。

我们团队开发的所有新功能都放在功能标志后面,并在准备就绪时按环境打开,即它们始终在开发中打开,通常在测试中打开,有时在集成中打开,并且仅在我们认为它们准备好发布时才在暂存和生产中打开。

我知道标记功能,并认为这对我来说可能是一个解决方案,除了几件事。第一,有很多功能,它们经常在各种环境中打开和关闭。除非我完全掌握了事情,否则我将错过是否需要更改特定的功能标签。另一个问题是我正在使用共享测试代码库,并且我们的标记系统当前尚未按环境设置。虽然我可以开始游说这种变化,但它不太可能在短期内发生,而且由于之前给出的原因,我不确定我会对这个解决方案感到满意。

理想情况下,我想做的是使用功能标志并按照"如果标志X为真,则运行此测试,否则什么都不做"编写代码。但是,我无法找到"什么都不做"的方法。如果未设置标志,我已经将一些测试设置为"挂起",但是如果未设置标志,我宁愿让测试根本不运行。挂起使它看起来像我有一堆不完整的测试用例,这根本不是真的。

提前感谢您的建议。

您可以使用应运行的环境标记每个方案,然后在调用 Cucumber 时使用该标记。

一个可能的解决方案是为每个功能的所有测试放置一个标签,然后编写一个启动脚本,该脚本通过项目,检查每个标志,然后将关联的标签传递到黄瓜中。

在 ruby 中,这看起来像这样:

cuke_cmd = "cucumber --tags @essential
flags.each do |flag|
  if getFlagState(flag) # code which checks if the flag is true
    cuce_cmd += ","+getFlagTag(flag) # getFlagTag returns the associated tag in the format @flag
  end
end
system(cuke_cmd)

在此@essential标签将应用于始终运行的任何内容,并且每个附加功能都有一个与之关联的标签。

然后,您将需要遍历所有可能的标志并将关联的标记附加到命令中。

在此结束时,程序将执行传递将标志设置为 true 的每个功能的标签。

最新更新