Cucumber 在 QAF 和 Spring 引导环境中标记为 TestNG 组

Cucumber tags as TestNG group in QAF and Spring boot environment

我在一个功能文件中有 4 个测试,带有 2 个不同的标签@first 和@then。 我希望 @first 测试 运行 首先使用并行性,然后 @then 在所有 @first 测试完成后测试 运行,也使用并行性。

项目在这里: https://github.com/marcesso/qafTesting

@CucumberOptions(plugin = {"com.qmetry.qaf.automation.cucumber.QAFCucumberPlugin", "pretty", "html:target"},
        /*tags = {"@Ignore"},*/
        features = {"src/test/resources/my/custom/packagename/testing"})
public class RunnerTest extends AbstractTestNGCucumberTests {

    @Autowired
    private ObjectMapper objectMapper;


    @Test(description = "Runs Cucumber Scenarios", dataProvider = "scenarios", groups = {"first"})
    public void runScenarioFirst(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
        super.runScenario(pickleWrapper,featureWrapper);

    }
    @Test(description = "Runs Cucumber Scenarios", dataProvider = "scenarios", groups = {"then"}, dependsOnMethods =
            "runScenarioFirst")
    public void runScenarioThen(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
        super.runScenario(pickleWrapper,featureWrapper);
    }

    @Override
    @DataProvider(name = "scenarios", parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

    @PostConstruct
    public void setUp() {
        objectMapper.registerModule(new JavaTimeModule());
    }

}

问题是所有测试 运行 两次(每个测试方法一次)并且 @Test 注释的“groups”属性没有像我预期的那样过滤测试(在 https://qmetry.github.io/qaf/latest/gherkin_client.html 最底部)

也完全没有并行性。

我尝试在测试方法中过滤泡菜,但不符合条件的测试显示为通过,即使未通过 运行

if(pickleWrapper.getPickle().getTags().contains("@first")) {
            super.runScenario(pickleWrapper,featureWrapper);
}

在上面的 RunnerTest 示例中,qaf 的 GherkinClient 没有出现,因为您使用的是 cucumber 运行ner。 GherkinScenarioFactoryBDDTestFactory2(使用 qaf 2.1.15+)是 QAF 的 GherkinClient 实现。当你使用它们中的任何一个时,你不需要上面 RunnerTest class。 BDDTestFactory2 优于 GherkinScenarioFactory,它支持标准 gherkin 语法之上的附加语法功能。

当您使用 cucumber 运行ner(在您的情况下为 RunnerTest class)时,标签不被视为 TestNG 组。如果你想使用 cucumber 运行ner 到 运行 特征文件,你需要使用 cucumber options 来处理它。 AFAIK,使用黄瓜 运行ner 时,单个 class 无法实现您正在寻找的内容。

当您使用 qaf 时,您可以使用 BDD2Factory 而不是黄瓜测试 class。您可以提供 xml 考虑场景的配置作为 TestNG 测试用例。您可以混合和匹配 TestNG 支持的不同配置选项,就像执行 java 中编写的测试一样。在您的情况下,它可能如下所示:

<suite name="QAF Demo" verbose="0" parallel="false" data-provider-thread-count="10">

<test name="First"  parallel="methods"  thread-count="5">
   <groups>
      <run>
        <include name="first" />
      </run>
   </groups>
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2" />
   </classes>
</test>

<test name="second"  parallel="methods"  thread-count="5">
   <groups>
      <run>
        <include name="then" />
      </run>
   </groups>
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2" />
   </classes>
</test>
</suite>

您还可以利用 qaf 的测试用例 metadata filter. Groups/Tags are also considered as meta data。 所以不是:

<groups>
  <run>
    <include name="first" />
  </run>
</groups>

您可以简单地提供 include 参数如下:

   <parameter name="include" value="{'groups': ['first']}" />

我想在这里重申,以上功能仅在您 运行ning 使用 BDDTestFactory2 时可用,但在使用 cucumber 运行ner 时不可用。参考 using qaf-bdd-runner