🧪 QA TESTER NOTES

Welcome to QA Notes

This is my small corner of the internet where Arun puts together notes and tutorials — written in plain language, for anyone curious about QA.

Tutorials on manual testing, Playwright automation, TypeScript, AI tools, and more. Start from the beginning or jump to whatever interests you.

Start with Manual Testing — the foundation of all QA. Then move to automation, AI tools, and more. Each topic is explained simply first, then technically.

START HERE — THE FOUNDATION OF ALL TESTING

Before a new car reaches the showroom, a trained person sits inside it, drives it, presses every button, checks every light, and confirms everything works as expected. No machine replaces this step completely.

Manual testing is exactly that — a trained tester uses the software by hand, just like a real user would, and checks that everything works correctly. All automation comes after you first understand manual testing well.

Manual testing is the process of manually executing test cases without automation tools. A tester plays the role of an end user and tests the software to identify any bugs or defects.

  • Tester manually verifies all features
  • No scripts or tools required initially
  • Forms the basis of all QA work
  • Helps understand the real application behavior
  • Smoke Testing: Quick check to verify basic functionality works
  • Regression Testing: Ensure new changes don't break existing features
  • Exploratory Testing: Ad-hoc testing based on tester intuition and experience
  • Acceptance Testing: Validate the system meets business requirements
  • Usability Testing: Check if the application is user-friendly
  • Sanity Testing: Verify specific functionality after a bug fix

A test case is a set of conditions or steps used to determine whether a feature works correctly.

  • Test Case ID: Unique identifier for tracking
  • Title: Brief description of what is tested
  • Preconditions: What must be true before the test
  • Test Steps: Step-by-step instructions
  • Expected Result: What should happen
  • Actual Result: What actually happened
  • Status: Pass / Fail

A good bug report helps developers understand, reproduce, and fix defects quickly.

  • Bug ID: Unique identifier
  • Summary: Brief one-line description
  • Severity: Critical, Major, Minor, Trivial
  • Priority: High, Medium, Low
  • Steps to Reproduce: Exact steps to see the bug
  • Expected vs Actual Result: Clear comparison
  • Screenshots / Logs: Supporting evidence

The Software Testing Life Cycle (STLC) defines the ordered steps involved in testing a software application.

  1. Requirement Analysis: Review what needs to be tested
  2. Test Planning: Create test strategy, schedule, and resources
  3. Test Case Design: Write test cases and test data
  4. Test Environment Setup: Prepare the environment
  5. Test Execution: Run tests and log results
  6. Test Closure: Summarize results and lessons learned
  • Entry Criteria: Requirements finalized, test environment ready, test cases reviewed and approved
  • Exit Criteria: All planned tests executed, critical bugs fixed, test coverage met, sign-off received
  1. Testing shows the presence of defects, not their absence
  2. Exhaustive testing is impossible
  3. Early testing saves time and money
  4. Defects cluster together (Pareto principle — 80/20 rule)
  5. Beware of the pesticide paradox — vary your tests
  6. Testing is context dependent
  7. Absence-of-errors fallacy — passing all tests ≠ good software

In Agile, testing is continuous and happens within each sprint cycle alongside development.

  • Testing starts from Day 1 of the sprint
  • QA collaborates closely with developers and PO
  • Stories have clear acceptance criteria
  • Regression testing performed each sprint
  • Continuous feedback loop between dev and QA
  • Use Manual When: Exploratory testing, UI/UX review, short-term projects, one-time tests, usability checks
  • Use Automation When: Regression suite, repetitive tests, performance testing, large-scale test execution, CI/CD pipelines

Start manual. Automate what is repetitive and stable.

API TESTING — TESTING BEHIND THE SCENES

API testing validates the communication between different software systems — making sure data is correctly sent and received behind the scenes, independent of the user interface.

API (Application Programming Interface) is a contract that allows two applications to communicate. It defines the rules for how requests and responses are structured.

  • Client sends a request to the server
  • Server processes and sends back a response
  • REST APIs use HTTP: GET, POST, PUT, DELETE
  • GET: Retrieve data (read only, no body)
  • POST: Create new data on server
  • PUT: Full update of existing data
  • PATCH: Partial update of existing data
  • DELETE: Remove data from server
  • 2xx Success: 200 OK, 201 Created, 204 No Content
  • 3xx Redirect: 301 Moved Permanently, 304 Not Modified
  • 4xx Client Error: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 422 Unprocessable
  • 5xx Server Error: 500 Internal Server Error, 503 Service Unavailable

