一.重跑失败的测试用例
每次每个测试套件中有测试用例执行失败,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)
二.举例说明
- 实现重跑接口,实现测试用例执行失败重跑三次:
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; }}
- 绑定该实现到测试用例上:
public class TestRetry { @Test(retryAnalyzer = MyRetry.class) public void test1() { System.out.println("测试执行"); Assert.fail(); }}
- 编写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>
- 执行结果,尝试重跑了三次,并且忽略了之前重跑的测试结果,只输出最后一次:
没有绑定重跑方法时的执行结果,没有显示重跑次数:
三.支持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执行者来执行测试。