TestNG监听

【TestNG】TestNG自定义监听器大全 前言 TestNG默认有提供监听器,但是如果我们想自定义监听器也是可以的,自定义监听器包括好几种,部分如下所示: IAnnotationTransformer IAnnotationTransformer2 IHookable IInvokedMethodListener IMethodInterceptor IReporter ISuiteListener ITestListener 全部监... 阅读详情

这是我的TestNG教程中非常重要和最后一章。我花了很长时间才为我的观众找出一个完美的简单例子,因为我来自非技术背景,我围绕这么多网站来获得听众的完美例子,但我无法找到一个。每个人都在互联网上粘贴了几乎相同的例子。说够了,让我们现在开始吧。

在非技术术语中,TestNG通过套件,测试和方法管理所有内容,并且监听器使我们能够在每个套件,测试和方法之前和之后采取行动。

 

TestNG监听

TestNG中有许多类型的侦听器,例如IAnnotationTransformer,IAnnotationTransformer2,IConfigurable,IConfigurationListener,IConfigurationListener2,IExecutionListener,IHookable,IInvokedMethodListener,IInvokedMethodListener2,IMethodInterceptor,IReporter,ISuiteListener,ITestListener。

就测试问题而言,只有少数可以有效使用,例如:

ISuiteListener:它有两个方法onStart()和onFinish()。每当类实现此侦听器时,TestNG都会保证最终用户在运行TestNG Suite之前和之后调用onStart()和onFinish()方法。因此,在TestNG选择执行套件之前,它首先调用onStart()方法并运行此方法中已编写脚本的任何内容。以类似的方式,它在套件运行后再次调用onFinish()方法。

ITestListener:此侦听器的工作方式与ISuiteListerner完全相同,但唯一的区别是它在Test之前和之后进行调用而不是套件。它有七种方法。

onFinish():在所有测试运行并调用所有配置方法后调用。

onStart(): 在实例化测试类之后和调用任何配置方法之前调用。

onTestFailedButWithinSuccessPercentage(ITestResult result): 每次方法失败时调用但已使用successPercentage注释,此失败仍将其保持在请求的成功百分比范围内。

onTestFailure(ITestResult结果):每次测试失败时调用。

onTestSkipped(ITestResult result): 每次跳过测试时调用

onTestStart(ITestResult result): 每次调用测试之前调用。

onTestSuccess(ITestResult result): 每次测试成功时调用。

 

IInvokedMethodListener:此侦听器的工作方式与ISuiteListerner和ITestListerner完全相同,唯一的区别是它在每个方法之前和之后进行调用。它只有两种方法。

afterInvocattion():在每个方法之后调用

beforeInvocation():在每个方法之前调用

好的,现在我猜你必须非常清楚听众是什么,我们也看到了如何编写一个监听器。现在是个大问题。

怎么做…

1)创建一个“ New Class ”文件,并为其命名为“ Listener ”,右键单击Package并选择New > Class。

2)现在为这个新创建的类实现ISuiteListener,ITestListener和IInvokedMethodListener。为了实现一个监听器类,该类必须实现org.testng.ITestListener 接口。当测试开始,结束,失败,跳过或通过时,TestNG会在运行时通知这些类。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

package utility;

 

import org.testng.IInvokedMethod;

 

import org.testng.IInvokedMethodListener;

 

import org.testng.ISuite;

 

import org.testng.ISuiteListener;

 

import org.testng.ITestContext;

 

import org.testng.ITestListener;

 

import org.testng.ITestNGMethod;

 

import org.testng.ITestResult;

 

import org.testng.Reporter;

 

