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文件。如下图所示:

  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/puhongjun/p/12287671.html
Copyright © 2011-2022 走看看