《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)

1.简介

TestNG为日志记录和报告提供的不同选项。现在,宏哥讲解分享如何开始使用它们。首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录。

2.TestNG自定义日志

2.1创建测试用例类

1.按照宏哥前边的方法,创建一个TestNG类,并命名为:TestLog。这里宏哥直接沿用上一篇文章中的测试类。如下图所示:

2.然后进行脚本编辑,前面的测试类包含三个测试方法,其中OpenBrowser和LogOut将在执行时通过,而SignIn通过将false布尔值传递给 Assert.assertTrue 方法而失败,该方法用于测试中的真值条件。代码设计如下图所示:

3.参考代码如下:

package library;import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test;/*** @author 北京-宏哥* * @公众号:北京宏哥* *《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG日志(详解教程)** 2022年3月17日*/public class TestLog {@Testpublic void OpenBrowser() {Assert.assertTrue(true);System.out.println("OpenBrowser被调用!");Reporter.log("调用打开浏览器的方法!");}@Test(dependsOnMethods = {"OpenBrowser"})public void SignIn() {Assert.assertTrue(false);System.out.println("SignIn方法被调用!");Reporter.log("调用登录方法!");}@Test(dependsOnMethods = {"SignIn"})public void LogOut() {Assert.assertTrue(true);System.out.println("LogOut方法被调用!");Reporter.log("调用注销方法!");}}
2.2创建自定义日志类

1.在 F:/workspace/Bjhg_Selenium/src/library中创建另一个命名为的新类 CustomReporter.java ,如下图所示:

2.代码设计如下图所示:

上面的类扩展了TestListenerAdapter,它使用空方法实现了ITestListener。因此,无需从接口覆盖其他方法。如果您愿意,您可以直接实现该接口。

3.参考代码如下:

package library;import org.testng.ITestResult;
import org.testng.TestListenerAdapter;/*** @author 北京-宏哥* * @公众号:北京宏哥* *《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG日志(详解教程)** 2022年3月17日*/public class CustomListener extends TestListenerAdapter {private int m_count = 0;@Overridepublic void onTestFailure(ITestResult tr) {log(tr.getName() + "--Test method failed\n");}@Overridepublic void onTestSkipped(ITestResult tr) {log(tr.getName() + "--Test method skipped\n");}@Overridepublic 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("");}}
}
2.3创建testng.xml

1.在F:/workspace/Bjhg_Selenium/src中创建 testng.xml 执行测试用例。如下图所示:

2.参考XML文件内容如下:

<?xml version = "1.0" encoding = "UTF-8"?>
<suite name = "Simple Reporter Suite"><listeners><listener class-name = "library.CustomListener" /></listeners><test name = "Simple Reporter test" ><classes><class name = "library.TestLog" /></classes></test>
</suite>
2.4运行代码

1.选中testng.xml文件,右键Run AS点击Test Suit运行。如下图所示:

2.控制台输出,如下图所示:

 2.5查看测试报告中日志

3.小结

 我们创建了一个自定义记录器类,它实现了 ITestListener 接口并将其作为一个监听器附加到 TestNG 测试套件中。这个侦听器类的方法在测试开始、测试失败、测试成功等时由 TestNG 调用。可以实现多个侦听器并将其添加到测试套件执行中,TestNG 将调用附加到测试套件的所有侦听器。

日志侦听器主要用于在测试执行时我们需要查看测试执行的连续状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618379.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖双硬盘实时备份(WebDAV Server+Cloud Sync)

安装和设置 WebDAV Server WebDAV 是一种基于HTTP的协议扩展&#xff0c;它允许用户在远程Web服务器上进行文档的编辑和管理&#xff0c;就如同这些文件存储在本地计算机上一样。使用WebDAV&#xff0c;用户可以创建、移动、复制和修改文件和文件夹。 安装和设置 Cloud Sync…

Niobe开发板OpenHarmony内核编程开发——事件标志

