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。 GherkinScenarioFactory
和 BDDTestFactory2
(使用 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
我在一个功能文件中有 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。 GherkinScenarioFactory
和 BDDTestFactory2
(使用 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