接口自动化测试的必备神器~ 更多测开知识和技能,查看公众号【测试备忘录】
1. 重新运行失败用例
每当suite中的测试失败时,TestNG都会在输出目录中创建一个名为testng-failed.xml的文件。该XML文件包含必要的信息,以此来重新运行失败的这些方法,从而使您可以快速重现失败,而不必运行整个测试。如下所示:
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs test-outputs\testng-failed.xml
注:testng-failed.xml包含所有必需的依赖方法,因此可以确保运行失败的方法时不会出现任何SKIP失败。
有时,可能希望TestNG在测试失败时自动重试。在这种情况下,可以使用重试分析器(retry analyzer)。将重试分析器绑定到测试时,TestNG会自动调用重试分析器,以确定TestNG是否可以再次重试测试用例,来尝试查看刚刚失败的测试是否通过。
使用重试分析器的步骤:
-
构建接口org.testng.IRetryAnalyzer的实现
-
将实现绑定到@Test注解,例如@Test(retryAnalyzer = LocalRetry.class)
以下是重试分析器的示例实现,该示例最多重试一次测试三次。
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class MyRetry implements IRetryAnalyzer {
private int retryCount = 0;
private static final int maxRetryCount = 3;
@Override
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestclassSample {
@Test(retryAnalyzer = MyRetry.class)
public void test2() {
Assert.fail();
}
}
2. Junit测试框架的支持
TestNG可以运行JUnit 3和JUnit 4测试。您需要做的就是将JUnit jar文件放在类路径上,在testng.classNames属性中指定您的JUnit测试类,并将testng.junit属性设置为true:
<test name="Test1" junit="true">
<classes>
<!-- ... -->
在这种情况下,TestNG根据在类路径上找到的JUnit版本执行类似于JUnit的方法:
-
JUnit 3
-
-
类中所有以test *开头的方法都将运行。
-
如果您的测试类上有一个方法setUp(),它将在每个测试方法之前调用。
-
如果您的测试类上有一个方法tearDown(),它将在每个测试方法之后被调用
-
如果您的测试类包含方法suite(),则将调用此方法返回的所有测试用例。
-
-
JUnit4
-
TestNG将使用org.junit.runner.JUnitCore运行程序运行测试用例。
-
3. 在程序中调用testng
可以很容易地从自己的程序中调用TestNG:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { Run2.class });
testng.addListener(tla);
testng.run();
该示例创建一个TestNG对象并运行测试类Run2。它还添加了一个TestListener。可以使用适配器类org.testng.TestListenerAdapter或自己实现org.testng.ITestListener。该接口包含各种回调方法,可以跟踪测试的开始时间,成功时间,失败时间等。
同样,您可以在testng.xml文件上调用TestNG,也可以自己创建一个虚拟的testng.xml文件。可以使用包org.testng.xml中的类:XmlClass,XmlTest等。这些类中的每一个都对应于它们的XML标记。
假设想生成如下虚拟文件:
<suite name="TmpSuite" >
<test name="TmpTest" >
<classes>
<class name="test.failures.Child" />
<classes>
</test>
</suite>
可以使用如下代码:
XmlSuite suite = new XmlSuite();
suite.setName("TmpSuite");
XmlTest test = new XmlTest(suite);
test.setName("TmpTest");
List<XmlClass> classes = new ArrayList<XmlClass>();
classes.add(new XmlClass("test.failures.Child"));
test.setXmlClasses(classes) ;
然后可以将此XmlSuite传递给TestNG:
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
欢迎关注我的微信公众号 【测试备忘录】,查看更多测开技能知识。一起学习交流~