1. 成功、失败和断言
成功:如果测试完成而没有引发任何异常,或者引发了预期的异常,则该测试用例被视为成功。
失败:测试用例通常由可能引发异常的调用或各种断言(使用Java“ assert”关键字)组成。“断言”失败将触发AssertionErrorException,进而将方法标记为失败(如果未看到断言错误,在JVM上使用-ea设置来查看)。
测试用例断言的示例如下:
@Test public void verifyLastName() { assert "Beust".equals(m_lastName) : "Expected name Beust, for" + m_lastName; }
TestNG还支持JUnit的Assert类,可以对复杂对象执行断言:
import static org.testng.AssertJUnit.*; //... @Test public void verify() { assertEquals("Beust", m_lastName); }
以上代码使用静态导入来使用assertEquals方法,不必在类之前添加前缀使用。
2. 结果记录
测试运行的结果在启动SuiteRunner时指定的目录中的index.html文件中创建。该文件包含整个测试运行结果的各种其他HTML和文本文件的总体展示情况。
使用TestNG与监听器(Listeners)和报告器(reporters)可以方便的生成自己的报告:
- Listeners实现org.testng.ITestListener接口,并在测试开始,通过,失败等时实时通知。
- reporters实现org.testng.IReporter接口,并在TestNG运行完所有suite时通知。IReporter实例接收描述整个测试运行的对象列表。
具体使用场景:
- 如果要生成测试运行的PDF报告,不需要实时通知测试运行情况,应该使用IReporter。
- 如果想编写测试的实时报告,例如带有进度条的GUI等,则使用ITestListener。
1)Listeners的示例
public class DotTestListener extends TestListenerAdapter { private int m_count = 0; @Override public void onTestFailure(ITestResult tr) { log("F"); } @Override public void onTestSkipped(ITestResult tr) { log("S"); } @Override public void onTestSuccess(ITestResult tr) { log("."); } private void log(String string) { System.out.print(string); if (++m_count % 40 == 0) { System.out.println(""); } } }
其中“.”表示测试用例通过,F表示失败,S表示pass。可以根据需要自定义。
java命令行执行:
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener org.testng.reporters.DotTestListener test\testng.xml
输出示例:
........................................ ........................................ ........................................ ........................................ ........................................ ......................... =============================================== TestNG JDK 1.8 Total tests run: 226, Failures: 0, Skips: 0 ===============================================
注:当使用-listener时,TestNG会自动确定要使用的监听器的类型。
2)reporters使用
org.testng.IReporter接口只有一个方法:
public void generateReport(List<ISuite> suites, String outputDirectory)
当所有suites都已运行完成时,TestNG将调用此方法。
3. JunitReports
TestNG包含一个可以获取TestNG结果并输出一个XML文件的监听器,然后可以将结果送到JUnitReport。 示例如下,可以通过ant任务创建report:
<target name="reports"> <junitreport todir="test-report"> <fileset dir="test-output"> <include name="*/*.xml"/> </fileset> <report format="noframes" todir="test-report"/> </junitreport> </target>
注:JDK 1.5和JUnitReports不兼容,需要指定“ noframes”使用。
4. Reporter API
如果需要记录在生成的HTML报告中显示的消息,则可以使用org.testng.Reporter类。
5. XML Reports
TestNG提供了XML reporter,用于捕获JUnit报告中不支持的TestNG的特定信息。当用户的测试环境需要使用具有TestNG特定信息的XML结果时,这个功能特别有用。可以使用-reporter通过命令行将该reporter注入TestNG。
示例用法:
-reporter org.testng.reporters.XMLReporter:generateTestResultAttributes=true,generateGroupsAttribute=true.
下面是报告使用示例:
<testng-results> <suite name="Suite1"> <groups> <group name="group1"> <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/> <method signature="com.test.TestOne.test1()" name="test1" class="com.test.TestOne"/> </group> <group name="group2"> <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/> </group> </groups> <test name="test1"> <class name="com.test.TestOne"> <test-method status="FAIL" signature="test1()" name="test1" duration-ms="0" started-at="2007-05-28T12:14:37Z" description="someDescription2" finished-at="2007-05-28T12:14:37Z"> <exception class="java.lang.AssertionError"> <short-stacktrace> <![CDATA[ java.lang.AssertionError ... Removed 22 stack frames ]]> </short-stacktrace> </exception> </test-method> <test-method status="PASS" signature="test2()" name="test2" duration-ms="0" started-at="2007-05-28T12:14:37Z" description="someDescription1" finished-at="2007-05-28T12:14:37Z"> </test-method> <test-method status="PASS" signature="setUp()" name="setUp" is-config="true" duration-ms="15" started-at="2007-05-28T12:14:37Z" finished-at="2007-05-28T12:14:37Z"> </test-method> </class> </test> </suite> </testng-results>
6. TestNG退出码
当TestNG完成执行时,它将退出并返回一个代码。可以检查此返回码以了解故障的性质(如果有的话)。下表总结了TestNG当前使用的不同退出代码。
FailedWithinSuccess |
Skipped |
Failed |
Status Code |
Remarks |
No |
No |
No |
0 |
Passed tests |
No |
No |
Yes |
1 |
Failed tests |
No |
Yes |
No |
2 |
Skipped tests |
No |
Yes |
Yes |
3 |
Skipped/Failed tests |
Yes |
No |
No |
4 |
FailedWithinSuccess tests |
Yes |
No |
Yes |
5 |
FailedWithinSuccess/Failed tests |
Yes |
Yes |
No |
6 |
FailedWithinSuccess/Skipped tests |
Yes |
Yes |
Yes |
7 |
FailedWithinSuccess/Skipped/Failed tests |
欢迎关注交流~