《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。

1.简介

前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar、log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的日志文件,一种是控制台输出的日志,还有一种是HTML格式的日志文件。有时候,我们不一定都需要这些文件,在我们自动化测试框架里,我们只需要把日志文件保存到磁盘文件中,所以,这里介绍一种不用Log4j或者logback来实现日志文件写入和保存。

写着一篇文章的主要目的是后边测试框架设计就用宏哥这种自定义的来获取日志,前边那么多日志输出各有优势,但是那些知识细节需要开发了解,作为测试用宏哥这个自定义的就够了,当然了如果有的小伙伴或者童鞋们想用也是可以的。

2.项目实战

2.1准备环境

为了方便演示宏哥新配置一个测试环境,具体步骤如下:

1.新建一个java project命名为SeleniumFramework,如下图所示:

2.在根目录下新建三个包:framework、pageObject和testSuite,如下图所示:

3.新建一个日志文件夹Log用来存储日志文件,如下图所示:

4.新建一个Tools文件夹,里边存储浏览器驱动器,如下图所示:

5.把selenium需要的jar包添加到java project中,如下图所示:

2.2代码设计

1.在framework包中新建Logger和LogType两个类,如下图所示:

(1)Logger.java

(2)LogType.java  定义枚举类型,一般主要用到INFO和ERROR两种日志类型。

2.在testSuite包中新建测试类TestBaidu,调用Logger中静态方法输出日志,检查日志文件保存路径和内容。如下图所示:

2.3参考代码

(1)Logger.java

package framework;


import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.text.SimpleDateFormat;

import java.util.Date;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架设计基础-java实现自定义日志输出(详解教程)

*

* 2022年4月01日

*/


public class Logger {

   

   public static String OutputFileName = getDateTimeByFormat(new Date(), "yyyyMMdd_HHmmss");

   private static OutputStreamWriter outputStreamWriter;

   private static String logFileName;

   public static boolean LogFlag = true;

 

   public Logger() {

 

   }

 

   private static void WriteLog(String logEntry) {

 

       try {

               

                   // 定义日志文件保存路径和日志文件名称

               logFileName = ".\\Log" + "\\" + OutputFileName + ".log";

               if (outputStreamWriter == null) {

                   File logFile = new File(logFileName);

               

               if (!logFile.exists())

                       logFile.createNewFile();

               //利用OutputStreamWriter往日志文件写内容,字符编码是unicode

               outputStreamWriter = new OutputStreamWriter(new FileOutputStream(logFileName), "utf-8");

           }

           outputStreamWriter.write(logEntry, 0, logEntry.length());

           outputStreamWriter.flush();

 

       } catch (Exception e) {

           System.out.println(LogType.LogTypeName.ERROR.toString() + ": Failed to write the file " + logFileName);

           e.printStackTrace();

 

       }

 

   }

 

   //获取当前系统时间,得到格式化时间字符串

   private static String getDateTimeByFormat(Date date, String format) {

 

       SimpleDateFormat df = new SimpleDateFormat(format);

 

       return df.format(date);

 

   }

   

   public static void Output(LogType.LogTypeName logTypeName, String logMessage) {

 

       Date date = new Date();

       String logTime = getDateTimeByFormat(date, "yyyy-MM-dd HH:mm:ss.SSS");

       String logEntry = logTime + " " + logTypeName.name() + ": " + logMessage + "\r\n";

       System.out.print(logEntry);

       // 定义一个开关,为True就输出日志,如果你不想输出,改成False

       if (LogFlag)

           WriteLog(logEntry);

       }

}

(2)LogType.java

package framework;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架设计基础-java实现自定义日志输出(详解教程)

*

* 2022年4月01日

*/


public class LogType {

   

   public LogType(){

       

   }

   

   public enum LogTypeName{

       

       //

       INFO,

       //

       ERROR,

       //

       WARNING,

       //

       DEBUG;

   }

}

(3)TestBaidu.java

package testSuite;


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

 

import framework.LogType;

import framework.Logger;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架设计基础-java实现自定义日志输出(详解教程)

*

* 2022年4月01日

*/


public class TestBaidu {

   

