一.重跑失败的测试用例

    每次每个测试套件中有测试用例执行失败,TestNG都会在测试结果路径下生成一个testng-failed.xml文件,这个xml文件包含了一些重跑那些失败方法的必要信息,允许你只执行那些失败的方法,而不需要再次执行所有的测试方法。一个典型的例子如下:

java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xmljava -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs test-outputs\testng-failed.xml

    注意,testng-failed.xml文件包含所有执行失败的测试方法的依赖方法,保证再次执行时,不会跳过任何执行失败的测试方法。

    有时候可能想要TestNG自动尝试重跑一个测试方法,无论它是否失败。这种情况下,可以使用重试分析器。当给一个测试用例绑定了一个重试分析器,TestNG会自动调用重试分析器来确定是否可以重跑测试用例,以尝试查看刚执行失败的测试用例现在是否通过。下面举例如何绑定一个重试分析器:

    1.实现接口org.testng.IRetryAnalyzer

    2.将该实现绑定到@Test注解上,如:@Test(retryAnalyzer = LocalRetry.class)

二.举例说明

  1. 实现重跑接口,实现测试用例执行失败重跑三次:
public class MyRetry implements IRetryAnalyzer {    private int retryCount = 0;    private static final int maxRetryCount = 3;    public boolean retry(ITestResult result) {        if (retryCount < maxRetryCount) {            retryCount ++;            return true;        }        return false;    }}
  1. 绑定该实现到测试用例上:
public class TestRetry {    @Test(retryAnalyzer = MyRetry.class)    public void test1() {        System.out.println("测试执行");        Assert.fail();    }}
  1. 编写xml执行测试用例
<?xml version="1.0" encoding="utf-8" ?><suite name="mysuit">    <test name="mytest">        <classes>            <class name="com.test.testng.retry.TestRetry" />        classes>    test>suite>
  1. 执行结果,尝试重跑了三次,并且忽略了之前重跑的测试结果,只输出最后一次:

JavaRetryTemplate重试 java实现失败重试_测试用例

没有绑定重跑方法时的执行结果,没有显示重跑次数:

JavaRetryTemplate重试 java实现失败重试_JavaRetryTemplate重试_02

三.支持JUnit

    TestNG支持JUnit3和JUnit4测试,只需要将JUnit的jar包放在classpath的路径下,在testng.classNames属性中指定JUnit测试类,并且设置testng.junit属性为true:

<test name="Test1" junit="true">  <classes>

    在这种情况下,TestNG的行为类似于JUnit,具体取决于类路径上的JUnit版本:

    JUnit3版本:

        1)类中所有以test开头的测试方法都将被执行。

        2)如果测试类中有一个方法setUp(),它将会在所有测试方法前执行。

        3)如果测试类中有一个方法tearDown(),它将会在所有测试方法后执行。

        4)如果测试类中有一个方法suit(),则将调用此方法返回的所有测试。

    JUnit4版本:

        TestNG将使用org.junit.runner.JUnitCore执行者来执行测试。