sahilrajput.com

Learn Playwright

Quick Links:

Tutorials:

Docs Links:

A testing tool.

What is SDET?

Software Development Engineer in Test

Different types of testing

Source: Click here

9 types of API testing 👇👇👇

📌 Smoke Testing
➡️ Purpose: To quickly check if the API is functional.
➡️ Focus: Basic functionality validation.
➡️ Scope: Testing critical paths to ensure that the API is operational without major issues.

📌 Functional Testing
➡️ Purpose: To validate if the API functions as per its documented specifications.
➡️ Focus: Testing specific functionality, input parameters, output results, and business logic.
➡️ Scope: Evaluating the API for various use cases to ensure it meets the defined requirements and expectations.

📌 Integration Testing
➡️ Purpose: To test interactions between multiple APIs or services.
➡️ Focus: Validation of data flow and communication between APIs.
➡️ Scope: Ensuring that APIs can work seamlessly together in an end-to-end scenario, checking if they can exchange data and function collectively.

📌 Regression Testing
➡️ Purpose: To prevent new changes from breaking existing API functionality.
➡️ Focus: Re-running previous test cases to check for any regression or unintended side effects.
➡️ Scope: Verifying that the existing features and behaviors of the API remain intact after making changes or updates.

📌 Load Testing
➡️ Purpose: To assess API performance under expected loads.
➡️ Focus: Measuring response times, throughput, and resource utilization during various load conditions.
➡️ Scope: Testing the scalability of the API and identifying performance bottlenecks or resource limitations.

📌 Stress Testing
➡️ Purpose: To evaluate how the API performs under extreme loads beyond normal usage.
➡️ Focus: Pushing the system to its limits to identify its breaking points.
➡️ Scope: Assessing the robustness and error-handling capabilities of the API under severe stress, helping uncover potential issues.

📌 Security Testing
➡️ Purpose: To identify vulnerabilities and weaknesses in API security.
➡️ Focus: Checking authentication, authorization, data protection, encryption, and other security measures.
➡️ Scope: Protect the API against external threats, such as SQL injection, cross-site scripting (XSS), and unauthorized access.

📌 UI Testing
➡️ Purpose: To validate the interaction between the user interface and APIs.
➡️ Focus: Ensuring that data is displayed correctly in the user interface when accessed through the API.
➡️ Scope: Testing the integration of the API with the front-end components to guarantee a smooth user experience.

📌 Fuzz Testing
➡️ Purpose: To identify vulnerabilities and security issues in the API.
➡️ Focus: Injecting unexpected, invalid, or malicious data to provoke unexpected behavior.
➡️ Scope: Revealing potential vulnerabilities that could be exploited by attackers, such as buffer overflows, injection attacks, and data validation weaknesses.

image

Latest changes made by Eric in slasher?

Commit

Slowmo might be very effective for testing

image

Playwright Cheatsheet

Source: Click here

image

Playwright Text Notes

Timeouts (in order of my usage):

1. Navigation Timeout
=====================
`config.use.navigationTimeout` in `playwright.config.ts`
(Default = 0 i.e., no timeout)

// USAGE: Increase navigation timeout to support slow systems (applies to: page.goBack(), page.goForward(), page.goto(url[, options]), page.reload(), page.setContent(), page.waitForNavigation())
page.context().setDefaultNavigationTimeout(180_000); // Default = 0 (or value set in `config.use.navigationTimeout` in `playwright.config.ts`)


2. `Test` and `beforeAll/afterAll` timeout
==========================================
`config.timeout` in `playwright.config.ts`

- For test: `test.setTimeout(180_000)` // DEFAULT = 30_000 (or value set in `config.timeout` in `playwright.config.ts`)
- For `beforeAll/afterAll` timeout: `test.setTimeout(180_000)` (this doesn't seem to be settable via `playwright.config.ts`)

3. Default Timeout
==================
`config.use.actionTimeout` in `playwright.config.ts`
(Default = 0 i.e., no timeout)

browserContext.setDefaultTimeout(180_000)
page.setDefaultTimeout(180_000)
locator.click({ timeout: 180_000 })

Other:

Date Last Updated: 9/April/2023
================================

WAIT UNTIL NETWORK IDLE
========================
await page.waitForURL(homeUrl, {
  waitUntil: 'networkidle',
});


WAIT FOR SOME TIME ON A PAGE
============================
await page.waitForTimeout(20_000);

TO WAIT FOR A SELECTOR
======================
await page.waitForSelector('main');


TO HELP WITH CHECKING URL AT ANY GIVEN TIME:
============================================
console.log(`Current URL-1: ${page.url()}`);
await page.goto(pagePath, { timeout: 180_000 });
console.log(`Current URL-2: ${page.url()}`);

await page.waitForLoadState('networkidle');
console.log(`Current URL-A: ${page.url()}`);

const expectedUrl = `${baseURL}/app/home`;
await page.waitForNavigation({ url: expectedUrl, timeout: 50_000 });
console.log(`Current URL-B: ${page.url()}`);



TO ENABLE UI FOR browser
========================
+  const browser = await chromium.launch({ headless: false });

Also, you can use --headed flag while running the test so that tests run in browser opened (headed/non-headless mode).


THINGS WHICH FIXED THE ISSUE!
================================
// Improve test timeout to support slow systems.
test.setTimeout(180_000); // Default = 10_000 or value set in file `playwright.config.ts` file i.e,. `config.timeout` value.
test.describe(pagePath, () => {...})
// Make browser ready for testing
setupMockResponses(page);


VIEW COMPLETE HTML OF PAGE
==========================
console.log('html?', await page.content());
console.log('innerHTML?', await page.innerHTML('main'));
console.log('innerText?', await page.innerText('main'));


SET NAVIGATION TIMEOUT FOR A SINGLE NAVIGATION
==============================================
await page.goto(str, {
  timeout: 180_000,
  waitUntil: 'load', // "load" |  | "networkidle" | "commit" | 'domcontentloaded' | undefined
});


playwrignt.config.ts
====================
{

  webServer: {
    command: process.env.CI
      ? `npm run serve-build -- -l ${port}`
      : `cross-env NODE_ENV=test PORT=${port} npm run start`,
    port,
    // TIP: Use below to test with `react-scripts` server.
    // Note: You would need to change the PORT value to 3000 as well.
    // reuseExistingServer: true,
  },
}


 DEBUGGING TIP
 ==============
 Use below instruction to pause chromium and then test on your own
 and without automation. Use either of below options:
 1. await page.waitForTimeout(10000 * 1000);
 2. page.pause()

Thats how you run a single file with playwrigt

npm run test:e2e -- e2e/home.test.ts

Please do it ASAP!

Awesome Debugging tip to debug chromium mock-api response issues

image

Playwright mock responses for api calls

Docs: Click here

image

Amazing 2

image

Amazing thing

image