本示例将演示如何在Niobe Wifi IoT开发板上使用cmsis 2.0 接口使用事件标志同步线程 EventFlags API分析 osEventFlagsNew() /// Create and Initialize an Event Flags object./// \param[in] attr event flags attributes; NULL: default values./// \return e…

【Vue】响应式原理与ref

首先讲讲JS中的Proxy JavaScript 运行环境包含了一些不可枚举、不可写入的对象属性&#xff0c;然而在 ES5 之前开发者无法定义他们自己的不可枚举属性或不可写入属性。ES5 引入 Object.defineProperty() 方法以便开发者在这方面能够像 JS 引擎那样做。 ES6 为了让开发者能进…

Collection与数据结构 二叉树(三):二叉树精选OJ例题(下)

1.二叉树的分层遍历 OJ链接 上面这道题是分层式的层序遍历,每一层有哪些结点都很明确,我们先想一想普通的层序遍历怎么做 /*** 层序遍历* param root*/public void levelOrder1(Node root){Queue<Node> queue new LinkedList<>();queue.offer(root);while (!qu…

每日一题——阶乘计算升级版

题目链接&#xff1a; 6-10 阶乘计算升级版 - 基础编程题目集 (pintia.cn) 题目&#xff1a; 6-10 阶乘计算升级版 分数 20 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义&#xff1a; void Print_Factorial ( const int N ); 其中N是用户传入的参数&#xff…

Java与Kotlin语言的特色之处

一、Java特色之处&#xff1a; 1.多异常捕获 一个try块可能捕获到多个异常&#xff0c;可以使用多个catch块分别处理每个异常&#xff0c;也可以使用一个catch块处理多个异常&#xff08;多个异常使用管道符|分隔&#xff09;。 多个catch块代码&#xff1a; try{ }catch(IOExc…

HashMap底层源码分析

HashMap底层源码分析 HashMap主要是用来存放键值对的&#xff0c;它基于哈希表的Map接口实现&#xff0c;是常用的Java集合之一&#xff0c;是非线程安全的。 HashMap可以存放null的Key和value&#xff0c;但是null作为键只能有一个&#xff0c;作为value可以有多个 方法名称…

浏览器原理---事件循环

浏览器原理 学习浏览器原理对于我们开发是很有必要的 我们可以了解到浏览器内部工作原理对自己的代码进行优化 进程线程 首先了解进程和线程 进程就就是内存在正在进行的应用程序 在内存中独占一个内存空间 并且进程之间是隔离的 可以看到每个应用都有一个进程 占用空间内存…

刷题之Leetcode206题(超级详细)

206.反转链表 力扣题目链接(opens new window)https://leetcode.cn/problems/reverse-linked-list/ 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表&#xff0…

AI来了,Spring还会远吗?(Spring AI初体验)

目录 一、创建项目二、first demo1、application.properties2、ChatController3、结果 三、个人思考 一、创建项目 官方文档的Getting Started 最低要求&#xff1a;JDK17 阿里云的Server URL&#xff08;https://start.aliyun.com/&#xff09;搜不到Spring AI&#xff0c;…

dbeaver数据库语言编辑器设置jdbc驱动

打开 dbeaver 软件 数据库 -> 驱动管理器 以mysql为例 双击 MySQL -> 库 -> 添加工件 然后 打开maven组件库 官网 找到mysql驱动对应的maven工件地址 复制进去然后确认就行了 参考 大神博客

vue源码解析——diff算法/双端比对/patchFlag/最长递增子序列

虚拟dom——virtual dom&#xff0c;提供一种简单js对象去代替复杂的 dom 对象&#xff0c;从而优化 dom 操作。virtual dom 是“解决过多的操作 dom 影响性能”的一种解决方案。virtual dom 很多时候都不是最优的操作&#xff0c;但它具有普适性&#xff0c;在效率、可维护性之…