【问题标题】:Using tags to exclude group of features [duplicate]使用标签排除一组特征[重复]
【发布时间】:2021-04-22 18:16:21
【问题描述】:

我们使用标签来对功能和场景进行分组。例如,我们有类似的东西:

@jira=123 
Scenario: test scenario 1
...

@jira=456
Scenario: test scenario 2, known failure
...

Scenario: test scenario 3, new feature

现在,我们希望运行没有用@jira=123 或@jira=456 标记的​​测试。因为我们有许多用@jira=somevalue 标记的功能和场景,所以将它们全部添加是不切实际的。因此,我正在寻找一种能够排除带有@jira 标记的任何内容的方法。我试过 ~@jira 和 "~@jira=" 但没有运气。 查看以下junit案例:

TagTest.java#testToString()

使用“@foo=”作为标签,但找不到示例。有没有办法排除@jira标记的一组场景,而不考虑标签值?

【问题讨论】:

    标签: karate


    【解决方案1】:

    是的,我们没有很好地记录这一点,但这里的这个问题可以作为一个开始。空手道实际上支持标签的迷你表达语言。

    看看这个测试的一些选项:TagsTest.java

    这应该可以满足您的要求,请在 cmets 中确认!是的,只需使用下面通常放置@jira 等的字符串即可。

    !valuesFor('@jira').isPresent

    还有一点很重要。当您使用特殊的表达式语言时,必须在您传递给 tags 选项的单个表达式中管理任何 AND 或 OR 复杂性。只需要一个表达式,tag 参数不能使用逗号分隔值或多个值。

    例如:

    要选择具有@fail 标记或@bad 标记值的场景(注意使用JS || (OR) 运算符):

    valuesFor('@fail').isPresent || valuesFor('@bad').isPresent
    

    并选择任何具有@fail 标签值和@smoke 标签存在的场景(没有值,只有普通标签,没有= 部分):

    valuesFor('@fail').isPresent && anyOf('@smoke')
    

    是的,您可以在命令行上使用“表达式语言”,即在 karate.options 内或作为独立 JAR 的 --tags-t 选项。

    【讨论】:

    • 我想我仍然缺少一些东西。可能是我的问题不清楚。我们希望从命令行运行它们,就像我们在调用 maven 时传递标签过滤器一样:``` mvn test "-Dkarate.options=--tags @jira classpath:features" ```
    • @Mansour 是的,您可以在命令行上使用它。尝试一下。这就是我说where you would normally put等时的意思。
    【解决方案2】:

    标签值是整个字符串,即使它包含= 并且您可以假设有键和值。 但是你可以考虑使用多个标签,它们是允许的。

    所以,在你的情况下,我会使用类似的东西:

    @jira=123
    @jira
    
    Scenario: test scenario 1
    ...
    
    @jira=456
    @jira
    Scenario: test scenario 2, known failure
    

    您可以使用~@jira 排除所有@jira 场景。 这将允许您在需要时仍然引用单个 @jira=123

    【讨论】:

    • 这意味着我必须使用“@jira”两次。一次用于“@jira”,第二次用于“@jira=123”这不是我想要的
    猜你喜欢
    • 2013-04-28
    • 2018-04-21
    • 2011-02-06
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多