Postman is the most popular GUI tool for API testing.

  • Build requests with URL, method, headers, and body
  • Write tests using JavaScript in the Tests tab
  • Organize requests into Collections
  • Use Environment Variables for different environments
  • Run collections with Newman (CLI)
  • Verify correct status code for valid requests
  • Validate response body structure and data types
  • Test with invalid / missing data (400 errors)
  • Test authentication (401, 403)
  • Test boundary values and null inputs
  • Verify response time is within acceptable limits
  • API Key: Simple token in headers or query params
  • Bearer Token / JWT: Most common in modern APIs
  • OAuth 2.0: For third-party authorization flows
  • Basic Auth: Base64-encoded username:password

Most modern APIs return JSON. Key things to validate:

  • Correct data types (string, number, boolean, array)
  • Required fields are present
  • No extra unexpected fields
  • Correct nested structure and array lengths
  • Measure response time under normal load
  • Stress test with concurrent virtual users
  • Tools: JMeter, k6, Gatling, Artillery
  • Define SLA thresholds (e.g., <500ms for 95% of requests)
  • Test APIs independently from the UI layer
  • Use environment variables for base URLs and tokens
  • Automate with Newman or CI/CD pipelines
  • Include negative and edge case tests
  • Validate response schema with tools like Pact or AJV

DEV TOOLS — TESTING IN THE BROWSER

Browser DevTools are a powerful set of debugging tools built directly into every modern browser. Every QA tester should master DevTools to inspect elements, monitor network requests, and debug issues.

DevTools are built into Chrome, Firefox, and Edge. Open with F12 or Ctrl+Shift+I.

  • Elements: Inspect and modify HTML/CSS live
  • Console: View JavaScript errors and run commands
  • Network: Monitor all HTTP requests and responses
  • Sources: Debug JavaScript with breakpoints
  • Application: Inspect cookies, localStorage, cache
  • View all HTTP requests made by the page
  • Inspect request headers, payload, and response body
  • Filter by XHR/Fetch for API calls only
  • Check status codes and response times
  • Copy as cURL to replay directly in Postman
  • Errors appear in red — always check them first
  • Warnings appear in yellow — often important hints
  • Run JavaScript commands interactively
  • Filter by level: Error, Warning, Info, Log
  • Right-click any element → Inspect to jump to it
  • View and edit HTML structure in real-time
  • Modify CSS styles on the fly for visual testing
  • Find CSS selectors and data-testid attributes for automation
  • View, add, edit, and delete cookies
  • Inspect localStorage and sessionStorage values
  • Test authentication scenarios by modifying tokens
  • Clear all storage to simulate a fresh user session
  • Toggle Device Toolbar with Ctrl+Shift+M
  • Test on various preset screen sizes (iPhone, iPad, etc.)
  • Simulate mobile touch events
  • Throttle network speed to simulate slow connections
  • Test in portrait and landscape orientations

PLAYWRIGHT — BROWSER AUTOMATION

Playwright is a powerful automation framework by Microsoft for end-to-end testing. It controls Chromium, Firefox, and WebKit — all with a single API. Auto-waits by default, making tests far less flaky.

  • Developed by Microsoft — open source
  • Supports Chromium, Firefox, and WebKit
  • Works with TypeScript, JavaScript, Python, Java, C#
  • Auto-waits for elements to be ready (no more sleep!)
  • Built-in test runner: @playwright/test
npm init playwright@latest
npx playwright install
npx playwright test

The wizard creates project structure with config, example tests, and browser binaries.

page.getByRole('button', { name: 'Submit' })
page.getByText('Welcome, Arun')
page.getByLabel('Username')
page.getByPlaceholder('Enter email')
page.getByTestId('submit-button')
page.locator('#login-btn')

Prefer role and label locators — they are resilient and accessible.

await page.goto('https://example.com');
await page.getByLabel('Username').fill('admin');
await page.getByLabel('Password').fill('secret');
await page.getByRole('button', { name: 'Login' }).click();
await page.waitForURL('**/dashboard');
await expect(page).toHaveTitle('Dashboard');
await expect(page.getByText('Welcome')).toBeVisible();
await expect(page.getByRole('button')).toBeEnabled();
await expect(page.getByTestId('alert')).toHaveText('Success!');
await expect(page).toHaveURL(/dashboard/);

