博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TestNG 六 测试结果
阅读量:5900 次
发布时间:2019-06-19

本文共 4108 字,大约阅读时间需要 13 分钟。

一、成功、失败和断言

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

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

下面是个例子:

 

[java]   
 
  1. @Test  
  2. public void verifyLastName() {  
  3.   assert "Beust".equals(m_lastName) : "Expected name Beust, for" + m_lastName;  
  4. }  
  5.   
  6. TestNG 也包括 JUnit 的 Assert 类,允许你对复杂的对象执行断言:  
  7. import static org.testng.AssertJUnit.*;  
  8. //...  
  9. @Test  
  10. public void verify() {  
  11.   assertEquals("Beust", m_lastName);  
  12. }  

 

注意,上述代码使用了静态导入,以便能够使用 assertEquals 方法,而无需加上它的类前缀。

二、日志与结果

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

 

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

(1)监听器---实现接口 org.testng.ITestListener ,并且会在测试开始、通过、失败等时刻实时通知

(2)报告器---实现接口org.testng.IReporter ,并且当整个测试运行完毕之后才会通知。IReporter 接受一个对象列表,这些对象描述整个测试运行的情况

例如,如果你想要生成一个PDF报告,那么就不需要实时通知,所以用IReporter。如果需要写一个实时报告,例如用在GUI上,还要在每次测试时(下面会有例子和解释)有进度条或者文本报告显示点 ("."),那么 ITestListener 是你最好的选择。

 

例如,如果你想要生成一个PDF报告,那么就不需要实时通知,所以用IReporter。如果需要写一个实时报告,例如用在GUI上,还要在每次测试时(下面会有例子和解释)有进度条或者文本报告显示点 ("."),那么ITestListener 是你最好的选择。

 

1.日志监听器

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

 

[java]   
 
  1. public class DotTestListener extends TestListenerAdapter {  
  2.   private int m_count = 0;  
  3.   
  4.   @Override  
  5.   public void onTestFailure(ITestResult tr) {  
  6.     log("F");  
  7.   }  
  8.   
  9.   @Override  
  10.   public void onTestSkipped(ITestResult tr) {  
  11.     log("S");  
  12.   }  
  13.   
  14.   @Override  
  15.   public void onTestSuccess(ITestResult tr) {  
  16.     log(".");  
  17.   }  
  18.   
  19.   private void log(String string) {  
  20.     System.out.print(string);  
  21.     if (m_count++ % 40 == 0) {  
  22.       System.out.println("");  
  23.     }  
  24.   }  
  25. }   

 

上例中,我们选择扩展 TestListenerAdapter ,它使用空方法实现了 ITestListener 。所以我不需要去重写那些我不需要的方法。如果喜欢可以直接实现接口。

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

java -classpath testng.jar;%CLASSPATH%org.testng.TestNG -listener org.testng.reporters.DotTestListenertest/testng.xml

 

2.日志报表

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

public void generateReport(List<ISuite>suites, String outputDirectory)

这个方法在 TestNG 中的所有测试都运行完毕之后被调用,这样你可以修改这个方法的参数,并且通过它们获得刚刚完成的测试的所有信息。

 

3.JUnit 报表

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

[html]   
 
  1. <target name="reports">  
  2.   <junitreport todir="test-report">  
  3.     <fileset dir="test-output">  
  4.       <include name="*/*.xml"/>  
  5.     </fileset>  
  6.     <report format="noframes"  todir="test-report"/>  
  7.   </junitreport>  
  8. </target>  

 

注意:由于JDK 1.5 和 JUnitReports 不兼容性,导致了frame版本不能够正常工作,所以你需要指定 "noframes" 使其能够正常工作。

 

4.报表 API

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

   Reporter.log("M3 WAS CALLED");

 

5. XML 报表

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

[html]   
 
  1. <testng-results>  
  2.     <suite name="Suite1">  
  3.         <groups>  
  4.             <group name="group1">  
  5.                 <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>  
  6.                 <method signature="com.test.TestOne.test1()" name="test1" class="com.test.TestOne"/>  
  7.             </group>  
  8.             <group name="group2">  
  9.                 <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>  
  10.             </group>  
  11.         </groups>  
  12.         <test name="test1">  
  13.             <class name="com.test.TestOne">  
  14.                 <test-method status="FAIL" signature="test1()" name="test1" duration-ms="0"  
  15.                              started-at="2007-05-28T12:14:37Z" description="someDescription2"  
  16.                              finished-at="2007-05-28T12:14:37Z">  
  17.                     <exception class="java.lang.AssertionError">  
  18.                         <short-stacktrace>java.lang.AssertionError  
  19.                             ... Removed 22 stack frames  
  20.                         </short-stacktrace>  
  21.                     </exception>  
  22.                 </test-method>  
  23.                 <test-method status="PASS" signature="test2()" name="test2" duration-ms="0"  
  24.                              started-at="2007-05-28T12:14:37Z" description="someDescription1"  
  25.                              finished-at="2007-05-28T12:14:37Z">  
  26.                 </test-method>  
  27.                 <test-method status="PASS" signature="setUp()" name="setUp" is-config="true" duration-ms="15"  
  28.                              started-at="2007-05-28T12:14:37Z" finished-at="2007-05-28T12:14:37Z">  
  29.                 </test-method>  
  30.             </class>  
  31.         </test>  
  32.     </suite>  
  33. </testng-results>  

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

 

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

 

本文转载自http://blog.sina.com.cn/bestfeiyong 

你可能感兴趣的文章
挖掘数据金矿 领军协同创新 曙光荣膺“2016大数据创新应用领袖企业”称号
查看>>
国内WiFi厂商公关客户常说的三句话!
查看>>
《大数据分析原理与实践》一一 3.2 关联规则分析
查看>>
Fast通道获得Win10 Mobile Build 14977更新
查看>>
GAN专题阅读小组 | 每周一起读 #05
查看>>
AMD与天津海光合资生产x86服务器芯片
查看>>
雅虎开源了TensorFlowOnSpark
查看>>
网络安全保险在欧洲更受欢迎
查看>>
如何处理IT事件管理以避免混乱
查看>>
物联网确保消费者隐私安全 才能起飞
查看>>
揭秘使用免费WiFi的真实代价
查看>>
《交互式程序设计 第2版》一2.3.2 数组
查看>>
移动互联网金融app 存在信息安全问题
查看>>
Android 开发中使用 SQLite 数据库
查看>>
Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
查看>>
IBM郭继军:机器学习配合行业经验将帮助企业成就未来
查看>>
Rambus9000万美元收购Inphi存储器互联业务
查看>>
泉州电信推进渠道互联网化转型
查看>>
《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.6节识别操作系统...
查看>>
linux系统防火墙iptables命令规则及配置的示例
查看>>