zoukankan      html  css  js  c++  java
  • java-selenium 使用log4j在测试过程中打印执行日志

      新建一个maven工程(这里不做具体介绍),配置pom.xml文件。导入 项目所需要的jar包selenium-java、testng和log4j

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>Selenium</groupId>
      <artifactId>LX</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>LX</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
         <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.53.1</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.testng/testng -->
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.9.9</version>
                <scope>test</scope>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/log4j/log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
            
            
      </dependencies>
    </project>

      方法一:使用log4j.properties 文件存放配置

      一、右击工程名->New->Folder 新建一个configs文件夹,再右击config文件 ->new ->File新建一个log4j.properties 文件

     

     

      二、在log4j.properties 中加入以下信息

    ### 设置根 定义###
    log4j.rootLogger = info,stdout,FILE
    org.apache.log4j.DailyRollingFileAppender
    ##ERROR、WARN、 INFO、DEBUG###
    ### 输出信息到控制台 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss.sss} - [ %p ] %m%n
    
    ### 输出info 级别以上的日志到logs/error.log ###
    log4j.appender.FILE = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.FILE.File = logs/log4j.log
    log4j.appender.FILE.Append = true
    log4j.appender.FILE.Threshold = info
    log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss.sss} - [ %p ]  %m%n
    
    ### 配置输出到文件,并且每天都创建一个文件 ###
    log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.dailyRollingFile.File = logs/log4j.log
    log4j.appender.dailyRollingFile.Append = true
    log4j.appender.dailyRollingFile.Threshold = info
    log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
    log4j.appender.dailyRollingFile.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss}  - [ %p ]  %m%n

      三、新建名为cn.Log4j的package,并再此包下新建一个Log类文件和一个Log4jTest类文件

      Log类的代码如下:

    package cn.Log4j;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    public class Log {
        private static Logger logger =null;
        private static Log logg=null;
        
        public static Log getlogger(Class<?> T){
            if(logger==null){
                //实例化Properties类,处理.properties格式的文件
                Properties props=new Properties();
                try{
                    //获取当前工程项目的路径
                    String path=System.getProperty("user.dir");
                    //获取log4j.properties文件的所在路径
                    String filePath=path+"/Configs/log4j.properties";
                    //通过数据流读取文件里面的数据
                    InputStream is=new FileInputStream(filePath);
                    //读取文件
                    props.load(is);
                }catch(IOException e){
                    e.printStackTrace();
                }
                //通过configure方法输入数据
                PropertyConfigurator.configure(props);
                logger=Logger.getLogger(T);
                logg=new Log();
            }
            return logg;
            
        }
        
        //定义一个静态方法,可以打印自定义的某个测试用例开始执行的日志信息
        public static void startTestCase(String CaseName){
    
            logger.info("======================================================");
            logger.info("*********     "+CaseName+"用例开始执行"+"     *********");
        }
        //定义一个静态方法,可以打印自定义的某个测试用例结束执行的日志信息
        public static void endTestCase(String CaseName){
            logger.info("*********     "+CaseName+"用例执行结束"+"     *********");        
            logger.info("======================================================");
        }
        //定义一个静态info方法,打印自定义的info级别的日志信息
        public static void info(String message){
            logger.info(message);
            
        }
        //定义一个静态的warn方法,打印自定义的warn级别的日志信息
        public static void warn(String message){
            logger.warn(message);      
        }
        //定义一个静态的error方法,打印自定义的error级别的日志信息
        public static void error(String message){
            logger.error(message);     
        }
        //定义一个静态的fatal方法,打印自定义的fatal级别的日志信息
        public static void fatal(String message){
            logger.fatal(message);     
        }
        //定义一个静态的debug方法,打印自定义的debug级别的日志信息
        public static void debug(String message){
            logger.debug(message);     
        }
    
    
    }

      Log4jTest类的代码如下:

    package cn.Log4j;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.testng.Assert;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class Log4jTest {
        WebDriver driver;
        final static Log log=Log.getlogger(Log4jTest.class);
    
        @BeforeMethod
        public void beforetest(){
            //打印搜索selenium测试用例开始执行的日志信息
            Log.startTestCase("搜索selenium");
            System.setProperty("webdriver.chrome.driver", "E://chromedriver.exe");
            driver=new ChromeDriver();
        }
            
        @Test
        public void test(){        
            //打开百度首页
            driver.get("https://www.baidu.com/");
            //打印“打开百度首页”的日志信息
            Log.info("打开百度首页");
            //在百度输入框中输入selenium
            driver.findElement(By.xpath("//*[@id='kw']")).sendKeys("java");
            //打印“在百度输入框中输入selenium”
            Log.info("在百度输入框中输入java");
            //点击百度一下按钮
            driver.findElement(By.xpath("//*[@id='su']")).click();
            //打印“点击百度一下按钮”
            Log.info("点击百度一下按钮");
            //等待页面元素加载
            WebDriverWait wait=new WebDriverWait(driver,5);
            wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(
                        By.xpath("//*[@id='content_left']")));
            Log.info("显示等待5秒");
            try{
                //断言页面是否存在“selenium Grid”,没有则触发catch语句的执行
                Assert.assertTrue(driver.getPageSource().contains("selenium"));
                Log.info("断言页面源码包含:selenium Grid");
            }catch(AssertionError e){
                log.info("没有selenium Grid");
            }
        }
        @AfterMethod
        public void aftertest(){
            driver.quit();
            Log.info("关闭浏览器");
            Log.endTestCase("搜索selenium");
        }
    
    
    }

      执行Log4jTest类后,会在当前工程目录下生成一个日志文件夹logs里面会出现一个log4j.log文件。结果如下图

      方法二:使用xml文件存放配置

      一、配置xml文件,在工程根目录中新建Log4j.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
    
        <!-- 日志输出到控制台 -->
        <appender name="console" class="org.apache.log4j.ConsoleAppender">
            <!-- 日志输出格式 -->
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d %-5p [%c{1}]  %m %n"/>
            </layout>
        </appender>
    
        <!--定义了log4j将日志信息打印到指定日志文件夹,每天生成一个log文件-->
        <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        
            <!-- 定义日志信息级别为 info -->
            <param name="Threshold" value="INFO"/>
            
            <!-- 定义日志文件存放路径为logs/logs.log,存放在工程根目录下,若不存在则自动创建 -->
            <param name="File" value="logs/log4j.log"/>
            
            <layout class="org.apache.log4j.PatternLayout">
                <!-- 定义日志格式 -->
                <param name= "ConversionPattern" value="%d %-5p [%c{1}]  %m %n"/>
            </layout>
        </appender>
        
        <!-- 输出到控制台和文件夹中的日志级别 -->
        <root>
            <priority value="info" />
            <appender-ref ref="console" />
            <appender-ref ref="fileAppender"/>
        </root>
    
    </log4j:configuration>

      二、新建一个package,在此包下新建Log工具类和TestLog4j测试类

      Log类代码如下:

    package cn.Log4j;
    
    import org.apache.log4j.Logger;
    
    
    public class Log {
            //初始化Logger对象
            private static Logger Log=Logger.getLogger(Log.class.getName());
            //定义一个静态方法,可以打印自定义的某个测试用例开始执行的日志信息
            public static void startTestCase(String CaseName){
    
                Log.info("======================================================");
                Log.info("*********   "+CaseName+"用例开始执行"+"   *********");
            }
            //定义一个静态方法,可以打印自定义的某个测试用例结束执行的日志信息
            public static void endTestCase(String CaseName){
                Log.info("*********   "+CaseName+"用例执行结束"+"   *********");        
                Log.info("======================================================");
            }
            //定义一个静态info方法,打印自定义的info级别的日志信息
            public static void info(String message){
                Log.info(message);
            }
            //定义一个静态的warn方法,打印自定义的warn级别的日志信息
            public static void warn(String message){
                Log.warn(message);      
            }
            //定义一个静态的error方法,打印自定义的error级别的日志信息
            public static void error(String message){
                Log.error(message);     
            }
            //定义一个静态的fatal方法,打印自定义的fatal级别的日志信息
            public static void fatal(String message){
                Log.fatal(message);     
            }
            //定义一个静态的debug方法,打印自定义的debug级别的日志信息
            public static void debug(String message){
                Log.debug(message);     
            }
    
    }

      TestLog4j类代码如下:

    package cn.Log4j;
    
    import org.apache.log4j.xml.DOMConfigurator;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Assert;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class TestLog4j {
        WebDriver driver;
        @BeforeClass
        public void beforeClass(){//读取log4j配置文件 Log4j.xml 的信息
            DOMConfigurator.configure("Log4j.xml");
        }
        @BeforeMethod
        public void before(){
            Log.startTestCase("百度搜索:selenium java");
            Log.info("设置浏览器驱动路径");
            System.setProperty("webdriver.chrome.driver","E://chromedriver.exe");
            Log.info("初始化Chrome浏览器");
            driver=new ChromeDriver();
            Log.info("访问百度首页");
            driver.get("http://www.baidu.com");
        }
        @Test
        public void test(){
            Log.info("百度首页输入框中输入:selenium java");
            driver.findElement(By.id("kw")).sendKeys("selenium java");
            Log.info("点击 百度一下 按钮");
            driver.findElement(By.id("su")).click();
            Log.info("断言页面Title值是否为:selenium java_百度搜索");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Assert.assertEquals("selenium java_百度搜索",driver.getTitle());
            
        }
        @AfterMethod
        public void after(){
            Log.info("退出Chrome浏览器");
            driver.quit();
            Log.endTestCase("搜索");
        }
    }

      运行TestLog4j.java后刷新工程,目录会自动出现一个logs文件夹里面有一个log4j.log文件。如下图所示:

  • 相关阅读:
    ok6410驱动usb摄像头
    自己动手写CPU之第五阶段(1)——流水线数据相关问题
    ListView嵌套ListView时发生:View too large to fit into drawing cache的问题
    算法导论 第8章 线性时间排序(计数排序、基数排序、桶排序)
    Android_通过ContentObserver监听短信数据变化
    【MyEcplise】导入项目报错:Errors running builder 'JavaScript Validator' on project '项目名'. java.lang.ClassCastException
    【js】js中const,var,let区别
    【Node.js】2.开发Node.js选择哪个IDE 开发工具呢
    【Node.js】1.安装步骤
    【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】
  • 原文地址:https://www.cnblogs.com/puhongjun/p/12287671.html
Copyright © 2011-2022 走看看