单元测试系列[v1.0.0][Log4j]

Log4j是个开源项目,可以控制日志信息的输出目的地,例如控制台、文件、GUI组件等,其配置文件用来设置日志的级别,文件格式只能是XML、json、yaml或properties

配置依赖

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>


Log4j配置文件properties

log4j.rootLogger=info, toConsole, toFile
log4j.appender.file.encoding=UTF-8
log4j.appender.toConsole=org.apache.log4j.ConsoleAppender
log4j.appender.toConsole.Target=System.out
log4j.appender.toConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.toConsole.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] %m%n
log4j.appender.toFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.toFile.file=result/log/testlog.log
log4j.appender.toFile.append=false
log4j.appender.toFile.Threshold=info
log4j.appender.toFile.layout=org.apache.log4j.PatternLayout
log4j.appender.toFile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] %m%n

Log4j引用

package com.davieyang.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

@SpringBootApplication
//@SpringBootApplication 代表将程序作为SpringBoot应用来运行
public class Application {
static Logger logger = Logger.getLogger(Application.class.getName());
public static void main(String[] args){
PropertyConfigurator.configure("log4j.properties");
// DOMConfigurator.configure("D:\\SpringBootDemo\\result\\log4j.xml");
SpringApplication.run(Application.class, args);
logger.debug("debug message");
logger.info("info message");
logger.error("error message");
//调用run方法并传入当前Class作为参数来运行程序,同时传入main方法的args参数
}
}

Log4j配置文件XML

<?xml version="1.0" encoding = "GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="Threshold" value="INFO" />
<param name="File" value="Automation.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>

二次封装

package util;
import org.apache.log4j.Logger;

import java.io.IOException;

public class LogUtil {
private static Logger Log = Logger.getLogger(LogUtil.class.getName());
//定义测试用例开始执行的打印方法,在日志中打印开始执行测试用例的信息
public static void startTestCases(String testCaseName){
Log.info("------------------ \"" + testCaseName + "\"开始执行 -----------------");
}
//定义测试用例执行完毕的打印方法,在日志中打印测试用例执行完毕的心
public static void endTestCases(String testCaseName){
Log.info("------------------ \"" + testCaseName + "\"执行结束 -----------------");
}
//定义打印info级别日志的方法
public static void info(String message){
Log.info(message);
}
//定义打印error级别日志的方法
public static void error(String message, IOException e){
Log.error(message);
}
//定义打印debug级别日志的方法
public static void debug(String message){
Log.debug(message);
}
}

引用Log4j

package util;
import org.apache.log4j.xml.DOMConfigurator;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.Reporter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import static constants.Constants.MainPageandNavigation_Property;
import static constants.Constants.Path_BrowserDrivers;
import static util.LogUtil.info;

