{"name":"BankAPI-SecureFlow-Automation-Framework","generatedAt":"2026-10-04T08:25:36.506Z","languages":{"Java":20957},"commitTotal":6,"commits":[{"sha":"56268c358d8cb8f030c7c849dda3028c5c2446d4","message":"test file","date":"2025-10-22T08:42:45Z","author":"Aayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":true,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/56268c358d8cb8f030c7c849dda3028c5c2446d4"},{"sha":"4662f194add5b70c25de09ab31d83ec9c95b689c","message":"Create README.md","date":"2025-10-05T18:01:33Z","author":"Aayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":true,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/4662f194add5b70c25de09ab31d83ec9c95b689c"},{"sha":"2a7e11d5869cec3f3d5123fa9db448915707c5a3","message":"Correction in xml file","date":"2025-10-05T17:42:33Z","author":"Ayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":false,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/2a7e11d5869cec3f3d5123fa9db448915707c5a3"},{"sha":"6b813636aae445904cc99bd62760332504f72e58","message":"Fixed TestNG classpath issue: Updated `testng.xml` to correctly\nreference `LoginUserAPITest` and ensured the class is present and\ncompiled under `src/test/java/com/api/tests`.\n\nAlso resolved `NullPointerException` in `AccountCreationTest` by\nreturning the actual `Response` object from `LoggingFilter`.\n\n Cleaned up `log4j2.xml` pattern formatting to eliminate `% -5level`\nerror and added SLF4J binding to suppress `StaticLoggerBinder` warnings.\n\nEverything now compiles and logs as expected. Ready for next round of\ntest coverage!","date":"2025-10-05T17:33:16Z","author":"Ayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":false,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/6b813636aae445904cc99bd62760332504f72e58"},{"sha":"5e2d3d5323e4adca0dbe7c552f151dd099a69f53","message":"Some correction","date":"2025-10-05T17:21:21Z","author":"Ayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":false,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/5e2d3d5323e4adca0dbe7c552f151dd099a69f53"},{"sha":"3da3c011470fb297da9556365b9cf1402261ccb5","message":"Base Code","date":"2025-10-05T17:16:38Z","author":"Ayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":false,"url":"https://github.com/Aayush-Mishraa/BankAPI-SecureFlow-Automation-Framework/commit/3da3c011470fb297da9556365b9cf1402261ccb5"}],"readmeHtml":"<div id=\"readme\" class=\"md\" data-path=\"README.md\"><article class=\"markdown-body entry-content container-lg\" itemprop=\"text\"><div class=\"markdown-heading\" dir=\"auto\"><h1 class=\"heading-element\" dir=\"auto\">🧩 E2E REST API Automation Framework (Rest Assured + Java)</h1><a id=\"user-content--e2e-rest-api-automation-framework-rest-assured--java\" class=\"anchor\" aria-label=\"Permalink: 🧩 E2E REST API Automation Framework (Rest Assured + Java)\" href=\"#-e2e-rest-api-automation-framework-rest-assured--java\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">Author: <strong>Aayush Mishra</strong></h3><a id=\"user-content-author-aayush-mishra\" class=\"anchor\" aria-label=\"Permalink: Author: Aayush Mishra\" href=\"#author-aayush-mishra\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">🔗 <a href=\"https://www.linkedin.com/in/aayushmishra33/\" rel=\"nofollow\">LinkedIn</a> | 🌐 <a href=\"https://aayushmishra.tech/\" rel=\"nofollow\">aayushmishra.tech</a></p>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🎯 Objective</h2><a id=\"user-content--objective\" class=\"anchor\" aria-label=\"Permalink: 🎯 Objective\" href=\"#-objective\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">An <strong>End-to-End REST API Automation Framework</strong> built from scratch using <strong>Rest Assured</strong>, <strong>Java</strong>, and <strong>TestNG</strong>, focused on <strong>Banking APIs</strong>.<br>\nThis project demonstrates a complete automation setup — from basic API testing to advanced framework design, CI/CD integration, and parallel execution.</p>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧱 Tech Stack</h2><a id=\"user-content--tech-stack\" class=\"anchor\" aria-label=\"Permalink: 🧱 Tech Stack\" href=\"#-tech-stack\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<markdown-accessiblity-table><table>\n<thead>\n<tr>\n<th>Layer</th>\n<th>Technology</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Language</td>\n<td>Java 11</td>\n</tr>\n<tr>\n<td>Framework</td>\n<td>Rest Assured, TestNG</td>\n</tr>\n<tr>\n<td>Build Tool</td>\n<td>Maven</td>\n</tr>\n<tr>\n<td>Logging</td>\n<td>Log4j2</td>\n</tr>\n<tr>\n<td>CI/CD</td>\n<td>GitHub Actions</td>\n</tr>\n<tr>\n<td>Reporting</td>\n<td>TestNG Reports, Surefire Reports</td>\n</tr>\n<tr>\n<td>Design Pattern</td>\n<td>Service Object Model (SOM)</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">⚙️ Key Features</h2><a id=\"user-content-️-key-features\" class=\"anchor\" aria-label=\"Permalink: ⚙️ Key Features\" href=\"#️-key-features\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ul dir=\"auto\">\n<li>✅ Modular, scalable <strong>Service Object Model</strong></li>\n<li>✅ <strong>Thread-safe parallel execution</strong></li>\n<li>✅ <strong>Config-driven setup</strong> with environment support</li>\n<li>✅ <strong>Reusable BaseService</strong> for HTTP methods</li>\n<li>✅ Integrated <strong>logging &amp; reporting</strong></li>\n<li>✅ Supports <strong>CI/CD</strong> via GitHub Actions</li>\n<li>✅ <strong>Token-based authentication handling</strong></li>\n<li>✅ Supports <strong>Regression, Smoke, and Parallel</strong> suites</li>\n</ul>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">📂 Project Structure</h2><a id=\"user-content--project-structure\" class=\"anchor\" aria-label=\"Permalink: 📂 Project Structure\" href=\"#-project-structure\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"\nsrc\n├── main/java/com/api\n│   ├── config\n│   ├── models\n│   │   ├── request\n│   │   └── response\n│   ├── services\n│   └── utils\n└── test/java/com/api\n├── filters\n├── listeners\n└── tests\n\"><pre class=\"notranslate\"><code>\nsrc\n├── main/java/com/api\n│   ├── config\n│   ├── models\n│   │   ├── request\n│   │   └── response\n│   ├── services\n│   └── utils\n└── test/java/com/api\n├── filters\n├── listeners\n└── tests\n\n</code></pre></div>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧪 Example Test (Login API)</h2><a id=\"user-content--example-test-login-api\" class=\"anchor\" aria-label=\"Permalink: 🧪 Example Test (Login API)\" href=\"#-example-test-login-api\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"@Test\npublic void testSuccessfulLogin() {\n    LoginRequest request = new LoginRequest(&quot;testuser&quot;, &quot;testpass&quot;);\n    Response response = authService.login(request);\n\n    assertEquals(200, response.getStatusCode());\n    LoginResponse loginResponse = response.as(LoginResponse.class);\n    assertNotNull(loginResponse.getToken());\n}\"><pre><span class=\"pl-c1\">@</span><span class=\"pl-c1\">Test</span>\n<span class=\"pl-k\">public</span> <span class=\"pl-smi\">void</span> <span class=\"pl-en\">testSuccessfulLogin</span>() {\n    <span class=\"pl-smi\">LoginRequest</span> <span class=\"pl-s1\">request</span> = <span class=\"pl-k\">new</span> <span class=\"pl-smi\">LoginRequest</span>(<span class=\"pl-s\">\"testuser\"</span>, <span class=\"pl-s\">\"testpass\"</span>);\n    <span class=\"pl-smi\">Response</span> <span class=\"pl-s1\">response</span> = <span class=\"pl-s1\">authService</span>.<span class=\"pl-en\">login</span>(<span class=\"pl-s1\">request</span>);\n\n    <span class=\"pl-en\">assertEquals</span>(<span class=\"pl-c1\">200</span>, <span class=\"pl-s1\">response</span>.<span class=\"pl-en\">getStatusCode</span>());\n    <span class=\"pl-smi\">LoginResponse</span> <span class=\"pl-s1\">loginResponse</span> = <span class=\"pl-s1\">response</span>.<span class=\"pl-en\">as</span>(<span class=\"pl-smi\">LoginResponse</span>.<span class=\"pl-k\">class</span>);\n    <span class=\"pl-en\">assertNotNull</span>(<span class=\"pl-s1\">loginResponse</span>.<span class=\"pl-en\">getToken</span>());\n}</pre></div>\n<p dir=\"auto\">This example validates the <strong>login endpoint</strong> and ensures that the response token is not null.</p>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧰 Dependencies (pom.xml)</h2><a id=\"user-content--dependencies-pomxml\" class=\"anchor\" aria-label=\"Permalink: 🧰 Dependencies (pom.xml)\" href=\"#-dependencies-pomxml\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"&lt;dependencies&gt;\n    &lt;!-- Rest Assured --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;io.rest-assured&lt;/groupId&gt;\n        &lt;artifactId&gt;rest-assured&lt;/artifactId&gt;\n        &lt;version&gt;5.3.0&lt;/version&gt;\n    &lt;/dependency&gt;\n\n    &lt;!-- TestNG --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.testng&lt;/groupId&gt;\n        &lt;artifactId&gt;testng&lt;/artifactId&gt;\n        &lt;version&gt;7.10.2&lt;/version&gt;\n        &lt;scope&gt;test&lt;/scope&gt;\n    &lt;/dependency&gt;\n\n    &lt;!-- Jackson for JSON serialization --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;\n        &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;\n        &lt;version&gt;2.18.2&lt;/version&gt;\n    &lt;/dependency&gt;\n\n    &lt;!-- Log4j2 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt;\n        &lt;artifactId&gt;log4j-core&lt;/artifactId&gt;\n        &lt;version&gt;2.20.0&lt;/version&gt;\n    &lt;/dependency&gt;\n&lt;/dependencies&gt;\"><pre>&lt;<span class=\"pl-ent\">dependencies</span>&gt;\n    <span class=\"pl-c\"><span class=\"pl-c\">&lt;!--</span> Rest Assured <span class=\"pl-c\">--&gt;</span></span>\n    &lt;<span class=\"pl-ent\">dependency</span>&gt;\n        &lt;<span class=\"pl-ent\">groupId</span>&gt;io.rest-assured&lt;/<span class=\"pl-ent\">groupId</span>&gt;\n        &lt;<span class=\"pl-ent\">artifactId</span>&gt;rest-assured&lt;/<span class=\"pl-ent\">artifactId</span>&gt;\n        &lt;<span class=\"pl-ent\">version</span>&gt;5.3.0&lt;/<span class=\"pl-ent\">version</span>&gt;\n    &lt;/<span class=\"pl-ent\">dependency</span>&gt;\n\n    <span class=\"pl-c\"><span class=\"pl-c\">&lt;!--</span> TestNG <span class=\"pl-c\">--&gt;</span></span>\n    &lt;<span class=\"pl-ent\">dependency</span>&gt;\n        &lt;<span class=\"pl-ent\">groupId</span>&gt;org.testng&lt;/<span class=\"pl-ent\">groupId</span>&gt;\n        &lt;<span class=\"pl-ent\">artifactId</span>&gt;testng&lt;/<span class=\"pl-ent\">artifactId</span>&gt;\n        &lt;<span class=\"pl-ent\">version</span>&gt;7.10.2&lt;/<span class=\"pl-ent\">version</span>&gt;\n        &lt;<span class=\"pl-ent\">scope</span>&gt;test&lt;/<span class=\"pl-ent\">scope</span>&gt;\n    &lt;/<span class=\"pl-ent\">dependency</span>&gt;\n\n    <span class=\"pl-c\"><span class=\"pl-c\">&lt;!--</span> Jackson for JSON serialization <span class=\"pl-c\">--&gt;</span></span>\n    &lt;<span class=\"pl-ent\">dependency</span>&gt;\n        &lt;<span class=\"pl-ent\">groupId</span>&gt;com.fasterxml.jackson.core&lt;/<span class=\"pl-ent\">groupId</span>&gt;\n        &lt;<span class=\"pl-ent\">artifactId</span>&gt;jackson-databind&lt;/<span class=\"pl-ent\">artifactId</span>&gt;\n        &lt;<span class=\"pl-ent\">version</span>&gt;2.18.2&lt;/<span class=\"pl-ent\">version</span>&gt;\n    &lt;/<span class=\"pl-ent\">dependency</span>&gt;\n\n    <span class=\"pl-c\"><span class=\"pl-c\">&lt;!--</span> Log4j2 <span class=\"pl-c\">--&gt;</span></span>\n    &lt;<span class=\"pl-ent\">dependency</span>&gt;\n        &lt;<span class=\"pl-ent\">groupId</span>&gt;org.apache.logging.log4j&lt;/<span class=\"pl-ent\">groupId</span>&gt;\n        &lt;<span class=\"pl-ent\">artifactId</span>&gt;log4j-core&lt;/<span class=\"pl-ent\">artifactId</span>&gt;\n        &lt;<span class=\"pl-ent\">version</span>&gt;2.20.0&lt;/<span class=\"pl-ent\">version</span>&gt;\n    &lt;/<span class=\"pl-ent\">dependency</span>&gt;\n&lt;/<span class=\"pl-ent\">dependencies</span>&gt;</pre></div>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧩 Framework Overview</h2><a id=\"user-content--framework-overview\" class=\"anchor\" aria-label=\"Permalink: 🧩 Framework Overview\" href=\"#-framework-overview\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">🔸 Base Configuration</h3><a id=\"user-content--base-configuration\" class=\"anchor\" aria-label=\"Permalink: 🔸 Base Configuration\" href=\"#-base-configuration\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Centralized setup for environment variables, base URLs, and reusable request specifications.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">🔸 Service Layer</h3><a id=\"user-content--service-layer\" class=\"anchor\" aria-label=\"Permalink: 🔸 Service Layer\" href=\"#-service-layer\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Implements core API actions (<code>AuthService</code>, <code>UserService</code>, etc.) built on top of the reusable <code>BaseService</code>.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">🔸 Model Layer</h3><a id=\"user-content--model-layer\" class=\"anchor\" aria-label=\"Permalink: 🔸 Model Layer\" href=\"#-model-layer\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Defines POJOs for request and response payloads — enabling cleaner serialization/deserialization.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">🔸 Test Layer</h3><a id=\"user-content--test-layer\" class=\"anchor\" aria-label=\"Permalink: 🔸 Test Layer\" href=\"#-test-layer\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Contains TestNG-based test cases grouped under <strong>auth</strong>, <strong>user</strong>, etc., integrated with listeners and filters.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">🔸 Filters &amp; Logging</h3><a id=\"user-content--filters--logging\" class=\"anchor\" aria-label=\"Permalink: 🔸 Filters &amp; Logging\" href=\"#-filters--logging\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Custom filters for intercepting requests and responses using <strong>Rest Assured Filters</strong> and <strong>Log4j2</strong>.</p>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧵 Parallel Execution Support</h2><a id=\"user-content--parallel-execution-support\" class=\"anchor\" aria-label=\"Permalink: 🧵 Parallel Execution Support\" href=\"#-parallel-execution-support\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">The framework supports <strong>multi-threaded execution</strong> using <code>ThreadLocal</code> for thread safety.</p>\n<p dir=\"auto\">Run parallel tests using:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"mvn clean test -Dsuite=parallel\"><pre>mvn clean <span class=\"pl-c1\">test</span> -Dsuite=parallel</pre></div>\n<p dir=\"auto\">TestNG example:</p>\n<div class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"&lt;suite name=&quot;Parallel Suite&quot; parallel=&quot;methods&quot; thread-count=&quot;4&quot;&gt;\n    &lt;classes&gt;\n        &lt;class name=&quot;com.api.tests.AuthTest&quot;/&gt;\n        &lt;class name=&quot;com.api.tests.UserTest&quot;/&gt;\n    &lt;/classes&gt;\n&lt;/suite&gt;\"><pre>&lt;<span class=\"pl-ent\">suite</span> <span class=\"pl-e\">name</span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>Parallel Suite<span class=\"pl-pds\">\"</span></span> <span class=\"pl-e\">parallel</span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>methods<span class=\"pl-pds\">\"</span></span> <span class=\"pl-e\">thread-count</span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>4<span class=\"pl-pds\">\"</span></span>&gt;\n    &lt;<span class=\"pl-ent\">classes</span>&gt;\n        &lt;<span class=\"pl-ent\">class</span> <span class=\"pl-e\">name</span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>com.api.tests.AuthTest<span class=\"pl-pds\">\"</span></span>/&gt;\n        &lt;<span class=\"pl-ent\">class</span> <span class=\"pl-e\">name</span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>com.api.tests.UserTest<span class=\"pl-pds\">\"</span></span>/&gt;\n    &lt;/<span class=\"pl-ent\">classes</span>&gt;\n&lt;/<span class=\"pl-ent\">suite</span>&gt;</pre></div>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">⚡ CI/CD Integration (GitHub Actions)</h2><a id=\"user-content--cicd-integration-github-actions\" class=\"anchor\" aria-label=\"Permalink: ⚡ CI/CD Integration (GitHub Actions)\" href=\"#-cicd-integration-github-actions\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">The workflow automatically runs the API test suite on each push, PR, or scheduled run.</p>\n<div class=\"highlight highlight-source-yaml notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"name: API Test Automation\n\non:\n  push:\n    branches: [ main, master ]\n  pull_request:\n    branches: [ main, master ]\n  schedule:\n    - cron: '0 2 * * *'      # Daily at 2 AM UTC\n    - cron: '0 14 * * 1,4'   # Monday &amp; Thursday at 2 PM UTC\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n\n      - name: Set up JDK\n        uses: actions/setup-java@v3\n        with:\n          java-version: '11'\n          distribution: 'temurin'\n          cache: 'maven'\n\n      - name: Run API Tests\n        run: mvn clean test -Dsuite=regression\"><pre><span class=\"pl-ent\">name</span>: <span class=\"pl-s\">API Test Automation</span>\n\n<span class=\"pl-ent\">on</span>:\n  <span class=\"pl-ent\">push</span>:\n    <span class=\"pl-ent\">branches</span>: <span class=\"pl-s\">[ main, master ]</span>\n  <span class=\"pl-ent\">pull_request</span>:\n    <span class=\"pl-ent\">branches</span>: <span class=\"pl-s\">[ main, master ]</span>\n  <span class=\"pl-ent\">schedule</span>:\n    - <span class=\"pl-ent\">cron</span>: <span class=\"pl-s\"><span class=\"pl-pds\">'</span>0 2 * * *<span class=\"pl-pds\">'</span></span>      <span class=\"pl-c\"><span class=\"pl-c\">#</span> Daily at 2 AM UTC</span>\n    - <span class=\"pl-ent\">cron</span>: <span class=\"pl-s\"><span class=\"pl-pds\">'</span>0 14 * * 1,4<span class=\"pl-pds\">'</span></span>   <span class=\"pl-c\"><span class=\"pl-c\">#</span> Monday &amp; Thursday at 2 PM UTC</span>\n\n<span class=\"pl-ent\">jobs</span>:\n  <span class=\"pl-ent\">test</span>:\n    <span class=\"pl-ent\">runs-on</span>: <span class=\"pl-s\">ubuntu-latest</span>\n    <span class=\"pl-ent\">steps</span>:\n      - <span class=\"pl-ent\">name</span>: <span class=\"pl-s\">Checkout repository</span>\n        <span class=\"pl-ent\">uses</span>: <span class=\"pl-s\">actions/checkout@v3</span>\n\n      - <span class=\"pl-ent\">name</span>: <span class=\"pl-s\">Set up JDK</span>\n        <span class=\"pl-ent\">uses</span>: <span class=\"pl-s\">actions/setup-java@v3</span>\n        <span class=\"pl-ent\">with</span>:\n          <span class=\"pl-ent\">java-version</span>: <span class=\"pl-s\"><span class=\"pl-pds\">'</span>11<span class=\"pl-pds\">'</span></span>\n          <span class=\"pl-ent\">distribution</span>: <span class=\"pl-s\"><span class=\"pl-pds\">'</span>temurin<span class=\"pl-pds\">'</span></span>\n          <span class=\"pl-ent\">cache</span>: <span class=\"pl-s\"><span class=\"pl-pds\">'</span>maven<span class=\"pl-pds\">'</span></span>\n\n      - <span class=\"pl-ent\">name</span>: <span class=\"pl-s\">Run API Tests</span>\n        <span class=\"pl-ent\">run</span>: <span class=\"pl-s\">mvn clean test -Dsuite=regression</span></pre></div>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧾 Execution Commands</h2><a id=\"user-content--execution-commands\" class=\"anchor\" aria-label=\"Permalink: 🧾 Execution Commands\" href=\"#-execution-commands\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Run regression suite\nmvn clean test -Dsuite=regression\n\n# Run smoke suite\nmvn clean test -Dsuite=smoke\n\n# Run specific groups\nmvn clean test -Dgroups=auth,user\n\n# Enable parallel execution\nmvn clean test -Dthreads=4\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#</span> Run regression suite</span>\nmvn clean <span class=\"pl-c1\">test</span> -Dsuite=regression\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Run smoke suite</span>\nmvn clean <span class=\"pl-c1\">test</span> -Dsuite=smoke\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Run specific groups</span>\nmvn clean <span class=\"pl-c1\">test</span> -Dgroups=auth,user\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Enable parallel execution</span>\nmvn clean <span class=\"pl-c1\">test</span> -Dthreads=4</pre></div>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">📊 Reporting &amp; Logs</h2><a id=\"user-content--reporting--logs\" class=\"anchor\" aria-label=\"Permalink: 📊 Reporting &amp; Logs\" href=\"#-reporting--logs\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ul dir=\"auto\">\n<li><strong>TestNG Reports</strong> generated under <code>test-output/</code></li>\n<li><strong>Surefire Reports</strong> under <code>target/surefire-reports/</code></li>\n<li><strong>Logs</strong> available at <code>/logs/test.log</code></li>\n</ul>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🔄 CI/CD Results</h2><a id=\"user-content--cicd-results\" class=\"anchor\" aria-label=\"Permalink: 🔄 CI/CD Results\" href=\"#-cicd-results\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Each pipeline run automatically:</p>\n<ul dir=\"auto\">\n<li>Executes API tests</li>\n<li>Uploads reports as GitHub artifacts</li>\n<li>Publishes TestNG results for visibility</li>\n</ul>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🧠 Key Design Patterns Used</h2><a id=\"user-content--key-design-patterns-used\" class=\"anchor\" aria-label=\"Permalink: 🧠 Key Design Patterns Used\" href=\"#-key-design-patterns-used\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<markdown-accessiblity-table><table>\n<thead>\n<tr>\n<th>Pattern</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Service Object Model (SOM)</strong></td>\n<td>Encapsulates business logic for APIs</td>\n</tr>\n<tr>\n<td><strong>ThreadLocal</strong></td>\n<td>Enables parallel-safe execution</td>\n</tr>\n<tr>\n<td><strong>Builder/Factory</strong></td>\n<td>Simplifies object creation for requests</td>\n</tr>\n<tr>\n<td><strong>ConfigManager</strong></td>\n<td>Centralized property management</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🚀 Future Enhancements</h2><a id=\"user-content--future-enhancements\" class=\"anchor\" aria-label=\"Permalink: 🚀 Future Enhancements\" href=\"#-future-enhancements\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ul dir=\"auto\">\n<li>Jenkins pipeline integration</li>\n<li>Dockerized test execution</li>\n<li>Dynamic environment switching</li>\n<li>HTML or Allure-based reporting</li>\n<li>API data-driven testing from JSON/Excel</li>\n</ul>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">🤝 Contributing</h2><a id=\"user-content--contributing\" class=\"anchor\" aria-label=\"Permalink: 🤝 Contributing\" href=\"#-contributing\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Contributions, improvements, and feedback are always welcome.\nFeel free to fork the repository, raise issues, or suggest enhancements.</p>\n<hr>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">📧 Contact</h2><a id=\"user-content--contact\" class=\"anchor\" aria-label=\"Permalink: 📧 Contact\" href=\"#-contact\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\"><strong>Aayush Mishra</strong>\n📍 India\n📫 <a href=\"https://www.linkedin.com/in/aayushmishra33/\" rel=\"nofollow\">LinkedIn</a> | 🌐 <a href=\"https://aayushmishra.tech/\" rel=\"nofollow\">aayushmishra.tech</a></p>\n<hr>\n<blockquote>\n<p dir=\"auto\"><em>“Quality is not an act, it’s a habit.”</em>\n— Aristotle</p>\n</blockquote>\n</article></div>","tree":{"fileCount":28,"dirCount":14,"truncated":false,"extensions":[{"ext":"java","count":17},{"ext":"prefs","count":3},{"ext":"xml","count":3},{"ext":"classpath","count":1},{"ext":"gitignore","count":1},{"ext":"project","count":1},{"ext":"md","count":1},{"ext":"other","count":1}],"topLevel":[{"name":".settings","type":"dir"},{"name":"src","type":"dir"},{"name":".classpath","type":"file"},{"name":".gitignore","type":"file"},{"name":".project","type":"file"},{"name":"pom.xml","type":"file"},{"name":"README.md","type":"file"},{"name":"suite.xml","type":"file"},{"name":"test file","type":"file"}]}}