《手把手教你》系列基础篇(九十五)-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日志并进行多维度分析。
相关文章
|
8月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
554 6
|
10月前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
234 1
|
11月前
|
数据采集 安全 Java
Java Selenium WebDriver:代理设置与图像捕获
Java Selenium WebDriver:代理设置与图像捕获
|
11月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
259 2
|
11月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
221 3
|
8月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
370 5
|
6月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
221 31
Selenium IDE:Web自动化测试的得力助手
|
6月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
450 17
Selenium:强大的 Web 自动化测试工具
|
8月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
8月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
1557 5

热门文章

最新文章