public class KeyActionsUtil {
//声明静态的Webdriver对象,用于在此类中相关Driver的操作
public static WebDriver driver;
//声明存储定位表达式配置文件的ObjectMap对象
private static GetElementUtil getElementUtil = new GetElementUtil(MainPageandNavigation_Property);
static {
//指定log4j配置文件为log4j.xml
DOMConfigurator.configure("log4j.xml");
}

/**
* 定义函数initBrowser
* @param browser:字符串参数chrome/ie/xx
* @return 并返回驱动
*/
public static WebDriver initBrowser(String browser) {
if(browser.equalsIgnoreCase("firefox")) {
System.setProperty("webdriver.gecko.driver", Path_BrowserDrivers+"geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
info("启动Firefox浏览器");

}else if (browser.equalsIgnoreCase("ie")){
System.setProperty("webdriver.ie.driver",Path_BrowserDrivers+"IEDriverServer.exe");
driver = new InternetExplorerDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
info("启动IE浏览器");
}else {
System.setProperty("webdriver.chrome.driver",Path_BrowserDrivers+"chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
info("启动Chrome浏览器");
}
driver.manage().window().maximize();
info("最大化浏览器");
return driver;
}

/**
* 进入页面url
* @param url:驱动浏览器,打开的页面url
* @param browser:字符串参数chrome/ie/xx
* @param timeOutInSeconds:等待时常
*/
public static void openBrowser(String url, String browser, int timeOutInSeconds) {
driver = initBrowser(browser);
driver.manage().timeouts().implicitlyWait(timeOutInSeconds, TimeUnit.SECONDS);
driver.get(url);
}
//定义函数navigate,用于获取浏览器要访问的链接
public static void navigate(String url){
driver.get(url);
info("访问地址为"+url);
}

//通过从剪切板黏贴的方式,在文件上传框体的文件名输入框中输入要上传文件的路径和名称"uploadpathandname"
public static void uploadFileName(String uploadpathandname){
try{
KeyBoardUtil.setAndctrlVClipboardData(uploadpathandname);
}catch (Exception e){
e.printStackTrace();
}
}
//页面上不止一个相同功能并且xpath相同的元素,此种情况处理是将他们存储到List中,然后用索引的方式用其一
public static void twoWay(String ElementNameInproFile){
try {
List<WebElement> elements = driver.findElements(getElementUtil.getLocator(ElementNameInproFile));
elements.get(0).click();
System.out.println("按钮被成功点击");
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 断言文字内容
* @param driver:浏览器驱动
* @param assertstring:要断言的字符串
*/
public static void assertString(WebDriver driver,String assertstring){
try{
Assert.assertTrue(driver.getPageSource().contains(assertstring));
Reporter.log("成功断言关键字“"+ assertstring +"”");
}catch (AssertionError e){
Reporter.log("断言失败,具体失败信息为:" + e.getMessage());
System.out.println("断言失败");
throw e;
}
}
//断言文字不存在
public static void assertNoString(WebDriver driver, String assertstring){
try{
Assert.assertFalse(driver.getPageSource().contains(assertstring));
info("成功断言关键字“"+ assertstring +"” + “不存在”");
}catch (AssertionError e){
info("断言失败,具体信息为:" + e.getMessage());
System.out.println("断言失败");
}
}
}

此处除了用到了封装好的info方法,还用到了TestNG的Reporter.log("断言失败,具体失败信息为:" + e.getMessage());

配置文件详解

Appenders配置项 描述

ConsoleAppender
控制台,输出结果到system.out或system.err

FileAppender
输出结果到指定文件,同时可以指定输出数据的格式appender=true指定追加到文件末尾

DailyRollingFileAppender
每天产生一个日志文件

RollingFileAppender
文件大小到达指定数值后生成新的文件

WriterAppender
将日志信息以流格式发送到任意指定的地方

Level值 描述

OFF
关闭所有日志

FATAL
致命错误

ERROR
严重错误

WARN
警告信息

INFO
通知类一般类状态类普通信息

DEBUG
调试信息

TRACE
追踪信息

ALL
输出所有日志

Layout配置项 描述

HTMLLayout
以HTML表格形式布局

PatternLayout
可以灵活的指定布局模式

SimpleLayout
包含日志信息的级别和信息字符串

TTCCLayout
包含日志产生的时间线程类别等信息

ConversionPatter配置项 描述

%m
输出代码中指定的信息

%p
输出优先级 DEBUG、INFO、WARN、ERROR、FATAL

%r
输出自应用启动到输出该log信息耗费的毫秒数

%c
输出所属的类,通常为类的全名

%t
输出产生日志事件的线程名

%n
输出一个回车换行符,Windows平台中为“rn”, UNIX平台为“n”

%d
输入日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,例如%d{yyyy MMM dd HH:mm:ss,SSS}, 输出类似于2020年8月20日3:39:00 921

%l
输出日志事件的发生位置,包含类名线程以及代码中的行数

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

单元测试系列[v1.0.0][Log4j]

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 单元测试系列[v1.0.0][Log4j]
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