├── .gitignore
├── .idea
├── .gitignore
├── compiler.xml
├── jarRepositories.xml
├── misc.xml
├── uiDesigner.xml
└── vcs.xml
├── pom.xml
├── src
├── main
│ └── java
│ │ ├── reporting
│ │ ├── ExtentReportManager.java
│ │ └── Setup.java
│ │ ├── restUtils
│ │ ├── AssertionKeys.java
│ │ ├── AssertionUtils.java
│ │ └── RestUtils.java
│ │ └── utils
│ │ ├── DateUtils.java
│ │ ├── ExcelUtils.java
│ │ ├── JsonUtils.java
│ │ ├── RandomDataGenerator.java
│ │ └── RandomDataTypeNames.java
└── test
│ ├── java
│ └── airlines
│ │ ├── AirlineAPIs.java
│ │ ├── AirlineTests.java
│ │ ├── AirlineTestsNew.java
│ │ ├── AirlineTestsScenarios.java
│ │ ├── Base.java
│ │ ├── ExcelTest.java
│ │ ├── InstancioExample.java
│ │ ├── Payloads.java
│ │ ├── PoijiTests.java
│ │ ├── javersExamples
│ │ ├── Address.java
│ │ ├── JaversTest.java
│ │ └── Student.java
│ │ └── pojos
│ │ ├── Airline.java
│ │ ├── AirlinePoiji.java
│ │ ├── BasePojo.java
│ │ ├── CompareObjects.java
│ │ ├── CreateAirline.java
│ │ ├── Employee.java
│ │ ├── Gender.java
│ │ └── Student.java
│ └── resources
│ ├── airlines
│ ├── dev
│ │ └── airlinesApiData.json
│ └── qa
│ │ └── airlinesApiData.json
│ └── testdata
│ ├── CreateAirlineData.xlsx
│ └── CreateAirlineDataScenarios.xlsx
└── testng.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | Demo.json
2 | Demo2.json
3 | reports/TestReport2023_03_25_00_04_35.html
4 | /D1/D2/D3/SubPackage.json
5 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/uiDesigner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
8 | -
9 |
10 |
11 | -
12 |
13 |
14 | -
15 |
16 |
17 | -
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
26 |
27 |
28 |
29 | -
30 |
31 |
32 |
33 |
34 |
35 | -
36 |
37 |
38 |
39 |
40 |
41 | -
42 |
43 |
44 |
45 |
46 | -
47 |
48 |
49 |
50 |
51 | -
52 |
53 |
54 |
55 |
56 | -
57 |
58 |
59 |
60 |
61 | -
62 |
63 |
64 |
65 |
66 | -
67 |
68 |
69 |
70 |
71 | -
72 |
73 |
74 | -
75 |
76 |
77 |
78 |
79 | -
80 |
81 |
82 |
83 |
84 | -
85 |
86 |
87 |
88 |
89 | -
90 |
91 |
92 |
93 |
94 | -
95 |
96 |
97 |
98 |
99 | -
100 |
101 |
102 | -
103 |
104 |
105 | -
106 |
107 |
108 | -
109 |
110 |
111 | -
112 |
113 |
114 |
115 |
116 | -
117 |
118 |
119 | -
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | org.example
8 | RetargetCommonRestAPIAutomationFramework
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.apache.maven.plugins
15 | maven-surefire-plugin
16 | 3.0.0-M7
17 |
18 |
19 | testng.xml
20 |
21 | 0
22 |
23 |
24 |
25 |
26 |
27 |
28 | 11
29 | 11
30 | 5.3.0
31 | 7.7.0
32 | 2.14.1
33 | 2.10
34 | 5.0.9
35 | 1.8.0
36 | 1.18.24
37 | 3.12.0
38 | 6.12.0
39 |
40 |
41 |
42 |
43 |
44 | io.rest-assured
45 | rest-assured
46 | ${restassuredVersion}
47 |
48 |
49 |
50 |
51 | org.testng
52 | testng
53 | ${testngVersion}
54 |
55 |
56 |
57 |
58 | com.fasterxml.jackson.core
59 | jackson-databind
60 | ${jacksonVersion}
61 |
62 |
63 |
64 |
65 | com.google.code.gson
66 | gson
67 | ${gsonVersion}
68 |
69 |
70 |
71 | com.aventstack
72 | extentreports
73 | ${extentVersion}
74 |
75 |
76 |
77 | net.datafaker
78 | datafaker
79 | ${datafakerVersion}
80 |
81 |
82 |
83 |
84 | org.projectlombok
85 | lombok
86 | ${lombokVersion}
87 |
88 |
89 |
90 |
91 | org.apache.commons
92 | commons-lang3
93 | ${apacheCommonLangVersion}
94 |
95 |
96 |
97 |
98 | org.javers
99 | javers-core
100 | ${javersVersion}
101 |
102 |
103 |
104 |
105 | org.apache.poi
106 | poi
107 | 5.2.3
108 |
109 |
110 |
111 |
112 | org.apache.poi
113 | poi-ooxml
114 | 5.2.3
115 |
116 |
117 |
118 |
119 | com.github.ozlerhakan
120 | poiji
121 | 4.1.1
122 |
123 |
124 |
125 |
126 | org.instancio
127 | instancio-core
128 | 2.15.0
129 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/src/main/java/reporting/ExtentReportManager.java:
--------------------------------------------------------------------------------
1 | package reporting;
2 |
3 | import com.aventstack.extentreports.ExtentReports;
4 | import com.aventstack.extentreports.markuputils.CodeLanguage;
5 | import com.aventstack.extentreports.markuputils.ExtentColor;
6 | import com.aventstack.extentreports.markuputils.MarkupHelper;
7 | import com.aventstack.extentreports.reporter.ExtentSparkReporter;
8 | import com.aventstack.extentreports.reporter.configuration.Theme;
9 | import io.restassured.RestAssured;
10 | import io.restassured.http.Header;
11 |
12 | import java.time.LocalDateTime;
13 | import java.time.format.DateTimeFormatter;
14 | import java.util.List;
15 |
16 |
17 | public class ExtentReportManager {
18 |
19 | public static ExtentReports extentReports;
20 |
21 | public static ExtentReports createInstance(String fileName, String reportName, String documentTitle) {
22 | ExtentSparkReporter extentSparkReporter = new ExtentSparkReporter(fileName);
23 | extentSparkReporter.config().setReportName(reportName);
24 | extentSparkReporter.config().setDocumentTitle(documentTitle);
25 | extentSparkReporter.config().setTheme(Theme.DARK);
26 | extentSparkReporter.config().setEncoding("utf-8");
27 | extentReports = new ExtentReports();
28 | extentReports.attachReporter(extentSparkReporter);
29 | return extentReports;
30 | }
31 |
32 | public static String getReportNameWithTimeStamp() {
33 | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss");
34 | LocalDateTime localDateTime = LocalDateTime.now();
35 | String formattedTime = dateTimeFormatter.format(localDateTime);
36 | String reportName = "TestReport" + formattedTime + ".html";
37 | return reportName;
38 | }
39 |
40 | public static void logPassDetails(String log) {
41 | Setup.extentTest.get().pass(MarkupHelper.createLabel(log, ExtentColor.GREEN));
42 | }
43 | public static void logFailureDetails(String log) {
44 | Setup.extentTest.get().fail(MarkupHelper.createLabel(log, ExtentColor.RED));
45 | }
46 | public static void logExceptionDetails(String log) {
47 | Setup.extentTest.get().fail(log);
48 | }
49 | public static void logInfoDetails(String log) {
50 | Setup.extentTest.get().info(MarkupHelper.createLabel(log, ExtentColor.GREY));
51 | }
52 | public static void logWarningDetails(String log) {
53 | Setup.extentTest.get().warning(MarkupHelper.createLabel(log, ExtentColor.YELLOW));
54 | }
55 | public static void logJson(String json) {
56 | Setup.extentTest.get().info(MarkupHelper.createCodeBlock(json, CodeLanguage.JSON));
57 | }
58 | public static void logHeaders(List headersList) {
59 |
60 | String[][] arrayHeaders = headersList.stream().map(header -> new String[] {header.getName(), header.getValue()})
61 | .toArray(String[][] :: new);
62 | Setup.extentTest.get().info(MarkupHelper.createTable(arrayHeaders));
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/reporting/Setup.java:
--------------------------------------------------------------------------------
1 | package reporting;
2 |
3 | import com.aventstack.extentreports.ExtentReports;
4 | import com.aventstack.extentreports.ExtentTest;
5 | import org.testng.ITestContext;
6 | import org.testng.ITestListener;
7 | import org.testng.ITestResult;
8 |
9 | import java.util.Arrays;
10 |
11 | public class Setup implements ITestListener {
12 |
13 | public static ExtentReports extentReports;
14 | public static ThreadLocal extentTest = new ThreadLocal<>();
15 |
16 | public void onStart(ITestContext context) {
17 | String fileName = ExtentReportManager.getReportNameWithTimeStamp();
18 | String fullReportPath = System.getProperty("user.dir") + "\\reports\\" + fileName;
19 | extentReports = ExtentReportManager.createInstance(fullReportPath, "Test API Automation Report", "Test ExecutionReport");
20 | }
21 |
22 | public void onFinish(ITestContext context) {
23 | if (extentReports != null)
24 | extentReports.flush();
25 | }
26 |
27 | public void onTestStart(ITestResult result) {
28 | // ExtentTest test = extentReports.createTest("Test Name " + result.getTestClass().getName() + " - " + result.getMethod().getMethodName(),
29 | // result.getMethod().getDescription());
30 | // extentTest.set(test);
31 | }
32 |
33 | public void onTestFailure(ITestResult result) {
34 | ExtentReportManager.logFailureDetails(result.getThrowable().getMessage());
35 | String stackTrace = Arrays.toString(result.getThrowable().getStackTrace());
36 | stackTrace = stackTrace.replaceAll(",", "
");
37 | String formmatedTrace = "\n" +
38 | " Click Here To See Exception Logs
\n" +
39 | " " + stackTrace + "\n" +
40 | " \n";
41 | ExtentReportManager.logExceptionDetails(formmatedTrace);
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/restUtils/AssertionKeys.java:
--------------------------------------------------------------------------------
1 | package restUtils;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public class AssertionKeys {
9 | private String jsonPath;
10 | private Object expectedValue;
11 | private Object actualValue;
12 | private String result;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/restUtils/AssertionUtils.java:
--------------------------------------------------------------------------------
1 | package restUtils;
2 |
3 | import com.aventstack.extentreports.markuputils.MarkupHelper;
4 | import io.restassured.response.Response;
5 | import reporting.ExtentReportManager;
6 | import reporting.Setup;
7 |
8 | import java.util.*;
9 |
10 | public class AssertionUtils {
11 |
12 | public static void assertExpectedValuesWithJsonPath(Response response, Map expectedValuesMap) {
13 | List actualValuesMap = new ArrayList<>();
14 | // Table headers
15 | actualValuesMap.add(new AssertionKeys("JSON_PATH", "EXPECTED_VALUE", "ACTUAL_VALUE", "RESULT"));
16 | boolean allMatched = true;
17 | // Iterate to extract value from response using jsonpath
18 | Set jsonPaths = expectedValuesMap.keySet();
19 | for(String jsonPath : jsonPaths) {
20 | Optional