Skip to content

Commit

Permalink
Bài 15 16 TestListener and Log4j2
Browse files Browse the repository at this point in the history
  • Loading branch information
anhtester committed Feb 27, 2024
1 parent a73e892 commit 56e3d48
Show file tree
Hide file tree
Showing 12 changed files with 339 additions and 14 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ logs/
*.log
*.avi
*.mp4
test-output/
20 changes: 17 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.1.0-alpha1</version>
<version>2.0.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.1.0-alpha1</version>
<version>2.0.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
Expand All @@ -68,7 +68,21 @@
<dependency>
<groupId>net.datafaker</groupId>
<artifactId>datafaker</artifactId>
<version>2.0.2</version>
<version>2.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.23.0</version>
</dependency>

</dependencies>
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/anhtester/globals/ConfigsGlobal.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@ public class ConfigsGlobal {
public static String URI = PropertiesHelper.getValue("URI");
public static String USERNAME = PropertiesHelper.getValue("USERNAME");
public static String PASSWORD = PropertiesHelper.getValue("PASSWORD");
public static int TCS_TOTAL;
public static int PASSED_TOTAL;
public static int FAILED_TOTAL;
}
54 changes: 54 additions & 0 deletions src/main/java/com/anhtester/utils/LogUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.anhtester.utils;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogUtils {
//Initialize Log4j instance
private static final Logger Log = LogManager.getLogger(LogUtils.class);

//Info Level Logs
public static void info(String message) {
Log.info(message);
}

public static void info(Object object) {
Log.info(object);
}

//Warn Level Logs
public static void warn(String message) {
Log.warn(message);
}

public static void warn(Object object) {
Log.warn(object);
}

//Error Level Logs
public static void error(String message) {
Log.error(message);
}

public static void error(Object object) {
Log.error(object);
}

//Fatal Level Logs
public static void fatal(String message) {
Log.fatal(message);
}

public static void fatal(Object message) {
Log.fatal(message);
}

//Debug Level Logs
public static void debug(String message) {
Log.debug(message);
}

public static void debug(Object object) {
Log.debug(object);
}
}
25 changes: 25 additions & 0 deletions src/main/resources/log4j2.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name=PropertiesConfigLog4j2
property.filename=logs/applog.log
appenders=console, file

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

appender.file.type=File
appender.file.name=LOGFILE
appender.file.fileName=${filename}
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

loggers=file
logger.file.name=LOGFILE
logger.file.level=info
logger.file.appenderRefs=file
logger.file.appenderRef.file.ref=LOGFILE

rootLogger.level=info
rootLogger.appenderRefs=stdout, file
rootLogger.appenderRef.stdout.ref=STDOUT
rootLogger.appenderRef.file.ref=LOGFILE
21 changes: 21 additions & 0 deletions src/main/resources/log4j2_OFF.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
</Console>
<File name="LogToFile" fileName="logs/app-xml.log">
<PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="anhtester.com" level="debug" additivity="false">
<AppenderRef ref="LogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Root level="info">
<AppenderRef ref="LogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.anhtester.Bai15_TestListener;

import com.anhtester.common.BaseTest;
import com.anhtester.globals.TokenGlobal;
import com.anhtester.listeners.TestListener;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.testng.Assert;
import org.testng.TestListenerAdapter;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.testng.reporters.TestHTMLReporter;

import java.io.File;

import static io.restassured.RestAssured.given;

//@Listeners(TestListener.class)
//@Listeners(value = {TestListener.class, TestListenerAdapter.class, TestHTMLReporter.class})
public class CategoryTest_Listener extends BaseTest {

int CATEGORY_ID;

@Test(priority = 1)
public void testAddNewCategory() {
System.out.println("Create Category");
String dataFile = "src/test/resources/testdata/CreateCategory.json";

RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
.accept(ContentType.JSON)
.contentType(ContentType.JSON)
.header("Authorization", "Bearer " + TokenGlobal.TOKEN)
.body(new File(dataFile));

Response response = request.post("/category");

response.prettyPrint();
response.then().statusCode(200);

CATEGORY_ID = Integer.parseInt(response.path("response.id").toString());
System.out.println(CATEGORY_ID);

}

@Test(priority = 2)
public void getCategoryById() {
System.out.println("Get Category By Id");

RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
.accept(ContentType.JSON)
.contentType(ContentType.JSON)
.header("Authorization", "Bearer " + TokenGlobal.TOKEN);

System.out.println("CATEGORY_ID: " + CATEGORY_ID);
Response response = request.get("/category/" + CATEGORY_ID);

response.prettyPrint();
response.then().statusCode(200);

JsonPath jsonPath = response.jsonPath();
Assert.assertEquals(jsonPath.get("response.name"), "Auto API A5", "The Category Name not match.");

}
}
69 changes: 69 additions & 0 deletions src/test/java/com/anhtester/Bai16_Log4j2/CategoryTest_Log4j2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.anhtester.Bai16_Log4j2;

