testng日志 ITestListener
上一节我们写一个日志类 extends TestListenerAdapter ----------TestListenerAdapter 是 ITestListener 实现的一个类
这一节,我们写一个日志类 implements ITestListener
ITestNGListener 接口 有两个子接口:IReporter (生成报告)、ITestListener (生成日志)
此次我们写一个日志类直接实现 ITestListener 接口
在自定义的 customListener 中,需要实现 ITestListener 的全部方法。
import org.testng.ITestListener;
import org.testng.ITestResult;
import org.testng.ITestContext; /**
* Created by wwh on 17/2/13.
*/
public class customListener implements ITestListener{ public void onTestStart(ITestResult result) {
System.out.println("Test started running" + result.getMethod().getMethodName() +
"at:"+result.getStartMillis());
} public void onTestSuccess(ITestResult result) {
System.out.println("Result success");
} public void onTestFailure(ITestResult result) {
System.out.println("Result failure");
} public void onTestSkipped(ITestResult result) {
System.out.println("Result skip");
} public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
System.out.println("Result fail but with success percentage");
} public void onStart(ITestContext context) {
System.out.println("now start test");
} public void onFinish(ITestContext context) {
System.out.println("now finish test");
}
}
使用自定义的listener
现在完成了创建listener,还需要声明listener,然后测试脚本才能使用这个listener。
有两种方式声明listener:
一种是 添加@Listeners 注解到测试条例上,缺点是每个使用自定义listener的测试条例都要添加@Listeners注解,很麻烦。
另一种是 使用testng.xml配置文件,在其中添加suite标签和listener标签。
方式一:使用注解
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import main.java.com.dbyl.appiumServer.customListener; /**
* Created by wwh on 17/2/14.
*/
@Listeners(customListener.class)//这个语句指明了使用自定义的listener。
public class listenerTest { @Test
public void templistener1(){
System.out.println("i'm listenerTest1");
} @Test
public void templistener2(){
System.out.println("i'm listenerTest2");
}
}
输出结果:
[TestNG] Running:
/Users/wwh/Library/Caches/IdeaIC2016.3/temp-testng-customsuite.xml
now start test
Test started runningtemplistener1at:1487136848622
i'm listenerTest1
Result success
Test started runningtemplistener2at:1487136848712
i'm listenerTest2
Result success
now finish test
===============================================
Default Suite
Total tests run: 2, Failures: 0, Skips: 0
=============================================== Process finished with exit code 0
方式二:使用testng.xml配置文件
import org.testng.annotations.Test; /**
* Created by wwh on 17/2/14.
*/ public class listenerTest { @Test
public void templistener1(){
System.out.println("i'm listenerTest1");
} @Test
public void templistener2(){
System.out.println("i'm listenerTest2");
}
}
testng.xml 文件
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Second suite" verbose="1" >
<listeners>
<listener class-name="main.java.com.dbyl.appiumServer.customListener"></listener>
</listeners>
<test name = "allTestsInAClass" >
<classes>
<class name="main.java.com.dbyl.appiumCore.tests.listenerTest"/>
</classes>
</test>
</suite>
输出结果:
Mac:ProjectWang wwh$ mvn clean test -Dtestng.xml
.
.
.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
now start test
Test started runningtemplistener1at:1487125608088
i'm listenerTest1
Result success
Test started runningtemplistener2at:1487125608660
i'm listenerTest2
Result success
now finish test
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.125 sec - in TestSuite Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:13 min
[INFO] Finished at: 2017-02-15T10:26:51+08:00
[INFO] Final Memory: 22M/182M
[INFO] ------------------------------------------------------------------------
ITestListener适用场景
当使用testng执行测试时,我们常会想在某个阶段做一些特别的处理,比如:测试成功结束后,测试失败后,跳过某个脚本后,全部脚本执行完毕后。
要想达成这个目标,我们需要实现testng的ITestListener接口,自定义一个自己的listener。
ITestListener包含两种类型的方法:
一类是测试用例级别的,例如onTestStart,onTestSuccess,onTestFailure,onTestSkipped,onTestFailedButWithinSuccessPercentage;
另一类是测试集级别的,例如onStart,onFinish。这些方法有一个输入参数,result或者context。
result是ITestResult类型的,可以知晓测试用例成功或者失败和测试何时开始等信息。
context是ITestContext类型的,适用于测试集级别,可以知晓成功的脚本有哪些,失败的脚本有哪些。
testng日志 ITestListener的更多相关文章
- TestNG中 ITestListener 的使用
1.关于testng中ITestListener 的相关介绍文档,请参考: http://javadox.com/org.testng/testng/6.8.7/org/testng/ITestLis ...
- 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)
1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...
- testng日志 TestListenerAdapter
TestListenerAdapter,空方法实现 ITestListener 创建自定义日志记录类 创建另一个新的类名为 CustomListener.java 在 C:\ > TestN ...
- testng日志和报告
TestNG是通过 Listeners 或者 Reporters 生成测试报告. Listeners,即 org.testng.ITestListener 的实现,能够在测试执行过程中发出各种测试结果 ...
- 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...
- testng ITestListener使用
ITestListener适用场景 当使用testng执行测试时,我们常会想在某个阶段做一些特别的处理,比如:测试成功结束后,测试失败后,跳过某个脚本后,全部脚本执行完毕后.要想达成这个目标,我们需要 ...
- testng报告-extentsReports使用-klov
extentreport部分参考: https://blog.csdn.net/Care_sQueendom/article/details/78651950 https://testerhome.c ...
- 使用appium和testng实现Android自动截图
简单介绍 需求场景是:当测试安卓应用的脚本得到失败结果时,对当前手机屏幕截图,便于查找问题. 实现方式是:1)定义一个父类UITest,作为所有测试类的父类.在父类中UITest中定义一个截图的方法, ...
- 《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
1.简介 页面对象模型(Page Object Model)在Selenium Webdriver自动化测试中使用非常流行和受欢迎,作为自动化测试工程师应该至少听说过POM这个概念.本篇介绍POM的简 ...
随机推荐
- 学习:erlang正则
一.re:run/3. ①.re:run("321321","2132",[caseless]). {match,[{1,4}]} %% 返回值是 匹配 ...
- 关于Android Animation的setFillBefore、setFillAfter和setFillEnable
1. 如果是独立的Animation,只有setFillAfter有效,设置为true动画结束后保持最后的状态 2. 如果是AnimationSet中的Animation,因为Animation的作用 ...
- SQL语句:语法错误(操作符丢失)在查询表达式中
所谓操作符丢失,应该是你在拼接SQL语句是少了关键词或者分隔符,导致系统无法识别SQL语句.建议:1.监控SQL语句,看看哪里出现问题:断点看下最后的sql到底是什么样子就知道了,另外你可以把这段sq ...
- typescript 实现函数重载
class Demo { // #region 声明 log() : void; log(arg1: string): void; log(arg1: number, arg2: string): v ...
- xc_domain_save.c
/****************************************************************************** * xc_linux_save.c * ...
- 剑指 offer set 21 圆圈中最后剩下的数字
思路 1. 经典解法是用环形链表模拟圆圈, 然后每次减少一个节点. 时间复杂度为 o(mn), 空间复杂度为 o(n) 2. 转化成数学问题, 递推公式决定下一个元素. 时间复杂度为 o(n), 空间 ...
- Visual Studio 32位64位的问题和如何编译32位64位工程的问题
Visual Studio自身没有32位和64位的分别,对于某一个特定的版本只有一个版本安装文件(即不存在32位版本的VS2015安装文件和64位版本的VS2015安装文件) 对于自己开发的工程,编译 ...
- spring基础---->spring自定义标签(一)
Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean.本博客将介绍如何编写自定义XML bean的解析器,并用实例来加以说明.其实我一直相信 等你出现的时候我就知道是你. Sp ...
- spring的@Transactional注解详细用法(转载)
概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...
- Java中对List集合的常用操作(转载)
目录: list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断: 利用list中索引 ...