这周在给人培训selenium+testng框架时,讲到listener这块发现对listener并没有完全了解,于是自己又重新学习了下。
以下是 TestNG 提供的几种监听器:
- IAnnotationTransformer
- IAnnotationTransformer2
- IHookable
- IInvokedMethodListener
- IMethodInterceptor
- IReporter
- ISuiteListener
- ITestListener
尽管名字叫监听器,但事实上它们只是一些预定义的 Java 接口。用户创建这些接口的实现类,并把它们加入到 TestNG 中,TestNG 便会在测试运行的不同时刻调用这些类中的接口方法。
目前的框架主要用到IReporter 和 ITestLisntener。
IReporter
TestNG 提供了默认的测试报表。但如果用户希望有不同格式的测试报表,就需要使用 IReporter 监听器。IReporter 监听器只有一个方法需要实现。
ITestListener
如果要在测试方法执行成功、失败或者跳过时指定不同后续行为,可以通过 IInvokedMethodListener 实现,不过更为简便的方式是利用 ITestListener 监听器。ITestListener 监听器要求实现的方法中包含如下三个
void onTestFailure(ITestResult result)
void onTestSkipped(ITestResult result)
void onTestSuccess(ITestResult result) 然后在testsuite.xml里加上listeners标签:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Simple Suite">
<listeners>
<listener class-name="Listener-name" />
</listeners> <test name="Simple test">
<classes>
<class name="SampleTest" />
</classes>
</test>
</suite>
同时需要在脚本的类定义前面加上@listener标签。
这里如果Listener-name是个实现了IReporter的方法,那么他就会在最后按具体实现生产report.
而如果他是个实现了ITestLisntener的方法,那么其实在测试脚本里,他能根据执行的成功或失败或跳过,自动的给出执行的结果,如下列:
import org.testng.Assert;
import org.testng.annotations.Test; public class SampleTest {
@Test
public void testMethodOne(){
Assert.assertTrue(true);
} @Test
public void testMethodTwo(){
Assert.assertTrue(false);
} @Test(dependsOnMethods={"testMethodTwo"})
public void testMethodThree(){
Assert.assertTrue(true);
}
}
这里有3个测试方法,每个里面有断言,但这里并没有对结果进行输出。
import org.testng.ITestResult;
import org.testng.TestListenerAdapter; public class myListener extends TestListenerAdapter{
private int m_count = 0; @Override
public void onTestFailure(ITestResult tr) {
log(tr.getName()+ "--Test method failed\n");
} @Override
public void onTestSkipped(ITestResult tr) {
log(tr.getName()+ "--Test method skipped\n");
} @Override
public void onTestSuccess(ITestResult tr) {
log(tr.getName()+ "--Test method success\n");
} private void log(String string) {
System.out.print(string);
if (++m_count % 40 == 0) {
System.out.println("");
}
} }
这是实现了ITestListener的类,同样利用前面那个testsuite.xml。把listener-name修改成myListener,执行后得到如下结果:
testMethodOne--Test method success
testMethodTwo--Test method failed
testMethodThree--Test method skipped ===============================================
Simple Logger Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================
它的作用很明显了,就不用在测试脚本/方法里再去添加结果的记录代码了,当然你也可以根据项目需求加上结果记录代码,然后决定到底用哪一种,这个就按需取舍了。
testng之listener的更多相关文章
-
TestNG官方文档中文版(4)-运行TestNG
4 - 运行TestNG TestNG可以以不同的方式调用: * Command line * ant * Eclipse * IntelliJ's IDEA 1) 命令行 假 ...
-
TestNG官方文档中文版(2)-annotation(转)
1. 介绍 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...
-
testng增加失败重跑机制
注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...
-
TestNG详解-深度好文
转自: https://blog.csdn.net/lykangjia/article/details/56485295 TestNG详解-深度好文 2017年02月22日 14:51:52 阅读数: ...
-
Webdriver+Testng实现测试用例失败自动截图功能
testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...
-
Testng用例失败重新运行
Testng用例失败重新运行 在ui测试用例的运行过程中,发现有很多不确定的因素会导致用例失败,比如网络原因,比如屏幕滑动失败等.想到需要让测试用例,在失败后重新运行来提高测试成功率. 在gith ...
-
TestNG简单的学习-TestNG运行
转载:http://topmanopensource.iteye.com/blog/1983735 TestNG简单的学习-TestNG运行 文档来自官方地址: http://testng.org/d ...
-
用代码触发testng实现并发测试
有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下: 首先添加testng依赖: <dependency> <groupId>org.testng< ...
-
selenium 常见面试题以及答案(Java版)
1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...
随机推荐
-
MyIsam和InnoDB的区别
个人见解: 1.最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持 所以有用到事务处理和外键的,要用Innodb 2. InnoDB 中不保存表的具体行数,也就是说,执行s ...
-
.gitignore文件不起作用
当我们用git时常常会习惯把我们不想上传到远程代码库中的一些本地文件(夹)放在一个叫做.gitignore的文件中,例如常见的本地build文件夹,一些IDE如Intellig,Eclipse的项目管 ...
-
Python:time模块&;序列化&;生成随机数&;反射
time模块:>>> import time >>> time.time <built-in function time> >>> t ...
-
Ways to access Oracle Database in PostgreSQL
Today, organizations stores information(data) in different database systems. Each database system ha ...
-
lintcode :最大子数组
题目: 最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...
-
「BZOJ3791」作业
题解: 比正解的做法要复杂 正解直接确定了最多有2k-1段 并且可以证明2k-1是一定可以覆盖的 于是可以直接dp 我的想法是先覆盖一段黑的,然后白的覆盖上去 所以f[i][0/1/2][0/1/2] ...
-
poj3133 插头dp
#include <iostream> #include <cstdio> #include <string.h> #include <vector> ...
-
day30 纸牌游戏
import json from collections import namedtuple Card = namedtuple('Card', ['rank', 'suit']) # rank 牌面 ...
-
ZZNU 正约数之和
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...
-
adb shell 命令计算APP应用的 FPS 和评价流畅度。
设计初衷: 1.面临用户和公司内领导试用中反馈的卡顿问题,思考如何能有效量化评估? 2.如何在尝试复现卡顿的过程中持续监控FPS和丢帧情况? 操作说明如下: (1)脚本源码的下载:(https://p ...