6

我有以下 testng 测试方法。

    @Test(groups = {"tsg1.0","smoke"})
public void testLoginWithInvalidCredentials(String usernameValue, String passwordValue){        
    /*Print something*/
}


@Test(groups = {"tsg1.0"})          
public void testLoginWithUserIdOnly(String username) {       
    /*Print something*/
}



@Test(groups = {"tsg1.0"})          
public void testLoginWithPasswordOnly(String password) {         
    /*Print something*/
}

这是用于测试上述方法的testng xml。

<suite name="Suite" thread-count="1" verbose="10"> 
  <test name="Test">
  <groups>
<run>  
 <include name="tsg1.0"/>    
</run>
</groups>
<packages>  
<package name="<test package name>"/>       
 </packages> 
</test>  
</suite>

有没有一种方法可以让我创建一个 xml,其中将包含组“TSG1.0”和“SMOKE”的测试。在这种情况下,我只希望运行第一个测试(testLoginWithInvalidCredentials)。

请帮忙。

谢谢,迈克。

PS:以下不起作用,因为它将包括 tsg1.0 或烟雾。我想要一个和条件......

<run>
<include name="tsg1.0"/>   
<include name="smoke"/>  
</run>
4

4 回答 4

5

你实际上可以做到这一点“半现成的”: http ://testng.org/doc/documentation-main.html#beanshell

在您的特定情况下,它将是这样的:

<method-selectors>
  <method-selector>
    <script language="beanshell"><![CDATA[
       return groups.containsKey("tsg1.0") && groups.containsKey("smoke");
     ]]></script>
  </method-selector>
</method-selectors>

刚刚在这里更详细地回答了一个类似的问题: 如果 TestNG 是两个组的成员,是否可以给 TestNG 设置一个条件来运行测试?

于 2015-06-19T17:31:51.843 回答
3

在 testng 中没有现成的 AFAIK。您可能要做的是编写您的方法拦截器并仅返回属于这两个组的这些方法的列表..

您还可以从拦截方法的 testcontext 参数中获取包含的组。

您可以参考这里了解更多信息: http: //testng.org/doc/documentation-main.html#methodinterceptors

于 2013-04-10T08:08:28.940 回答
2

您可以拥有一组组

Groups can also include other groups. These groups are called "MetaGroups".
For example, you might want to define a group "all" that includes "checkintest" 
and "functest"."functest" itself will contain the groups "windows" and "linux" 
while "checkintest will only contain "windows". 

属性文件示例:

<groups>
    <define name="functest">
      <include name="windows"/>
      <include name="linux"/>
    </define>

    <define name="all">
      <include name="functest"/>
      <include name="checkintest"/>
    </define>

    <run>
      <include name="all"/>
    </run>
  </groups>
于 2013-04-10T07:08:50.417 回答
1

对于从 cmd 执行的多个 TestNG 组,您可以在 TestNG.xml 文件中使用以下脚本。

<method-selectors>
        <method-selector>
            <script language="beanshell"><![CDATA[
            Boolean runTest = false;
            String groupsName = System.getProperty("GROUPS");

            if (groupsName != null && groupsName != ""){
                StringTokenizer groupsTagList = new StringTokenizer(groupsName, ",");
                while (groupsTagList.hasMoreTokens()) {
                    if(groups.containsKey(groupsTagList.nextToken().trim()){
                        runTest = true;
                        break;
                    }
                }
            }else{
                runTest = true;
            } 
            return runTest;
            ]]>
            </script>
        </method-selector>
    </method-selectors>

从 Maven 执行:

mvn 测试 -DGROUPS=groups1,groups2,groups3

它会正常工作...

于 2018-01-24T17:57:15.763 回答