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的简 ...
随机推荐
- GUI的广泛应用是当今计算机发展的重大成就之一
GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用.人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口.菜单.按键等方式来方便地进行操作.而嵌入式GUI具有下面几 ...
- C#三种模拟自动登录和提交POST信息的实现方法【转】
网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法. 网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...
- 小结:线段树 & 主席树 & 树状数组
概要: 就是用来维护区间信息,然后各种秀智商游戏. 技巧及注意: 一定要注意标记的下放的顺序及影响!考虑是否有叠加或相互影响的可能! 和平衡树相同,在操作每一个节点时,必须保证祖先的tag已经完全下放 ...
- ThinkPHP无限级分类
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...
- 【代码备份】NLM插值
文件路径: main.m: %% 测试函数 clc,clear all,close all; %输入的原始小图 ima_ori=double(imread('F:\Users\****n\Docume ...
- Codeforces Round #296 (Div. 2) B. Error Correct System
B. Error Correct System time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- H5学习之--前端和PHP后端的简单交互
最近在学习前端的东西,H5+CSS3+JS,又分别学习了原生JS和jQuery库,还有Bootstrap框架,因为我是做ios开发的,所以先熟悉WebApp相关的开发知识,其他的学习资料,网上有很多的 ...
- 第四篇:new和delete的基本用法
前言 new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活.如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧. 功能一:动态管理单变量/对象空间 下面例子使用new为单 ...
- Django学习笔记第三篇--关于响应返回
一.返回简单类型: #1.返回简单字符串 #from django.http import HttpResponse return HttpResponse("return string&q ...
- 【BZOJ3416】Poi2013 Take-out 栈
[BZOJ3416]Poi2013 Take-out Description 小F喜欢玩一个消除游戏——take-out 保证k+1|n,保证输入数据有解这是一个单人游戏 游戏者的目标是消除初始时给定 ...