如何根据 TestNG 中的条件排除组?
How to exclude groups based on condition in TestNG?
我在登录模块中有大约 10 个测试用例。我必须在登台和产品环境中执行测试,但在产品环境中,需要排除一些特定的测试用例,这些测试用例需要在应用程序中插入一些虚拟数据。为此,我在场景中添加了一个组名 PRO_EXCLUDE
。
参考下面的示例,其中包含我在执行时需要排除的组合组名称。
SCENARIO: verify login landing page
META-DATA: {"TestCase_ID":"BP_L&R_001","description":"verify login landing page ","groups":["REGRESSION","PRO_EXCLUDE"]}
Given user is on homepage
When clicks on login link
Then verify page title text with title '${loginpage.title}'
END
其余方法只有一组,即REGRESSION
我已经按照以下方式配置了测试
<test name="Login" enabled="true">
<method-selectors>
<method-selector>
<script language="beanshell"><![CDATA[ return groups.containsKey("REGRESSION") && groups.containsKey("PRO_EXCLUDE");]]></script>
</method-selector>
</method-selectors>
<parameter name="scenario.file.loc" value="scenarios/login.bdd" />
<classes>
<class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory"></class>
</classes>
</test>
这将执行包含 REGRESSION
和 PRO_EXCLUDE
组的场景。我不想执行这个,但只有 REGRESSION
组的其余场景。
以下条件适合我:
<method-selectors>
<method-selector>
<script language="beanshell"><![CDATA[ return groups.containsKey("REGRESSION") && (!groups.containsKey("PRO_EXCLUDE"));]]></script>
</method-selector>
</method-selectors>
将不胜感激进一步的解决方案。
更好的方法是利用 qaf 的元数据功能。据此而不是添加多个组,而是根据性质对它们进行分类。例如:
- 范围 - 烟雾,回归
- 模块 - FunctionlModule1,FM2
- 渠道 - 网络,API,移动
等...
您需要为您的AUT 定义并在场景中设置为元数据。
SCENARIO: verify login landing page
META-DATA: {"TestCase_ID":"BP_L&R_001","description":"verify login landing page ","scope":"REGRESSION","feature":"PRO_EXCLUDE"]}
Given user is on homepage
When clicks on login link
Then verify page title text with title '${loginpage.title}'
END
如果您在 java 中编写测试用例,您可以在测试方法上使用 @MetaData
来设置测试用例元数据。您可以通过设置适当的 include
和 exclude
属性 值来使用元数据过滤器,如下所示:
include= {'scope': ['REGRESSION'], 'feature': ['PRO_EXCLUDE']}
它将包括测试 cases/scenario,它具有元数据 scope
,其值为 REGRESSION
AND feature
,其值为是 PRO_EXCLUDE
。更多用法示例请参考documentation。
注意:要正确使用此功能,您必须在 [=50 中添加来自 qaf com.qmetry.qaf.automation.testng.pro.QAFMethodSelector
的方法选择器=] 配置文件或在 ant testng 目标或在 maven pom.组也被 qaf 视为元数据之一。
我在登录模块中有大约 10 个测试用例。我必须在登台和产品环境中执行测试,但在产品环境中,需要排除一些特定的测试用例,这些测试用例需要在应用程序中插入一些虚拟数据。为此,我在场景中添加了一个组名 PRO_EXCLUDE
。
参考下面的示例,其中包含我在执行时需要排除的组合组名称。
SCENARIO: verify login landing page
META-DATA: {"TestCase_ID":"BP_L&R_001","description":"verify login landing page ","groups":["REGRESSION","PRO_EXCLUDE"]}
Given user is on homepage
When clicks on login link
Then verify page title text with title '${loginpage.title}'
END
其余方法只有一组,即REGRESSION
我已经按照以下方式配置了测试
<test name="Login" enabled="true">
<method-selectors>
<method-selector>
<script language="beanshell"><![CDATA[ return groups.containsKey("REGRESSION") && groups.containsKey("PRO_EXCLUDE");]]></script>
</method-selector>
</method-selectors>
<parameter name="scenario.file.loc" value="scenarios/login.bdd" />
<classes>
<class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory"></class>
</classes>
</test>
这将执行包含 REGRESSION
和 PRO_EXCLUDE
组的场景。我不想执行这个,但只有 REGRESSION
组的其余场景。
以下条件适合我:
<method-selectors>
<method-selector>
<script language="beanshell"><![CDATA[ return groups.containsKey("REGRESSION") && (!groups.containsKey("PRO_EXCLUDE"));]]></script>
</method-selector>
</method-selectors>
将不胜感激进一步的解决方案。
更好的方法是利用 qaf 的元数据功能。据此而不是添加多个组,而是根据性质对它们进行分类。例如:
- 范围 - 烟雾,回归
- 模块 - FunctionlModule1,FM2
- 渠道 - 网络,API,移动
等...
您需要为您的AUT 定义并在场景中设置为元数据。
SCENARIO: verify login landing page
META-DATA: {"TestCase_ID":"BP_L&R_001","description":"verify login landing page ","scope":"REGRESSION","feature":"PRO_EXCLUDE"]}
Given user is on homepage
When clicks on login link
Then verify page title text with title '${loginpage.title}'
END
如果您在 java 中编写测试用例,您可以在测试方法上使用 @MetaData
来设置测试用例元数据。您可以通过设置适当的 include
和 exclude
属性 值来使用元数据过滤器,如下所示:
include= {'scope': ['REGRESSION'], 'feature': ['PRO_EXCLUDE']}
它将包括测试 cases/scenario,它具有元数据 scope
,其值为 REGRESSION
AND feature
,其值为是 PRO_EXCLUDE
。更多用法示例请参考documentation。
注意:要正确使用此功能,您必须在 [=50 中添加来自 qaf com.qmetry.qaf.automation.testng.pro.QAFMethodSelector
的方法选择器=] 配置文件或在 ant testng 目标或在 maven pom.组也被 qaf 视为元数据之一。