前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

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

作者头像
北京-宏哥
发布2022-04-27 19:00:09
3870
发布2022-04-27 19:00:09
举报

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

代码语言:javascript
复制
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

代码语言:javascript
复制
package framework;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架设计基础-java实现自定义日志输出(详解教程) 
 *
 * 2022年4月01日
 */

public class LogType {
    
    public LogType(){
        
    }
    
    public enum LogTypeName{
        
        //
        INFO,
        //
        ERROR,
        //
        WARNING,
        //
        DEBUG;
    }
}

(3)TestBaidu.java

代码语言:javascript
复制
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.运行代码后电脑端的浏览器的动作,如下小视频所示:

https://gorilla.cdnja.co/v/6k/6KXXy.mp4?token=qJYmPhBbbPKBS8iNMOEKIQ&expires=1651057726

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

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

3.小结

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.项目实战
    • 2.1准备环境
      • 2.2代码设计
        • 2.3参考代码
          • 2.4运行代码
          • 3.小结
          相关产品与服务
          日志服务
          日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档