首页 技术 正文
技术 2022年11月11日
0 收藏 379 点赞 3,286 浏览 5391 个字

一、IInokedMethodListener

1、实现一个类来监听testcase的运行情况。

 package listenerspackage; import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult; /**
* 监听*/ //所有监听的方法都由接口提供,所以我们需要先实现接口
public class CustomerListeners1 implements IInvokedMethodListener{ // beforeInvocation 和afterInvocation这两个方法时接口中已经写好的,我们需要按照需求将主体部分描述完整 // 调用前发生,在testcase类中的每个方法运行前执行
@Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
// .getTestClass():返回测试方法所在的测试类,是类类型的
// .getName():返回类的类名
System.out.println("before Invocation:"+testResult.getTestClass().getName()+" -> "+method.getTestMethod().getMethodName());
} // 调用后发生,在testcase类中的每个方法运行结束后执行
@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
System.out.println("after Invocation:"+testResult.getTestClass().getName()+" -> "+method.getTestMethod().getMethodName());
}
}

2、创建一个被监听的类

 package testclasses1; import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test; import listenerspackage.CustomerListeners1; //表示该测试类被CustomerListeners1类监听
@Listeners(CustomerListeners1.class)
public class TestNG_ListenersTest1 { @BeforeClass
public void setUp() {
System.out.println("Code in before class");
} @AfterClass
public void classUp() {
System.out.println("Code in after class");
} @Test
public void testMethod1() {
System.out.println("Code in testMethod1");
Assert.assertTrue(true);
} @Test
public void testMethod2() {
System.out.println("Code in testMethod2");
Assert.assertTrue(false);
}
}

3、配置xml

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Listeners TestSuite">
<test name="Application Test">
<classes>
<class name="testclasses1.TestNG_ListenersTest1"></class>
</classes>
</test>
</suite>

4、运行结果

未加监听器前运行结果:

章节十六、9-Listeners监听器

添加监听器后运行结果:

章节十六、9-Listeners监听器

二、 ITestListener

1、实现ITestListener接口来监听testcase的运行情况。

 package listenerspackage; import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult; /**
* 监听*/ //所有监听的方法都由接口提供,所以我们需要先实现接口
public class CustomerListeners2 implements ITestListener{ @Override
public void onTestStart(ITestResult result) {
// 测试方法开始时才执行此方法(带@test注解的方法)
// .getName()返回的是测试方法的名称
System.out.println("onTestStart -> test name:"+result.getName());
} @Override
public void onTestSuccess(ITestResult result) {
// 只有在测试方法运行成功后才执行(带@test注解的方法)
System.out.println("onTestSuccess -> test name:"+result.getName());
} @Override
public void onTestFailure(ITestResult result) {
// 只有在测试方法运行失败后才执行(带@test注解的方法)
System.out.println("onTestSuccess -> test name:"+result.getName());
} @Override
public void onTestSkipped(ITestResult result) {
// 在跳过测试时执行
} @Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// 测试失败但在成功百分比内才执行(自动化中不常用)
} @Override
public void onStart(ITestContext context) {
// 在xml配置文件的test标签中内容运行前执行
// .getName()返回的是标签的名称
System.out.println("onStart -> test tag name:"+context.getName());
// 返回所有测试方法的名字
ITestNGMethod methods[] = context.getAllTestMethods();
System.out.println("test标签中要执行的测试方法:");
for(ITestNGMethod method:methods) {
System.out.println(method.getMethodName());
}
} @Override
public void onFinish(ITestContext context) {
// 在xml配置文件中的test标签运行结束后执行
System.out.println("onFinish -> test tag name:"+context.getName());
}
}

2、被监听类

 package testclasses1; import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test; import listenerspackage.CustomerListeners1; //表示该测试类被CustomerListeners1类监听
@Listeners(CustomerListeners1.class)
public class TestNG_ListenersTest2 { @BeforeClass
public void setUp() {
System.out.println("Code in before class");
} @AfterClass
public void classUp() {
System.out.println("Code in after class");
} @Test
public void testMethod1() {
System.out.println("Code in testMethod1");
Assert.assertTrue(true);
} @Test
public void testMethod2() {
System.out.println("Code in testMethod2");
Assert.assertTrue(false);
}
}

3、xml配置

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Listeners TestSuite">
<test name="Application Test">
<classes>
<class name="testclasses1.TestNG_ListenersTest2"></class>
</classes>
</test>
<test name="Application Test">
<classes>
<class name="testclasses1.TestNG_ListenersTest2"></class>
</classes>
</suite>

4、运行结果

章节十六、9-Listeners监听器章节十六、9-Listeners监听器

三、 ISuiteListener

 package listenerspackage; import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ISuite;
import org.testng.ISuiteListener;
import org.testng.ITestResult; /**
* 监听*/ //所有监听的方法都由接口提供,所以我们需要先实现接口
public class CustomerListeners3 implements ISuiteListener{ // 当xml文件中suite标签中内容开始执行前
@Override
public void onStart(ISuite suite) {
System.out.println("onStart suite 开始执行之前");
} // 当xml文件中suite标签中内容执行结束后
@Override
public void onFinish(ISuite suite) {
System.out.println("onFinish suite 执行结束之后");
}
}

四、当我们将监听的接口通过类实现后,如果要引用到测试类中,有两种方法:

1、需要使用注解:@Listeners(实现监听接口的类名.class)

章节十六、9-Listeners监听器

2、在xml配置文件中进行配置

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Listeners TestSuite">
4 <!-- 指定CustomerListeners3方法监听suite中所引用的类,格式:包名.类名 -->
5 <listeners>
6 <listener class-name="listenerspackage.CustomerListeners3"></listener>
7 </listeners>
<test name="Application Test1">
<classes>
<class name="testclasses1.TestNG_ListenersTest1"></class>
</classes>
</test>
<test name="Application Test2">
<classes>
<class name="testclasses1.TestNG_ListenersTest2"></class>
</classes>
</test>
</suite>

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294