Hariprasad
SDET Experts Pvt Ltd
LEAD SDET
AUTOMATION TEST LEAD
TEST ARCHITECT
AI-AUGMENTED TESTING
PROMPT ENGINEERING
JAVA
JAVASCRIPT
TYPESCRIPT
PLAYWRIGHT
KATALON STUDIO
CYPRESS
SELENIUM
AZURE CLOUD
FLUTTER
Independent Consultant · SDET Experts Pvt Ltd

AI TEST
AUTOMATION
ARCHITECT

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.

10,000+
Tests Automated
85%
Faster Releases
99.7%
Test Reliability
24/7
Continuous Testing
01

Core Expertise

🤖

Framework Architecture

Scalable, maintainable automation frameworks built from scratch with proven design patterns and modular architecture.

Selenium Playwright Cypress TestNG JUnit

CI/CD Integration

Automated tests wired into CI/CD pipelines for shift-left testing and fast feedback on every commit.

Jenkins GitHub Actions GitLab CI Azure DevOps
🔍

API Testing

End-to-end API automation — contract, performance, and security checks that keep back ends reliable.

RestAssured Postman Pact JMeter
📊

Performance Testing

Load, stress, and scalability testing that surfaces bottlenecks and proves performance under peak demand.

K6 Gatling Locust Artillery
📱

Mobile Testing

Native and cross-platform iOS/Android automation across functional, UI, and integration scenarios.

Appium Detox Espresso XCUITest
🔐

Security Testing

SAST, DAST, and dependency scanning baked into the pipeline to catch vulnerabilities early.

OWASP ZAP Snyk SonarQube Burp Suite
02

Technical Proficiency

Test Automation & Frameworks EXPERT
CI/CD & DevOps Pipeline Integration EXPERT
Programming (Java, Python, JavaScript, TypeScript) ADVANCED
Cloud Platforms & Containerization ADVANCED
03

Certifications

🏆

Katalon Practitioner Level Certification

Certified by Katalon for demonstrating proficiency in test automation using Katalon Studio, including web, API, and mobile testing automation best practices.

Katalon Studio Web Testing API Testing Mobile Testing
🎯

Playwright Automation Test Framework Certification

Certified in modern web automation using Playwright framework, covering advanced testing techniques, cross-browser testing, and end-to-end test automation strategies.

Playwright TypeScript Cross-Browser E2E Testing
04

Impact Highlights

E-Commerce Platform Test Automation

Client Engagement - Enterprise Retail Solution

↓ 70% Testing Time
Q3 2024 - Q4 2024

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.

Selenium WebDriver Appium RestAssured Jenkins Docker

Microservices API Testing Framework

Client Engagement - Financial Services Platform

99.5% Reliability
Q1 2024 - Q2 2024

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.

Pact RestAssured GitHub Actions Kubernetes

Performance Testing Infrastructure

Client Engagement - SaaS Application Platform

10K+ Concurrent Users
Q4 2023 - Q1 2024

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%.

K6 Grafana InfluxDB AWS
05

Products & Platforms

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.

PromptQA

AI-Powered QA Browser Extensions

🧩 Live

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.

AI Browser Extension Prompt Engineering
VISIT PROMPTQA →

QA Tools

Curated QA & Automation Toolset

🛠️ Live

A growing repository of QA and automation utilities — ready-to-use tools that streamline everyday testing tasks, data generation, and validation for automation engineers.

QA Tooling Automation Open Tools
VISIT QATOOLS →

Automation Playground

Hands-On Practice Site for Testers

🎯 Live

A free practice environment for learning and sharpening UI & automation skills — realistic components and scenarios to test against with Playwright, Selenium, Cypress, and more.

Playwright Selenium Practice
OPEN PLAYGROUND →
06

Books

Story-driven books that teach software testing and quality engineering — written to be read, not just referenced.

From Bugs to Brilliance book cover
✦ eBook · Paperback · Audiobook

From Bugs to Brilliance

A software engineer's journey to become a QA leader with the power of AI — testing from first principles to the age of AI, told as a story.

Storytelling Testing AI & Quality
✍️ More titles in the works New books on testing & AI quality — coming soon.
07

Code Snippets & Projects

GitHub Portfolio

Open Source Contributions & Test Automation Frameworks

🚀 Active

Production-ready automation frameworks and reusable snippets in Playwright, Selenium, Cypress, and Katalon — each documented with best practices and real-world examples.

Playwright Selenium Cypress Katalon TypeScript Java
VIEW GITHUB PROFILE
08

Live Code Snippets

login.spec.ts
TypeScript • Playwright
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');
  });
});
LoginTest.java
Java • Selenium WebDriver
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();
        }
    }
}
login.cy.js
JavaScript • Cypress
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');
  });
});
ApiTests.java
Java • REST Assured
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";
    }
}
VIEW ALL REPOSITORIES ON GITHUB

Ready to Transform Your Testing Strategy?

Let's discuss how SDET Experts Pvt Ltd can elevate your quality automation

DOWNLOAD MY CV

Last updated: February 09, 2026

VISIT MY LINKEDIN PROFILE