zoukankan      html  css  js  c++  java
  • 基于Java+Selenium的WebUI自动化测试框架(三)------记录LOG

         在有了Position类和接口类之后,我们是不是立刻就要着手开始写实现类了呢?按照一般的顺序是这样。但是,我们这里先停一下。原因有二:

    1)既然是写一个框架,我们希望总体的功能上是全面的。实现类中,我们需要设计和实现各种具体的操作方法。那么,如果中间出了问题,我们希望能够有所记录(log),所以需要有一个Log类。

    2)既然是需要记录,我们希望能够在每次测试的测试报告中,体现该次测试操作的记录。那么,就需要对所做的测试进行监听,所以我们也需要一个监听(Listener)的类。

      在写log类之前,我们需要在项目中导入log4j的jar包,具体的下载地址:https://mvnrepository.com/artifact/log4j/log4j

      在导入log4j-1.2.17.jar的包后,我们开始着手写Log类。

    package webui.xUtils;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Properties;
    
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    public class logUtil {
      private final Class<?> clazz;
      private Logger logger;
    
      //这里是定义logUtil的构造函数,因为不明确需要记录log的类是什么样子的,所以使用泛型Class<?> clazz
      public logUtil(Class<?> clazz) {
        this.clazz = clazz;
        this.logger = Logger.getLogger(this.clazz);
        logUtil.initlog4j();
      }
    
      //定义记录log的方法
      private static void initlog4j() {
        //创建Propderties对象
        Properties prop = new Properties();
        /*Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
        这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!级别后面是输出端*/
        prop.setProperty("log4j.rootLogger", "INFO,CONSOLE,E,F");
        prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
        prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
        prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
    
        //设置日志输出的路径
        String src = "test-output/log";
        //设置日期格式
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        //获取当前日期,并根据当前的日期建立文件夹,将生成的.log文件放入当前日期的文件夹。
        String date=dateFormat.format(new Date()).toString();
        File dir = new File(src+"/"+date);
        if (!dir.exists()){
          dir.mkdirs();
        }
        String filepath=dir.getAbsolutePath()+"/"+"log_"+date+".log";
    
        prop.setProperty("log4j.appender.E","org.apache.log4j.FileAppender");
        prop.setProperty("log4j.appender.E.file",filepath);
        prop.setProperty("log4j.appender.E.layout","org.apache.log4j.PatternLayout");
        prop.setProperty("log4j.appender.E.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
        prop.setProperty("log4j.appender.F","org.apache.log4j.FileAppender");
        prop.setProperty("log4j.appender.file.encoding","UTF-8");
        //生成Html格式的日志,并将生成的.html的日志文件放入当前日期的文件夹。
        String filepathHtml=dir.getAbsolutePath()+"/"+"log_"+date+".html";
        prop.setProperty("log4j.appender.F.file",filepathHtml);
        prop.setProperty("log4j.appender.F.layout","org.apache.log4j.HTMLLayout");
        //prop.setProperty("log4j.appender.F.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
        PropertyConfigurator.configure(prop);
        }
    
      public void info(String message) {
        logger.info(message);
      }
    
      public void debug(String message) {
        logger.debug(message);
      }
    
      public void error(String message) {
        logger.error(message);
      }
    
      public void trace(String message) {
        logger.trace(message);
      }
    }

       到此,log类就算完成了。在使用的时候,直接定义一个实例来调用相应的方法即可。例如: logUtil logs = new logUtil(X.class);

     另外,除了logUtil中定义的样式,在需要记录的地方,可以调用该类中相应的方法,比如logs.info("测试开始"),那么在执行相应程序的时候,这段话就会被记录在log文件中。这样,就方便我们自己定义log的内容了。

  • 相关阅读:
    Linux 编译kernel有关Kconfig文件详解
    STM32之DMA实例
    容器技术与docker
    老男孩Python全栈学习 S9 日常作业 010
    Centos 7 最小化Fastdfs安装部署
    老男孩Python全栈学习 S9 日常作业 009
    老男孩Python全栈学习 S9 日常作业 008
    service
    Spinner的用法
    控制led灯并显示自己的数值
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11418290.html
Copyright © 2011-2022 走看看