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

简介: 【7月更文挑战第3天】TestNG教程展示了如何自定义日志记录。首先创建一个名为`TestLog`的测试类,包含3个测试方法,其中一个故意失败以展示日志。使用`Assert.assertTrue`和`Reporter.log`来记录信息。接着创建`CustomReporter`类,继承`TestListenerAdapter`,覆盖`onTestFailure`, `onTestSkipped`, 和 `onTestSuccess`,在这些方法中自定义日志输出。

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 {


   @Test

   public 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;


   @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("");

       }

   }

}

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 将调用附加到测试套件的所有侦听器。

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


每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):


Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
996 0
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
404 0
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
3279 9
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
3339 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
1302 9
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
1064 5