Selenium 简明教程
Selenium - Log4j Logging
Selenium Webdriver 可用于记录测试执行期间的信息。记录主要用于提取有关执行如何发生的信息。
记录通过提供有关应用程序功能(正常工作或不正常工作)的数据来帮助增强任何应用程序。因此,记录对于提高应用程序质量和解决问题非常重要。
What is Log4j?
Log4j 是一个基于 Java 的开源框架,主要用于记录信息。这是一个直接、健壮、快速的框架。Log4j 必须使用配置文件进行配置,形式是键值对,比如 Log4j.xml 文件、Log4j.properties 文件、yaml 或 JSON 文件等。Log4 是 Apache Logging Services 的一部分。
Components of Log4j
Log4j 的组件如下所列 −
-
Loggers
-
Appenders
-
Layouts
Loggers
The Loggers 包含使用 Log4j 框架产生的所有重要日志信息。Loggers 的基本组件是 −
-
Object of Logger class.
-
Log Levels − 日志级别帮助获取日志消息。日志级别包括 ALL 记录所有信息的 ALL , ERROR 只记录可能暂停执行的错误信息, WARN 只记录可能暂停执行但并非致命性的错误信息, DEBUG 记录调试所需的信息, INFO 记录应用程序如何响应的信息, TRACE 记录最详细的日志信息,以及 FATAL 记录可能导致应用程序崩溃的应用程序的挑剔信息。
Prerequisites for Log4j Logging
-
在系统中安装 Java(版本高于 8),并使用以下命令检查它是否存在:java -version。如果已成功完成安装,将显示已安装的 java 版本。
-
在系统中安装 maven 并使用以下命令检查它是否存在:mvn -version。如果已成功完成安装,将显示已安装的 maven 版本。
-
安装任何一个 IDE,例如 Eclipse、IntelliJ 等等。
-
使用所有依赖项保存 pom.xml 并更新 Maven 项目
Steps for Log4j Logging
Step 1 − 创建一个 Maven 项目并将适当的依赖项添加到 pom.xml 文件中,用于以下项 −
-
从以下链接中添加 Log4j 依赖项: https://logging.apache.org/log4j/ 。
-
从以下链接添加 Selenium Java 依赖项: https://mvnrepository.com/artifact/ 。
-
使用所有依赖项保存 pom.xml 并更新 Maven 项目。
Step 2 − 创建一个配置文件 - log4j.xml 或 loj4j.properties 文件。在这里,我们将提供设置。在我们的项目中,我们已在 resources 文件夹下创建了一个名为 log4j2.properties 的文件。
Step 3 − 创建一个测试类,在其中我们将创建一个 Logger 类的对象并纳入日志语句。运行该项目并验证结果。
Example
package Logs;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class LoggingsInfo {
// object of Logger class
private static Logger logger = LogManager.getLogger(LoggingsInfo.class);
public static void main(String args[]){
System.out.println("Execution started: ");
// logging messages
logger.info("This is for information");
logger.error("This is for error information");
logger.warn("This is for warning information");
logger.fatal("This is for fatal information");
System.out.println("Execution done: ");
}
}
log4j2.properties 文件中的配置。
name=PropertiesConfig
property.filename = logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/LogsGenerated.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
loggers=file
logger.file.name=Logs
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
pom.xml 中的依赖项。
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>SeleniumJava</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
</project>
Output
Execution started:
[INFO ] 2024-03-21 16:15:08.431 [main] LoggingsInfo - This is for information
[ERROR] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for error information
[WARN ] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for warning information
[FATAL] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for fatal information
Execution done:
Process finished with exit code 0
此外,一个文件 LogsGenerated.log 将在项目中的 log 文件夹内生成,其中包含作为控制台输出的日志信息。
我们还可以通过更新 log4j2.properties 文件中的 rootLogger.level = trace 和 logger.file.level = trace 来更改日志级别配置以进行跟踪。
Updated configuration log4j2.properties
name=PropertiesConfig
property.filename = logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/LogsGenerated.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
loggers=file
logger.file.name=Logs
logger.file.level = trace
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = trace
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
Example
package Logs;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class LoggingsInfo {
// object of Logger class
private static Logger logger =
LogManager.getLogger(LoggingsInfo.class);
public static void main(String args[]){
System.out.println("Execution started: ");
// logging messages
logger.trace("This is for trace information");
logger.info("This is for information");
logger.error("This is for error information");
logger.warn("This is for warning information");
logger.fatal("This is for fatal information");
System.out.println("Execution done: ");
}
}
Output
[TRACE] 2024-03-21 16:25:08.354 [main] LoggingsInfo - This is for trace information
[INFO ] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for information
[ERROR] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for error information
[WARN ] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for warning information
[FATAL] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for fatal information
Execution done:
Process finished with exit code 0
此外,项目中日志文件夹中生成的 LogsGenerated.log 文件已使用跟踪信息进行更新。
对于上面的两个案例,已经覆盖日志文件,但是,可以通过向 log4j2.properties 文件添加配置: appender.file.append=true 来将日志附加到日志文件。
此外,要禁用控制台和日志文件中的日志信息记录,则必须使用 logger.file.level = off 和 rootLogger.level = off 更新 log4j2.properties。
指引教程:Selenium - Log4j 日志记录,本文到这里就结束了。我们从描述 Log4j 及其组件,设置 Log4j 的先决条件开始,最后通过说明如何将 Log4j 与 Selenium 结合使用,逐步讲解了创建 Log4j 的步骤。这让你全方位地了解了 Log4j。建议保持练习所学内容并探索其他与 Selenium 相关的内容,以加深理解并开阔视野。