import com.anhtester.common.BaseTest;
import com.anhtester.globals.TokenGlobal;
import com.anhtester.listeners.TestListener;
import com.anhtester.utils.LogUtils;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.testng.Assert;
import org.testng.TestListenerAdapter;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.testng.reporters.TestHTMLReporter;

import java.io.File;

import static io.restassured.RestAssured.given;

//@Listeners(TestListener.class)
@Listeners(value = {TestListener.class, TestListenerAdapter.class, TestHTMLReporter.class})
public class CategoryTest_Log4j2 extends BaseTest {

int CATEGORY_ID;

@Test(priority = 1)
public void testAddNewCategory() {
LogUtils.info("Create Category");
String dataFile = "src/test/resources/testdata/CreateCategory.json";

RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
.accept(ContentType.JSON)
.contentType(ContentType.JSON)
.header("Authorization", "Bearer " + TokenGlobal.TOKEN)
.body(new File(dataFile));

Response response = request.post("/category");
LogUtils.info(response.prettyPrint());
response.prettyPrint();
response.then().statusCode(200);

CATEGORY_ID = Integer.parseInt(response.path("response.id").toString());
LogUtils.info(CATEGORY_ID);

}

@Test(priority = 2)
public void getCategoryById() {
LogUtils.info("Get Category By Id");

RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
.accept(ContentType.JSON)
.contentType(ContentType.JSON)
.header("Authorization", "Bearer " + TokenGlobal.TOKEN);

LogUtils.info("CATEGORY_ID: " + CATEGORY_ID);
Response response = request.get("/category/" + CATEGORY_ID);
LogUtils.info(response.prettyPrint());
response.prettyPrint();
response.then().statusCode(200);

JsonPath jsonPath = response.jsonPath();
Assert.assertEquals(jsonPath.get("response.name"), "Auto API A5", "The Category Name not match.");

}
}
13 changes: 3 additions & 10 deletions src/test/java/com/anhtester/common/BaseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,26 @@
import com.anhtester.globals.ConfigsGlobal;
import com.anhtester.globals.TokenGlobal;
import com.anhtester.helpers.PropertiesHelper;
import com.anhtester.listeners.TestListener;
import com.anhtester.model.LoginPOJO;
import com.anhtester.model.data.LoginPOJO_Builder;
import com.google.gson.Gson;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.*;

import static io.restassured.RestAssured.given;

@Listeners(TestListener.class)
public class BaseTest {

@BeforeClass
public void beforeClass(){
System.out.println("This is before class CHA");
}

@BeforeSuite
public void setupSuite() {
PropertiesHelper.loadAllFiles();
}

@BeforeTest
public void loginUser() {
//LoginPOJO loginPOJO = new LoginPOJO(ConfigsGlobal.USERNAME, ConfigsGlobal.PASSWORD);
LoginPOJO loginPOJO = LoginPOJO_Builder.getDataLogin();

Gson gson = new Gson();
Expand Down
62 changes: 62 additions & 0 deletions src/test/java/com/anhtester/listeners/TestListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.anhtester.listeners;

import com.anhtester.globals.ConfigsGlobal;
import com.anhtester.utils.LogUtils;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class TestListener implements ITestListener {
@Override
public void onStart(ITestContext result) {
LogUtils.info("\n **********************************");
//Read Properties - loadAllFiles()
//Select Database - lưu trữ vào biến toàn cục
//Connect tới bên thứ 3 cho thuê reports chẳng hạn
}

@Override
public void onFinish(ITestContext result) {
//Tổng kết lại tình hình chạy test
//In ra logs cho biết là đã kết thức và chạy được bao nhiêu cái pass/fail
//Gửi mail đến mail chung để nắm bắt tình hình - Lấy ra các biến toàn cục hoặc file logs, report
LogUtils.info("Đã gửi mail đến [email protected]");
LogUtils.info("Tổng số test cases: " + ConfigsGlobal.TCS_TOTAL);
LogUtils.info("Số test cases passed: " + ConfigsGlobal.PASSED_TOTAL);
LogUtils.info("Số test cases failed: " + ConfigsGlobal.FAILED_TOTAL);
}

@Override
public void onTestStart(ITestResult result) {
LogUtils.info("Đang chạy test case: " + result.getName());
//Mình sẽ bắt cái tên TCs để ghi logs và ghi vào report (Allure report)
ConfigsGlobal.TCS_TOTAL++;
}

@Override
public void onTestSuccess(ITestResult result) {
//Cộng 1 đơn vị vào 1 biến toàn cục để nắm bắt số lượng tcs pass
LogUtils.info("Test case passed: " + result.getName());
ConfigsGlobal.PASSED_TOTAL++;
}

@Override
public void onTestFailure(ITestResult result) {
//Cộng 1 đơn vị vào 1 biến toàn cục để nắm bắt số lượng tcs fail
LogUtils.error("Test case failed: " + result.getName());
LogUtils.error(result.getThrowable());
ConfigsGlobal.FAILED_TOTAL++;
}

@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub

}

@Override
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub

}
}
Loading

0 comments on commit 56e3d48

Please sign in to comment.