public class Listener implements ITestListener, ISuiteListener, IInvokedMethodListener {

 

// This belongs to ISuiteListener and will execute before the Suite start

 

@Override

 

public void onStart(ISuite arg0) {

 

Reporter.log("About to begin executing Suite " + arg0.getName(), true);

 

}

 

// This belongs to ISuiteListener and will execute, once the Suite is finished

 

@Override

 

public void onFinish(ISuite arg0) {

 

Reporter.log("About to end executing Suite " + arg0.getName(), true);

 

}

 

// This belongs to ITestListener and will execute before starting of Test set/batch

 

public void onStart(ITestContext arg0) {

 

Reporter.log("About to begin executing Test " + arg0.getName(), true);

 

}

 

// This belongs to ITestListener and will execute, once the Test set/batch is finished

 

public void onFinish(ITestContext arg0) {

 

Reporter.log("Completed executing test " + arg0.getName(), true);

 

}

 

// This belongs to ITestListener and will execute only when the test is pass

 

public void onTestSuccess(ITestResult arg0) {

 

// This is calling the printTestResults method

 

printTestResults(arg0);

 

}

 

// This belongs to ITestListener and will execute only on the event of fail test

 

public void onTestFailure(ITestResult arg0) {

 

// This is calling the printTestResults method

 

printTestResults(arg0);

 

}

 

// This belongs to ITestListener and will execute before the main test start (@Test)

 

public void onTestStart(ITestResult arg0) {

 

System.out.println("The execution of the main test starts now");

 

}

 

// This belongs to ITestListener and will execute only if any of the main test(@Test) get skipped

 

public void onTestSkipped(ITestResult arg0) {

 

printTestResults(arg0);

 

}

 

public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {

 

}

 

// This is the method which will be executed in case of test pass or fail

 

// This will provide the information on the test

 

private void printTestResults(ITestResult result) {

 

Reporter.log("Test Method resides in " + result.getTestClass().getName(), true);

 

if (result.getParameters().length != 0) {

 

String params = null;

 

for (Object parameter : result.getParameters()) {

 

params += parameter.toString() + ",";

 

}

 

Reporter.log("Test Method had the following parameters : " + params, true);

 

}

 

String status = null;

 

switch (result.getStatus()) {

 

case ITestResult.SUCCESS:

 

status = "Pass";

 

break;

 

case ITestResult.FAILURE:

 

status = "Failed";

 

break;

 

case ITestResult.SKIP:

 

status = "Skipped";

 

}

 

Reporter.log("Test Status: " + status, true);

 

}

 

// This belongs to IInvokedMethodListener and will execute before every method including @Before @After @Test

 

public void beforeInvocation(IInvokedMethod arg0, ITestResult arg1) {

 

String textMsg = "About to begin executing following method : " + returnMethodName(arg0.getTestMethod());

 

Reporter.log(textMsg, true);

 

}

 

// This belongs to IInvokedMethodListener and will execute after every method including @Before @After @Test

 

public void afterInvocation(IInvokedMethod arg0, ITestResult arg1) {

 

String textMsg = "Completed executing following method : " + returnMethodName(arg0.getTestMethod());

 

Reporter.log(textMsg, true);

 

}

 

// This will return method names to the calling function

 

private String returnMethodName(ITestNGMethod method) {

 

return method.getRealClass().getSimpleName() + "." + method.getMethodName();

 

}

 

}

3)创建一个' New Class '  文件,并为其命名为' TestListener ',右键单击Package并选择  New  >  Class。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

package automationFramework;

 

import org.testng.annotations.AfterMethod;

 

import org.testng.annotations.BeforeMethod;

 

import org.testng.annotations.Test;

 

public class TestListener {

 

  @Test

 

  public void main() {

 

  System.out.println("Execution of Main test is carring on");

 

  }

 

  @BeforeMethod

 

  public void beforeMethod() {

 

  System.out.println("Execution of Before method is carring on");

 

  }

 

  @AfterMethod

 

  public void afterMethod() {

 

  System.out.println("Execution of After method is carring on");

 

  }

 

}

 

我如何让TestNG知道我有一个它应该在执行我的测试时调用的监听器?

基本上有两种方法可以将侦听器添加到特定类中。

1)为您的测试类实现TestNG Listener

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package automationFramework;

 

import org.testng.annotations.AfterMethod;

 

import org.testng.annotations.BeforeMethod;

 

import org.testng.annotations.Test;

 

// This code will implement TestNG listeners

 

@Listeners(PackageName.ListenerClassName)

 

// For e.g. @Listeners(utility.Listener.class)

 

public class TestListener {

 

  @Test

 

  public void main() {

 

  }

 

}

 

2)TestNG xml中的监听器标签:虽然方法1足以让你入门,但它不是一种“优雅”的使用监听器的方式,因为你被迫将这个@Listeners部分添加到你的每个类中不会想要的。所以你要做的就是创建一个TestNG Suite xml,然后将listeners部分添加到这个套件的xml文件中。这样,您的所有测试都将基本上利用您编写的侦听器。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<suite name="Suite-Listeners" parallel="none">

 

<listeners>

 

<listener class-name="utility.Listener"></listener>

 

</listeners>

 

<test name="Batch-Listeners">

 

<classes>

 

<class name="automationFramework.TestListener" />

 

</classes>

 

</test>

 

</suite>

 

测试用例的输出如下所示:

TestNG听众

Win11桌面图标小箭头去除与恢复:解决任务栏关联错误的完整指南 本文提供了一份完整的Win11桌面图标小箭头去除与恢复指南,重点解决了因错误方法导致的任务栏关联错误问题。通过分析注册表中IsShortcut键值与Shell Icons的原理,推荐安全的“替换图标资源法”,并提供了可一键执行的批处理脚本,确保在美化桌面的同时不影响系统功能与默认应用设置。 阅读详情