   public static void main(String[] args) {

       

        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  

        WebDriver driver = new ChromeDriver();

        Logger.Output(LogType.LogTypeName.INFO, "启动chrome浏览器");

       

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        Logger.Output(LogType.LogTypeName.INFO, "设置隐式时间10秒");

       

        driver.get("https://www.baidu.com");

        Logger.Output(LogType.LogTypeName.INFO, "打开百度首页");

       

        driver.manage().window().maximize();

        Logger.Output(LogType.LogTypeName.INFO, "最大化浏览器");

       

        driver.findElement(By.id("kw")).sendKeys("Selenium");

        Logger.Output(LogType.LogTypeName.INFO, "搜索输入框输入关键字selenium");

       

        driver.close();

        Logger.Output(LogType.LogTypeName.INFO, "退出浏览器");

   }

 

}

2.4运行代码

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.运行完后,右键刷新Log文件夹,可以看到日志文件。如下图所示:

4.打开日志文件,如下图所示:

3.小结

1. Lo4j有一个小问题就是,不太方便设置日志文件名称是当前系统的时间,所以,log4j前面写死了日志名称,每次执行都会覆盖之前的日志。但是本篇的方法就不会发生这样情况,每次自动化运行都有日志保存,方便追溯定位错误。

2.出现日志文件乱码的情况,你需要在菜单导航栏上Window-->Preferences 打开"首选项"对话框,左侧导航树,导航到 General-->Workspace,把编码从GBK改成utf-8.


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

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


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

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

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

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

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

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

Pycharm工具基础使用教程

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
44 2
|
1月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
47 3
|
7天前
|
Web App开发 IDE 测试技术
天呐!当揭开 Selenium 自动化测试框架的神秘面纱,设计与实现令人瞠目!
【8月更文挑战第12天】Selenium 是一强大自动化测试框架,用于Web应用测试。它含WebDriver、IDE和Grid等工具,支持Chrome、Firefox等浏览器。可通过编程模拟用户交互验证应用功能。例如使用Python结合Selenium WebDriver编写自动化测试脚本,实现打开网页、操作元素及断言等功能。还可结合测试框架和Selenium Grid提升测试效率和并行执行能力。
18 1
|
1月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
43 6
|
1月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
27 2
|
1月前
|
XML Java 测试技术
《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
【7月更文挑战第9天】在Java项目中,使用Logback配置可以实现日志按照不同包名输出到不同的文件,并且根据日志级别分开记录。
52 4
|
1月前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
【7月更文挑战第3天】TestNG教程展示了如何自定义日志记录。首先创建一个名为`TestLog`的测试类,包含3个测试方法,其中一个故意失败以展示日志。使用`Assert.assertTrue`和`Reporter.log`来记录信息。接着创建`CustomReporter`类,继承`TestListenerAdapter`,覆盖`onTestFailure`, `onTestSkipped`, 和 `onTestSuccess`,在这些方法中自定义日志输出。
37 6
|
1月前
|
XML Java 测试技术
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
【7月更文挑战第8天】这篇教程介绍了如何使用Logback将Java应用的日志输出到文件中。首先,通过创建`logback.xml`配置文件,设置`FileAppender`来指定日志文件路径和格式。然后,提供了一个`RollingFileAppender`的例子,用于每日生成新的日志文件并保留一定天数的历史记录。文中包含配置文件的XML代码示例,并展示了控制台输出和生成的日志文件内容。教程最后提到了一些可能遇到的问题及解决建议。
24 0
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
|
1月前
|
Java 关系型数据库 测试技术
《手把手教你》系列基础篇(八十九)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-上篇(详解教程)
【7月更文挑战第7天】Apache Log4j2的安全漏洞促使考虑使用logback作为替代的日志框架。Logback由log4j创始人设计,提供更好的性能,更低的内存使用,并且能够自动重载配置文件。它分为logback-core、logback-classic(实现了SLF4J API)和logback-access(用于Servlet容器集成)三个模块。配置涉及Logger、Appender(定义日志输出目的地)和Layout(格式化日志)。
40 1
|
1月前
|
Java 测试技术 Apache
《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
【7月更文挑战第4天】Apache Log4j 是一个广泛使用的 Java 日志框架,它允许开发者控制日志信息的输出目的地、格式和级别。Log4j 包含三个主要组件:Loggers(记录器)负责生成日志信息,Appenders(输出源)确定日志输出的位置(如控制台、文件、数据库等),而 Layouts(布局)则控制日志信息的格式。通过配置 Log4j,可以灵活地定制日志记录行为。
39 4

热门文章

最新文章