【译】TestNG官方文档中文版(09)—— 测试结果

本文档介绍了TestNG测试结果的判定标准,包括成功、失败和断言的定义。此外,详细讲解了如何利用监听器和报表器生成自定义的测试日志和结果,如日志监听器的实现、JUnit报表的生成以及XML报表的配置和使用。TestNG提供的这些功能使得测试结果的管理和分析更加灵活和详细。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6 - 测试结果

6.1 - 成功、失败和断言

如果一个测试没有抛出任何异常就完成运行或者说抛出了期望的异常(参见@Test注解的expectedExceptions属性文档),就说,这个测试时成功的。

测试方法的组成常常包括抛出多个异常,或者包含各种各样的断言(使用Java "assert" 关键字)。一个 "assert" 失败会触发一个 AssertionErrorException,结果就是测试方法被标记为失败(记住,如果你看不到断言错误,要在加上 -ea 这个JVM参数)。

下面是个例子:

@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 方法,而无需加上它的类前缀。

6.2 - 日志与结果

当运行SuiteRunner的时候会指定一个目录,之后测试的结果都会保存在一个在那个目录中叫做 index.html 的文件中。这个index文件指向其他多个HTML和文本文件,被指向的文件包含了整个测试的结果。你可以再 这里 看到一个例子。

通过使用监听器和报表器,可以很轻松的生成自己的TestNG报表:

  • 监听器 实现接口 org.testng.ITestListener ,并且会在测试开始、通过、失败等时刻实时通知
  • 报告器 实现接口 org.testng.IReporter ,并且当整个测试运行完毕之后才会通知。IReporter 接受一个对象列表,这些对象描述整个测试运行的情况
例如,如果你想要生成一个PDF报告,那么就不需要实时通知,所以用 IReporter。如果需要写一个实时报告,例如用在GUI上,还要在每次测试时(下面会有例子和解释)有进度条或者文本报告显示点 ("."),那么 ITestListener 是你最好的选择。

  6.2.1 - 日志监听器

这里是对每个传递进来的测试显示"."的监听器,如果测试失败则显示 "F" ,跳过则是"S":

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("");
   
}
 
}
}
上例中,我们选择扩展 TestListenerAdapter ,它使用空方法实现了 ITestListener 。所以我不需要去重写那些我不需要的方法。如果喜欢可以直接实现接口。

这里是我使用这个新监听器调用TestNG的例子:

java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener org.testng.reporters.DotTestListener test/testng.xml
输出是:
........................................
........................................
........................................
........................................
........................................
.........................
===============================================
TestNG JDK 1.5
Total tests run: 226, Failures: 0, Skips: 0
===============================================
注意,当你使用 -listener 的时候,TestNG 会自动的检测你所使用的监听器类型。

  6.2.2 - 日志报表

org.testng.IReporter 接口只有一个方法:

public void generateReport(List<ISuite> suites, String outputDirectory)
这个方法在 TestNG 中的所有测试都运行完毕之后被调用,这样你可以方法这个方法的参数,并且通过它们获得刚刚完成的测试的所有信息。

  6.2.3 - JUnit 报表

TestNG 包含了一个可以让TestNG的结果和输出的XML能够被JUnitReport所使用的监听器。这里 有个例子,并且ant任务创建了这个报告:

<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 不兼容性,导致了frame版本不能够正常工作,所以你需要指定 "noframes" 使其能够正常工作。
   6.2.4 - 报表 API

如果你要在HTML报告中显示日志信息,那么就要用到类 org.testng.Reporter

     Reporter.log ( "M3 WAS CALLED" ) ;

6.2.5 - XML 报表

TestNG 提供一种XML报表器,使得能够捕捉到只适用于TestNG而不适用与JUnit报表的那些特定的信息。这在用户的测试环境必须要是用TestNG特定信息的XML,而JUnit又不能够提供这些信息的时候非常有用。下面就是这种报表器生成XML的一个例子:

<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>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>

这个报表器是随着默认监听器一起诸如的,所以你默认的情况下就可以得到这种类型的输出。这个监听器提供了一些属性,可以修改报表来满足你的需要。下表包含了这些属性,并做简要说明:

属性说明Default value
outputDirectory一个 String 指明了XML文件要存放的目录TestNG 输出目录
timestampFormat指定报表器生成日期字段的格式yyyy-MM-dd'T'HH:mm:ss'Z'
fileFragmentationLevel值为1,2或3的整数,指定了XML文件的生成方式:
1 - 在一个文件里面生成所有的结果
2 - 每套测试都单独生成一个XML文件,这些文件被链接到一个主文件
3 - 同2,不过添加了引用那些套测试的测试用例的XML文件
1
splitClassAndPackageNamesboolean值,指明了对 <class> 元素的生成方式。例如,你在false的时候得到 <class class="com.test.MyTest"> ,在true的时候 <class class="MyTest" package="com.test">false
generateGroupsAttributeboolean值指定了对<test-method> 元素是否生成 groups 属性。这个功能的目的是,对那些无需遍历整个<group> 元素,且只含有一个测试方法的组来说,可以提供一种更直接的解析组的方式。false
stackTraceOutputMethod指定在发生异常的时候生成异常,追踪弹栈信息的类型,有如下可选值:
0 - 无弹栈信息 (只有异常类和消息).
1 - 尖端的弹栈信息,从上到下只有几行
2 - 带有所有内部异常的完整的弹栈方式
3 - 短长两种弹栈方式
2
generateDependsOnMethods对于<test-method>元素,使用这个属性来开启/关闭 depends-on-methods 属性。true
generateDependsOnGroups对于<test-method>属性开启depends-on-groups 属性。true

为了配置报表器,你可以在命令行下使用 -reporter 选项,或者在 Ant 任务中嵌入<reporter> 元素。对于每个情况,你都必须指明类org.testng.reporters.XMLReporter。但是要注意你不能够配置内建的报表器,因为这个只使用默认配置。如果你的确需要XML报表,并且使用自定义配置,那么你就不得不手工完成。可以通过自己添加一两个方法,并且禁用默认监听器达到目的。

 

返回到 我的个人主页

或者看看我的其他项目:

  • EJBGen:  EJB 标签生成器
  • TestNG:  使用注解的测试框架,测试组和方法参数
  • Doclipse:  JavaDoc 标签的 Eclipse 插件
  • J15:  Eclipse 插件,帮助你迁移代码到新的 JDK 1.5
  • SGen:  使用插件体系的 XDoclet 替换器
  • Canvas:  基于 Groovy 语言的模板生成器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值