POM creates a class per page, separating locators and actions from test logic:

class LoginPage {
  constructor(private page: Page) {}
  usernameInput = this.page.getByLabel('Username');
  async login(user: string, pass: string) {
    await this.usernameInput.fill(user);
    await this.page.getByLabel('Password').fill(pass);
    await this.page.getByRole('button',{name:'Login'}).click();
  }
}
test.beforeEach(async ({ page }) => {
  await page.goto('https://example.com/login');
});

test.afterAll(async () => {
  // cleanup after all tests in this file
});
const response = await request.get('/api/users');
expect(response.status()).toBe(200);
const body = await response.json();
expect(body.users).toHaveLength(10);

Configure in playwright.config.ts:

use: {
  screenshot: 'only-on-failure',
  video: 'retain-on-failure',
  trace: 'on-first-retry'
}

View traces: npx playwright show-trace trace.zip

  • Tests run headless by default in CI environments
  • Integrate with GitHub Actions, Azure DevOps, Jenkins
  • Generate HTML reports: npx playwright show-report
  • Retry flaky tests with retries: 2 in config
  • Parallel execution across workers for speed

TYPESCRIPT FOR QA TESTERS

TypeScript adds static typing to JavaScript, making your test code more reliable, easier to understand, and less prone to runtime errors. It is Playwright's native and recommended language.

  • Catch errors at compile time, not at runtime
  • Better IntelliSense and autocomplete in VS Code
  • Self-documenting code — types explain what parameters mean
  • Easier refactoring across large codebases
  • Native language for Playwright
const name: string = 'Arun';
const age: number = 30;
const isActive: boolean = true;
const scores: number[] = [95, 87, 92];
const status: 'pass' | 'fail' = 'pass';
let data: string | null = null;
interface User {
  id: number;
  name: string;
  email: string;
  role?: string; // optional field
}

type TestStatus = 'pass' | 'fail' | 'skip';
function login(username: string, password: string): boolean {
  return username === 'admin' && password === 'secret';
}

const fetchUser = async (id: number): Promise<User> => {
  return await api.get(`/users/${id}`);
};
class LoginPage {
  readonly page: Page;
  readonly username: Locator;
  readonly password: Locator;

  constructor(page: Page) {
    this.page = page;
    this.username = page.getByLabel('Username');
    this.password = page.getByLabel('Password');
  }
  async login(u: string, p: string): Promise<void> {
    await this.username.fill(u);
    await this.password.fill(p);
    await this.page.getByRole('button',{name:'Login'}).click();
  }
}
function getFirst<T>(arr: T[]): T {
  return arr[0];
}
// TypeScript infers T = number:
const first = getFirst([1, 2, 3]); // type: number

GEN AI FOR QA — SMARTER TESTING WITH AI

AI tools like Claude and ChatGPT can help write test cases, find errors faster, and create reports — saving hours of manual work. Like having a very studious colleague who helps prepare in seconds!

  • Generate test cases from requirements in seconds
  • Write Playwright / Postman scripts faster
  • Explain errors and suggest fixes
  • Create diverse test data and edge cases
  • Review and improve bug reports
  • Summarize test run results

Good prompts get better results. For QA tasks, be specific about:

  • The feature being tested (context)
  • The format you want (table, numbered list, code)
  • The technology stack (Playwright, Postman, etc.)
  • Both positive and negative test scenarios
  • Example: "Generate 10 test cases for a login page including positive, negative, and boundary cases. Return as a markdown table."

Example prompt:
"Write test cases for a login form with username and password. Include positive, negative, and boundary tests. Format as a table with columns: ID, Title, Steps, Expected Result."

ChatGPT will generate a comprehensive test suite in seconds.

Claude excels at understanding long context and generating detailed QA artifacts:

  • Analyzing requirements documents for testability
  • Writing detailed, well-structured bug reports
  • Generating complete Playwright test scripts
  • Reviewing existing test coverage and suggesting gaps
  • Install GitHub Copilot extension in VS Code
  • Inline code suggestions as you type test scripts
  • Chat with Copilot about your test code
  • Auto-complete Page Object methods and assertions
  • Generate entire test files from a comment description

