Tags 如何在cucumber中有条件地运行测试

Tags 如何在cucumber中有条件地运行测试,tags,cucumber,conditional-statements,Tags,Cucumber,Conditional Statements,在对这个问题做了一些研究之后,我发现以前有人问过这个问题。答案似乎总是这样:“如果你需要有条件地跳过一个测试,你就做错了。”我对Cumber和编程都是新手,所以我希望有人能给我一个建议,告诉我如何摆脱目前的困境 我们团队开发的所有新功能都放在一个功能标志后面,并在每个环境准备就绪时打开,也就是说,它们总是在开发中打开,通常在测试中打开,有时在集成中打开,只有在我们认为它们准备就绪时才在登台和产品中打开 我知道标签功能,并认为这可能是一个解决方案,我除了一些事情。第一,有很多特性,它们在各种环境中

在对这个问题做了一些研究之后,我发现以前有人问过这个问题。答案似乎总是这样:“如果你需要有条件地跳过一个测试,你就做错了。”我对Cumber和编程都是新手,所以我希望有人能给我一个建议,告诉我如何摆脱目前的困境

我们团队开发的所有新功能都放在一个功能标志后面,并在每个环境准备就绪时打开,也就是说,它们总是在开发中打开,通常在测试中打开,有时在集成中打开,只有在我们认为它们准备就绪时才在登台和产品中打开

我知道标签功能,并认为这可能是一个解决方案,我除了一些事情。第一,有很多特性,它们在各种环境中经常被打开或关闭。除非我完全掌握了一切,否则我会错过是否需要更改特定的功能标签。另一个问题是,我在一个共享测试代码库中工作,我们的标记系统目前没有针对每个环境进行设置。虽然我可以开始为这一改变进行游说,但这在短期内不太可能发生,而且出于之前给出的原因,我不确定我是否会对这一解决方案感到满意

理想情况下,我希望使用feature标志并按照“如果标志X为真,那么运行这个测试,否则什么都不做”的思路编写代码。然而,我还没有找到“什么都不做”的方法。如果没有设置标志,我已经将一些测试设置为“挂起”,但是如果没有设置标志,我更希望测试根本不运行。挂起使我看起来像是有一堆不完整的测试用例,这根本不是真的


提前感谢您的建议

您可以用应该运行的环境标记每个场景,然后在调用cucumber时使用该标记。

一个可能的解决方案是为每个功能的所有测试放置一个标记,然后编写一个启动脚本,该脚本贯穿整个项目,检查每个标记,然后将相关标记传递到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的每个特性的标记的操作