Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TestNG Groups: Can we include two group names and create one group to run tests?

I have following testng test methods.

    @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*/
}

Here is the testng xml used to test the above methods.

<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>

Is there a way where in I can create one xml which will include tests with Groups "TSG1.0" AND "SMOKE". I want only the first test(testLoginWithInvalidCredentials) to be run in this case.

Please help.

Thanks, Mike.

PS: The following won't work as It will include tsg1.0 or smoke. I want an and condition here...

<run>
<include name="tsg1.0"/>   
<include name="smoke"/>  
</run>
like image 460
Mike Avatar asked Apr 10 '13 07:04

Mike


3 Answers

You can actually do this "semi off the shelf": http://testng.org/doc/documentation-main.html#beanshell

In your particular case, it would be something like this:

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

Just answered a similar question in more detail here: Is it possible to put a condition to TestNG to run the test if that is member of two groups?

like image 112
mac Avatar answered Nov 04 '22 02:11

mac


AFAIK that doesn't come off the shelf in testng. What you can probably do is write your methodinterceptor and return only the list of thsoe methods which fall in both the groups..

You can also get the includedgroups from the testcontext param of the intercept method.

You can refer here for more : http://testng.org/doc/documentation-main.html#methodinterceptors

like image 30
niharika_neo Avatar answered Nov 04 '22 01:11

niharika_neo


You can have a Group of groups.

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". 

A property file sample:

<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>
like image 37
rajesh Avatar answered Nov 04 '22 01:11

rajesh