TestNG: How can I run same test case multiple times?

后端 未结 8 1068
你的背包
你的背包 2020-12-30 20:22

I want to run a test case multiple times. Is that configurable in the testng.xml? If I add a loop in the test method, then the results of each run will not be a

相关标签:
8条回答
  • 2020-12-30 20:43
    public class ProcessTest implements ITest {
    
    
        protected ProcessData processData;
    
        @Test
        public void executeServiceTest() {
            System.out.println(this.processData.toString());
        }
    
        @Factory(dataProvider = "processDataList")
        public RiskServiceTest(ProcessData processData) {
            this.processData = processData;
        }
    
        @DataProvider(name = "processDataList", parallel=true)
        public static Object[] getProcessDataList() {
    
            Object[] serviceProcessDataList = new Object[10];
    
        for(int i=0; i<=serviceProcessDataList.length; i++){
            ProcessData processData = new ProcessData();
            serviceProcessDataList[i] = processData
        }
    
    
            return serviceProcessDataList;
        }
    
        @Override
        public String getTestName() {
    
            return this.processData.getName();
        }
    }
    

    By using @Factory and @DataProvider annotation of TestNG you can execute same test-case multiple times with different data.

    0 讨论(0)
  • 2020-12-30 20:47

    TestNg has one method. You can use this method and run your test case multiple times:

    @Test(invocationCount = 100)
    
    public void testCount() {
    
    }
    
    0 讨论(0)
  • 2020-12-30 20:50

    You cannot do it from the xml, but in the @Test annotation - you can add a invocationCount attribute with the number of times you want to run it. It would come out as those many tests run in the report.

    eg.

    @Test(invocationCount = 10)
    public void testCount() {..}
    

    You have missed closing curly bracket at the end, so a small correction.

    0 讨论(0)
  • 2020-12-30 20:51

    None of the answers so far really give the user the ability to up the invocation count from the testng file, which is what was asked for. This solution piggybacks off of gaurav25's DataProvider solution.

    class TestClass() {
        int invocationCount;
    
        @Parameters({ "invocationCount" })
        @BeginClass
        void BeginClass( @Optional("1") String invocationCount) {
            this.invocationCount = Ingeter.parse(invocationCount)
        }
    
        // It will return a 2D array of size 3x1
        @DataProvider(name="URLprovider")
        private Object[][] getURLs() {
            ArrayList<Object []> obj = new ArrayList<>(3 * this.invocationCount);
    
            for(int iCount = 0; iCount < this.invocationCount; ++iCount) {
                list.add( new Object[] {"https://www.google.co.in/"} );
                list.add( new Object[] {"http://www.gmail.com/"} );
                list.add( new Object[] {"http://stackoverflow.com/"} );
            }
    
            return list.toArray();
        }
    
        /* Since Data provider for this test method returns 2D array of size
         (3*invocationCount)x1, this test method will run 3*invocationCount 
         times **automatically** with 1 parameter every time. */
        @Test(dataProvider="URLprovider")
        private void notePrice(String url) {
            driver.get(url);
            System.out.println(driver.getTitle());  
        }
    }
    

    Now you can alter how many test sets get run through the test function with this testng.xml file:

    <suite name="ESFService" verbose="1" parallel="methods" thread-count="1" data-provider-thread-count="10" >
        <test name="Basic">
            <classes>
                <class name="TestClass">
                    <parameter name="invocationCount" value="5"/>
                </class>
            </classes>
        </test>
    </suite>
    
    0 讨论(0)
  • 2020-12-30 20:56

    I know pretty late to the party but if your aim is to achieve report for each run then you can try TestNG Listener IAnnotationTransformer

    code Snippet

    public class Count implements IAnnotationTransformer {
    
        @Override
        public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
            // TODO Auto-generated method stub
            annotation.setInvocationCount(numberOfTimesTOExecute);
        }
    

    xml snippet

    <listeners>
    <listener class-name="multiple.Count"></listener>
    

    0 讨论(0)
  • 2020-12-30 20:56

    You cannot do it from the xml, but it can be achieved by using @DataProvider annotation in TestNG.

    Here is a sample code:

    /* Since Data provider for this test method returns 2D array of size 3x1, 
    this test method will run 3 times **automatically** with 1 parameter every time. */
    @Test(dataProvider="URLprovider")
    private void notePrice(String url) {
        driver.get(url);
        System.out.println(driver.getTitle());  
    }
    
    // It will return a 2D array of size 3x1
    @DataProvider(name="URLprovider")
    private Object[][] getURLs() {
      return new Object[][] {
        {"https://www.google.co.in/"},
        {"http://www.gmail.com/"},
        {"http://stackoverflow.com/"}
      };
    }
    
    0 讨论(0)
提交回复
热议问题