Jack Jason F
Jack Jason F

Reputation: 143

Pass variable from jenkins to testng.xml

I want to run test cases depending on variables passed from jenkins for example, choose testcases you want to run : testcaseOne, testcaseTwo

in pom.xml (maven) :

    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18.1</version>
                    <configuration>

                        <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                        </suiteXmlFiles>

                        <systemPropertyVariables>
                        <chooseCase>${chooseCase}</chooseCase>   <--this dont work
                        </systemPropertyVariables>

                        <parallel>tests</parallel>
                        <threadCount>10</threadCount>

                    </configuration>
</plugin>

I have two testng @test methods:

@Test(groups="caseOne")
@Test(groups="caseTwo")

And my testng.xml file:

<test name="Test">
    <groups>
    <run>
      <include name="${chooseCase}"/>
    </run>
    </groups>
    <classes>
      <class name="AppTest"/>
      <class name="AppTest2"/>
    </classes>
  </test> <!-- Test -->

How to pass this parameter depending on what and how many tests i want to run ? Maybe there is totally different way to do this ?

Upvotes: 4

Views: 5391

Answers (1)

Jaroslav Cincera
Jaroslav Cincera

Reputation: 1036

You can use BeanShell script in your testng.xml file http://testng.org/doc/documentation-main.html#beanshell and read system variables in it, something like:

<test name="Test">
    <method-selectors>
        <method-selector>
            <script language="beanshell">
                <![CDATA[
                    String myTestGroup = System.getProperty("chooseCase");
                    groups.containsKey(myTestGroup);
                ]]>
            </script>
        </method-selector>
    </method-selectors>

    <classes>
        <class name="AppTest"/>
        <class name="AppTest2"/>
    </classes>
</test>

Upvotes: 3

Related Questions