相关推荐

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

TestNG·六 测试结果

一、成功、失败和断言 如果一个测试没有抛出任何异常就完成运行或者说抛出了期望的异常(参见@Test注解的expectedExceptions属性文档),就说,这个测试时成功的。 测试方法的组成常常包括抛出多个异常,或者包含各种各样的断言(使用Java "assert" 关键字)。一个 "assert" 失败会触发一个 AssertionErrorException,结果就是测试方法

心系旭阳 1091

JOOQ用法和实例

jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。jOOQ的核心优势是可以将数据库表结构映射为Java类,包含表的基本描述和所有表字段。通过jOOQ提供的API,配合生成的Java代码,可以很方便的进行数据库操作生成的Java代码字段类型是根据数据库映射成的Java类型,在进行设置和查询操作时,因为是Java代码,都会有强类型校验,所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。

m0_67403076的博客 1377

实战 TestNG 监听器

TestNG 是一个开源的自动化测试框架,其灵感来自 JUnit 和 NUnit,但它引入了一些新功能,使其功能更强大,更易于使用。TestNG 的设计目标是能够被用于进行各种类型测试:单元测试、功能测试,端到端测试、集成测试,等等。NG 是 Next Generation 的简写,表示下一代,意在表示其产生的目的是要超越当前所有测试框架。TestNG 类似于 JUnit(特别是 JUnit 4)...

weixin_34302561的博客 672

大众点评爬虫实战:如何用Python绕过反爬机制获取评论数据(附完整代码)

本文深入探讨了2024年使用Python进行大众点评数据采集的实战策略。文章详细解析了现代反爬机制的核心逻辑,并提供了从构建拟人化请求会话、应对动态内容与接口加密,到工程化实践(代理调度、状态持久化)的完整解决方案与代码示例,旨在帮助数据分析师稳健获取评论数据,用于后续的文本挖掘与商业洞察。

weixin_29084111的博客 1920

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4300

Testng测试框架(4)-数据驱动@Parameters

​数据驱动Testng使用 @Parameters注释传递任意参数给测试用例There are three ways to set these parameters 有三种方法设置参数:1、testng.xml文件。

seanyang_的博客 1305

泰山派rk3566 audio音频基础介绍

本文介绍了嵌入式系统中音频处理的基础知识,重点围绕RK3566平台的音频子系统展开。文章首先解释了音频信号从模拟到数字的转换过程,包括采样率、位深和声道等核心概念。随后详细分析了嵌入式音频开发中的关键接口:I2C用于控制音频编解码器,I2S作为专用音频数据传输总线,以及PCM作为原始音频格式和ALSA设备抽象的双重含义。通过对这些基础概念和接口的解析,为在RK3566平台上进行音频驱动开发和应用调试提供了理论基础。

qq_37077309的博客 295

Maven捆绑TestNG实现测试自动化执行、部署和调度

一、 需求介绍     自动化测试,尤其是接口测试时,要写大量的测试用例,这些测试用例我们当然首选使用TesteNG编写,用例数量大,还涉及各种依赖包之类的问题,因此用Maven管理也是最方便最易实现的。 面临的问题是:     TestNG的模式,在IDE中运行很方便,这个做法在开发测试用例的时候是必走的步骤,因为对于测试用例本身的代码,我们也需要调试测试,让它没有BUG,才能用它测试

qq_15290529的博客 6236

开发具有情感分析能力的AI Agent

本文将深入探讨开发具有情感分析能力的AI Agent的各个方面。我们将首先介绍情感分析的基础知识,包括定义、背景和应用领域。接着,我们将详细讲解情感分析的核心概念、数据处理方法和算法原理。随后,文章将展示如何设计情感分析系统架构,并进行项目实战,包括环境安装、源代码实现和案例分析。最后,我们将总结最佳实践和注意事项,为读者提供进一步学习的资源。情感分析(Sentiment Analysis),也称为意见挖掘,是自然语言处理(NLP)的一个分支。

SuperAGI2025 1146

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

maven命令运行testng测试

1.官网介绍: 添加链接描述 2.配置好了testng的xml文件后,在maven项目中添加一下build, <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefi...

qq_40447533的博客 4373

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 676

TestNG测试框架之监听器详解

目录 1. TestNG简介 2. TestNG监听器概述 2.1 IAnnotationTransformer 2.2 IAnnotationTransformer2 2.3 IHookable 2.4 IInvokedMethodListener 2.5 IMethodInterceptor 2.6 IReporter 2.7 ISuiteListener 2.8 ITestListener 3. 监听器的使用方法 3.1 在 testng.xml中使用TestNG监听器 3.

