首页 > 技术文章 > WebDriver高级应用实例(8)

z-zzz 2019-03-15 16:20 原文

  8.1使用Log4j在测试过程中打印日志

  目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本

  被测网页的网址:

  http://www.baidu.com

  环境准备:

  (1)访问https://archive.apache.org/dist/logging/log4j/1.2.17/  下载log4j-1.2.17.jar

  (2)将log4j-1.2.17.jar添加至Eclipse的Build Path中即可

  (3)需在工程根目录新建一个Log4j.xml文件,Log工具类文件和一个测试类文件TestLog4j。

  Java语言版本的API实例代码 

  Log4j.xml的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="fileAppender" class="org.apache.log4j.FileAppender">
    <param name = "Threshold" value="INFO"/>
    <param name = "File" value="logfile.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n"/>
    </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="fileAppender"/>
    </root>
    </log4j:configuration>

Log工具类的代码如下:

import org.apache.log4j.Logger;

public class Log {
    //初始化一个Logger对象
    private static Logger Log = Logger.getLogger(Log.class.getName());
    //定义一个静态方法,可以打印自定义的,某个测试用例开始执行的的日志信息
    public static void startTestCase(String sTestCaseName){
        Log.info("------------------------------------------");
        Log.info("***********      "+sTestCaseName+"      **************");
    }
    //定义一个静态方法,可以打印自定义的,某个测试用例结束执行的日志信息
    public static void endTestCase(String sTestCaseName){
        Log.info("***********"+"测试用例执行结束"+"**************");
        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测试类代码如下

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
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.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;

public class TestLog4j {
    WebDriver driver;
    String url = "http://www.baidu.com";
  @Test
  public void testSearch() {
      //向日志文件中打印搜索测试用例开始执行的日志信息
      Log.startTestCase("搜索");
      driver.get(url);
      Log.info("打开百度首页");
      //在搜索框中输入seleium
      driver.findElement(By.id("kw")).sendKeys("seleium");
      Log.info("输入搜索关键字“seleium”");
      //单击搜索
      driver.findElement(By.id("su")).click();
      Log.info("单击搜索按钮");
      Log.endTestCase("搜索");
  }
  @BeforeMethod
  public void beforeMethod() {
      System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
      driver = new ChromeDriver();
      driver.manage().window().maximize();
      
  }

  @AfterMethod
  public void afterMethod() {
      driver.quit();
  }
  @BeforeClass
  public void beforeClass(){
      DOMConfigurator.configure("log4j.xml");
  }
}

执行结果:

执行测试类之后,会在当前测试工程的根目录生成一个日志文件logfile.log,生成日志如下

代码解释:

(1)日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指这条日志的重要程度

(2)Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)

(3)XML文件中的语句<appender name="fileAppender" class="org.apache.log4j.FileAppender">定义了log4j将日志信息打入日志文件中

(4)xml文件中的语句<param name = "Threshold" value="INFO"/>定义了日志信息的级别为info级别

(5)XML文件中的语句<param name = "File" value="logfile.log"/>定义了日志文件名为logfile.log,日志文件与xml文件在同一文件夹下,若不存在则自动创建此日志文件

(6)XML文件中的语句<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n"/>定义了日志的格式信息,%d表示打印日志时候的年月日时分秒毫秒信息,%-5p表示日志的级别,%c{1}表示Logger对象的名字(在Log类中定义类名Log作为logger的名字),%m表示打印具体的日志内容,%n表示打印一个回车

推荐阅读