Engineering quality at scale with AI-augmented test automation
I architect robust, intelligent test automation that helps enterprises ship faster without sacrificing quality — turning complex testing challenges into confidence at every release.
Scalable, maintainable automation frameworks built from scratch with proven design patterns and modular architecture.
Automated tests wired into CI/CD pipelines for shift-left testing and fast feedback on every commit.
End-to-end API automation — contract, performance, and security checks that keep back ends reliable.
Load, stress, and scalability testing that surfaces bottlenecks and proves performance under peak demand.
Native and cross-platform iOS/Android automation across functional, UI, and integration scenarios.
SAST, DAST, and dependency scanning baked into the pipeline to catch vulnerabilities early.
Certified by Katalon for demonstrating proficiency in test automation using Katalon Studio, including web, API, and mobile testing automation best practices.
Certified in modern web automation using Playwright framework, covering advanced testing techniques, cross-browser testing, and end-to-end test automation strategies.
Client Engagement - Enterprise Retail Solution
Architected a 5,000+ test framework across web, mobile, and API layers with Jenkins-driven continuous testing. Hit 95% coverage, cut manual effort by 70%, and shrank suite runtime from 8 hours to 45 minutes through parallel execution.
Client Engagement - Financial Services Platform
Designed contract-based testing for 50+ microservices using Pact and RestAssured, with data-driven API tests running in the CI/CD pipeline. Reached 99.5% reliability with zero false positives.
Client Engagement - SaaS Application Platform
Built a scalable performance suite with K6 and Grafana, running load, stress, and spike tests at 10,000+ concurrent users. Resolved critical bottlenecks to improve response times by 60%.
Tools and platforms I build for the QA community — from AI-powered browser extensions to a curated automation toolset and a free hands-on practice playground.
AI-Powered QA Browser Extensions
Browser extensions that bring AI-assisted prompts and productivity boosters straight into the QA workflow — helping testers write, refine, and reuse high-quality prompts faster.
Curated QA & Automation Toolset
A growing repository of QA and automation utilities — ready-to-use tools that streamline everyday testing tasks, data generation, and validation for automation engineers.
Hands-On Practice Site for Testers
A free practice environment for learning and sharpening UI & automation skills — realistic components and scenarios to test against with Playwright, Selenium, Cypress, and more.
Story-driven books that teach software testing and quality engineering — written to be read, not just referenced.
Open Source Contributions & Test Automation Frameworks
Production-ready automation frameworks and reusable snippets in Playwright, Selenium, Cypress, and Katalon — each documented with best practices and real-world examples.
import { test, expect } from '@playwright/test';
test.describe('User Authentication', () => {
test('should login successfully with valid credentials', async ({ page }) => {
// Navigate to login page
await page.goto('https://example.com/login');
// Fill login form
await page.fill('[data-test="username"]', 'admin@example.com');
await page.fill('[data-test="password"]', 'SecurePass123!');
// Click login button
await page.click('[data-test="login-button"]');
// Verify successful login
await expect(page).toHaveURL(/.*dashboard/);
await expect(page.locator('[data-test="user-menu"]')).toBeVisible();
// Verify user greeting
const greeting = await page.locator('.user-greeting').textContent();
expect(greeting).toContain('Welcome');
});
test('should show error with invalid credentials', async ({ page }) => {
await page.goto('https://example.com/login');
await page.fill('[data-test="username"]', 'invalid@example.com');
await page.fill('[data-test="password"]', 'wrongpassword');
await page.click('[data-test="login-button"]');
// Verify error message
const errorMsg = page.locator('[data-test="error-message"]');
await expect(errorMsg).toBeVisible();
await expect(errorMsg).toHaveText('Invalid credentials');
});
});
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;
import org.testng.annotations.*;
import org.testng.Assert;
public class LoginTest {
private WebDriver driver;
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
driver.manage().window().maximize();
}
@Test
public void testSuccessfulLogin() {
driver.get("https://example.com/login");
driver.findElement(By.id("username"))
.sendKeys("qa.user@example.com");
driver.findElement(By.id("password"))
.sendKeys("SecurePass123!");
driver.findElement(By.cssSelector("button[type='submit']"))
.click();
// Wait and verify redirect
String currentUrl = driver.getCurrentUrl();
Assert.assertTrue(currentUrl.contains("dashboard"),
"Should redirect to dashboard");
// Verify user menu is displayed
boolean isUserMenuPresent = driver
.findElement(By.className("user-menu"))
.isDisplayed();
Assert.assertTrue(isUserMenuPresent,
"User menu should be visible");
}
@AfterMethod
public void teardown() {
if (driver != null) {
driver.quit();
}
}
}
describe('User Login Flow', () => {
beforeEach(() => {
cy.visit('/login');
});
it('should login with valid credentials', () => {
cy.get('[data-cy=email-input]')
.type('test.user@example.com');
cy.get('[data-cy=password-input]')
.type('SecurePass123!');
cy.get('[data-cy=login-button]')
.click();
// Verify successful login
cy.url().should('include', '/dashboard');
cy.get('[data-cy=user-avatar]')
.should('be.visible');
cy.get('.welcome-message')
.should('contain', 'Welcome back');
});
it('should handle invalid credentials', () => {
cy.get('[data-cy=email-input]')
.type('invalid@example.com');
cy.get('[data-cy=password-input]')
.type('wrongpassword');
cy.get('[data-cy=login-button]')
.click();
// Verify error handling
cy.get('.error-alert')
.should('be.visible')
.and('contain', 'Invalid email or password');
cy.url().should('include', '/login');
});
it('should validate required fields', () => {
cy.get('[data-cy=login-button]')
.click();
cy.get('#email-error')
.should('contain', 'Email is required');
cy.get('#password-error')
.should('contain', 'Password is required');
});
});
import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ApiTests {
@Test
public void testGetUserById() {
given()
.baseUri("https://api.example.com")
.header("Authorization", "Bearer " + getToken())
.pathParam("userId", 123)
.when()
.get("/users/{userId}")
.then()
.statusCode(200)
.body("id", equalTo(123))
.body("email", notNullValue())
.body("status", equalTo("active"));
}
@Test
public void testCreateUser() {
String requestBody = """
{
"name": "John Doe",
"email": "john.doe@example.com",
"role": "user"
}
""";
Response response = given()
.baseUri("https://api.example.com")
.header("Content-Type", "application/json")
.body(requestBody)
.when()
.post("/users")
.then()
.statusCode(201)
.body("name", equalTo("John Doe"))
.body("id", notNullValue())
.extract().response();
int userId = response.path("id");
System.out.println("Created user ID: " + userId);
}
private String getToken() {
return "your-auth-token-here";
}
}
Let's discuss how SDET Experts Pvt Ltd can elevate your quality automation