专注自动化、性能测试、测试架构学习交流 2885

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TestNG监听器

监听器是什么,有哪些分类,作用是什么,怎么使用监听器

wan_zaiyunduan的博客 1265

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

TestNG教程三:TestNG中的监听

TestNG中的监听 1.使用监听的目的: Testng虽然提供了不少强大的功能和灵活的选项,但不能解决所有的问题,使用监听器就是用来定制额外的功能以满足我们的需求的; 2.监听器具体实现: 监听器实际上是一些预定义的java接口,用户创建这些接口的实现类(即implements某监听接口,并实现里面的方法),并加入到testng中,testng便会在运行的不同时刻调用这些类中你自...

zhangwenxatu的博客 968

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TestNg 监听器

以前看他们的代码仅仅知道标签作用其他的都很模糊,直到看了一期视频才知道Testng有监听器这个接口,再回首看他们的代码瞬间看懂他们的结构,有种恍然大悟的感觉。还是得仔细研究啊,内容以后慢慢添加吧。 APIhttps://testng.org/doc/index.html 发现把Document全部理解翻译就可以了,JavaDoc也很重要。 JavaDochttps://javadoc.j...

weixin_38640809的博客 640

TestNG监听器解析

一、TestNG简介 TestNG 使用Gradle构建编译 Github源码地址:https://github.com/cbeust/testng 二、TestNG监听器概述 虽名称叫监听器,事实上只是一些预定义的java接口,用户创建这些接口的实现类,并把它们加入到TestNG listener监听中,TestNG在运行时便会在不同时刻执行这些类的实现接口。 以下是 TestNG 提供的几种常用监听器: 1. IAnnotationTransformer 大多数情况下,在运行时我.

哎呀美呔小丸子 1357

TestNG的监听器概述

TestNG的监听器(listener)是一系列的接口,用于在运行时设置动态参数,以改变TestNG的执行过程。TestNG的所以监听器都是org.testng.ITestNGListener接口的实现。 1. 常见的TestNG提供的监听器接口如下: IAnnotationTransformer IAnnotationTransformer2 IAnnotationTransform...

成长的足迹 3947

ExtendReports集成testng,添加监听器

ExtendReports集成testng,添加监听器 第一步:新建监听器 package com.tester.exten.demo; import com.aventstack.extentreports.ExtentReports; import com.aventstack.extentreports.ExtentTest; import com.aventstack.extentr...

Monkey__yuan的博客 251

testng 监听器

执行用例监听 public class IHookableImp implements IHookable { @Override public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) { ConstructorOrMethod method = iTestResult.getMethod().getConstructorOrMethod(); String name.

bobo的博客 907

TestNG中的监听

TestNG中的监听 1.使用监听的目的: Testng虽然提供了不少强大的功能和灵活的选项,但不能解决所有的问题,使用监听器就是用来定制额外的功能以满足我们的需求的; 2.监听器具体实现: 监听器实际上是一些预定义的java接口,用户创建这些接口的实现类(即implements某监听接口,并实现里面的方法),并加入到testng中,testng便会在运行的不同时刻调用这些类中你自定义实现的接口方法,从而实现定制额外的功能; 3.监听器的种类: 3.1 IAnnotationTransforme

bobo的博客 680

TestNG监听器·ITestListener监听器

前言 ITestListener监听器主要针对测试方法和xml文件中的test标签来进行相应监控。 正文 ITestListener监听器封装的方法以及方法的使用规则如下: onTestStart():测试方法开始时才执行此方法。这里测试方法是指@Test注解的测试方法; onTestSuccess():如果测试方法执行成功才执行此方法; onTestFailure():如果测试...

黑域的专栏 1261

TestNG中使用监听

方法一:采用注释法添加监听设置 import org.testng.annotations.Listeners; import org.testng.annotations.Test; public class testforCustomList { @Listeners(MyListener.class)//此处指明了使用自定义的listener。 ...

lixiaomei0623的专栏 391

TestNG使用(八)——TestNG拦截器与监听器

skh2015java的博客 438

【TestNG】之监听器

IReporter IReporter接口继承自ITestNGListener接口,其定义了generateReport方法。TestNG在运行所有套件时都将调用此方法,通过遍历 xmlSuites 和 suites 能够获取所有测试方法的信息以及测试结果,后续可用于自定义测试报告 public interface IReporter extends ITestNGListener { void generateReport(List<XmlSuite> var1, List<IS

qq_37997592的博客 710
上一篇: 在TestNG中重试失败的测试
下一篇: 使用TestNG进行多浏览器,跨浏览器和并行测试
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值