MICROSOFT COPILOT FOR QA

Microsoft Copilot integrates AI across Microsoft 365 and VS Code — boosting QA productivity in documentation, test scripting, and communication.

Microsoft Copilot is AI assistance integrated across Microsoft products — Teams, Word, Excel, Outlook, and VS Code.

  • Powered by large language models and Microsoft's infrastructure
  • Context-aware within your apps and documents
  • GitHub Copilot specifically for coding tasks in VS Code
  • Install the GitHub Copilot extension from VS Code marketplace
  • Get inline code suggestions as you type
  • Open Copilot Chat panel for QA questions
  • Generate complete test files from comment descriptions
  • Ask "Explain this test" or "Fix this assertion"
  • Summarize long bug discussion threads instantly
  • Draft QA status update messages
  • Create meeting notes from testing sessions
  • Generate action items from test review meetings

CLAUDE AI — DEEP QA ASSISTANCE

Claude is an AI assistant by Anthropic, known for detailed, nuanced, and context-aware responses — making it excellent for QA documentation, test strategy, and code review.

Claude (claude.ai) is developed by Anthropic with a focus on being helpful, harmless, and honest. It handles very long documents well.

  • Analyze long requirement or specification documents
  • Generate comprehensive test plans
  • Review and critique existing test strategies
  • Write detailed test reports and summaries

Share your requirements document with Claude and ask it to create a comprehensive test plan including scope, approach, test scenarios, risks, and exit criteria.

Claude can process the full document and produce a structured, professional test plan in seconds.

Paste your HTML or describe the UI, then ask Claude to write a Playwright test. Claude understands Playwright's API deeply and writes realistic, working test scripts.

MCP — MODEL CONTEXT PROTOCOL

Model Context Protocol (MCP) is an open standard that enables AI models to connect with external tools and data sources — extending AI capabilities for QA automation workflows.

MCP (Model Context Protocol) is an open standard developed by Anthropic for connecting AI assistants to external tools, databases, and APIs in a standardized way.

  • Allows AI to interact with real systems (browsers, databases, APIs)
  • Standardized protocol — works across different AI models
  • Used in Claude, VS Code Copilot, and other AI tools
  • Connect AI directly to your test management tools (Jira, TestRail)
  • Automate test case creation from requirement tickets
  • Link AI to CI/CD pipelines for intelligent failure analysis
  • Real-time defect tracking with AI assistance
  • Browser automation via Playwright MCP server
Arun Shanmugam

Arun Shanmugam

QA Tester · Playwright · TypeScript · API Testing · Gen AI

Passionate about quality assurance and making testing simple to understand. I believe every tester should start with strong manual testing fundamentals before diving into automation.

This site is my effort to share what I've learned — explained simply, with real examples and plain language. Whether you're just starting out or brushing up on modern tools, there's something here for you.

📧 Get in touch
🎭

Playwright

Controls a website automatically — clicks buttons, fills forms, and checks results without human involvement.

💡 Like a helpful robot that uses an app all day and reports if anything goes wrong!
🔌

API Testing

Testing communication between software systems — ensuring data is correctly sent and received behind the scenes.

💡 Like calling the backend directly to verify data before the UI even loads!
🤖

AI-Assisted Testing

Using Claude, ChatGPT, and GitHub Copilot to write test cases, generate scripts, and create reports faster.

💡 Like a studious colleague who prepares all your questions before an exam — in seconds!
📋

Bug Reporting

Writing clear, detailed reports when something doesn't work — with exact steps, evidence, and expected behaviour.

💡 Like writing a precise complaint letter with all the evidence, so the issue gets fixed fast!
📘

TypeScript

A strongly typed language built on JavaScript — making automation code safer, more readable, and maintainable.

💡 JavaScript with a safety net — catches mistakes before they become runtime bugs!
🛠️

Browser DevTools

Inspecting elements, monitoring network requests, debugging JavaScript, and testing responsive designs in the browser.

💡 X-ray vision into how a website truly works under the hood!
📧

Email Me

Get in touch — questions, feedback, or just a hello!

🎓

Tutorials Open to All

All content on this site is free and open to everyone. Share with anyone curious about QA testing.

📧 Write to Me