<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Md Moeen Ajaz Khan</title>
    <description>The latest articles on DEV Community by Md Moeen Ajaz Khan (@mdmoeenajazkhan).</description>
    <link>https://dev.to/mdmoeenajazkhan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F346937%2F135c4a51-8fcf-4bbb-8198-455051e9cf5e.png</url>
      <title>DEV Community: Md Moeen Ajaz Khan</title>
      <link>https://dev.to/mdmoeenajazkhan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mdmoeenajazkhan"/>
    <language>en</language>
    <item>
      <title>A Complete Guide To Playwright Assertions</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Thu, 09 Feb 2023 18:39:31 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/a-complete-guide-to-playwright-assertions-1cdb</link>
      <guid>https://dev.to/mdmoeenajazkhan/a-complete-guide-to-playwright-assertions-1cdb</guid>
      <description>&lt;p&gt;Assertions play a crucial role in the test automation process, allowing you to verify if the actual results match the expected outcomes. &lt;/p&gt;

&lt;p&gt;Playwright's assertions address the issue of test flakiness and feature a built-in retry mechanism, utilizing the expect library from Jest for its test assertions.&lt;/p&gt;

&lt;p&gt;Discover the basics of Playwright assertions with this comprehensive &lt;a href="https://www.lambdatest.com/learning-hub/playwright-assertions" rel="noopener noreferrer"&gt;tutorial&lt;/a&gt;. Learn how to use this tool for efficient and effective testing.&lt;/p&gt;

</description>
      <category>vibecoding</category>
    </item>
    <item>
      <title>A Complete Guide to PactumJS</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Tue, 17 Jan 2023 15:04:57 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/a-complete-guide-to-pactumjs-3ea6</link>
      <guid>https://dev.to/mdmoeenajazkhan/a-complete-guide-to-pactumjs-3ea6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you are looking for a JavaScript-based API automation tool that can help in API testing at all the levels in a Test Pyramid then your search will end here, it’s PactumJS an open-source library. Testing backends is made faster and more enjoyable with it. All the necessary ingredients are provided in this library to write better API automation tests easily, and quickly.&lt;/p&gt;

&lt;p&gt;PactumJS is a REST API Testing Tool used to automate e2e, integration, contract &amp;amp; component (or service level) tests. &lt;/p&gt;

&lt;p&gt;There are many HTTP client, HTTP server, and validation packages available in the Node.js ecosystem, but PactumJS is designed specifically for testing. It is inspired by a frisby and pact. The original versions of this library were compatible with them, but later became a separate test tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;Step 1) To start with you need to have Node.js installed on your machine. You can download it directly from the Node.js website and install it on your machine if you are not already using it.&lt;/p&gt;

&lt;p&gt;Once installed check the version:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;node -v&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 2) Download and Install Visual Studio Code (this will help you write formatted code but you can pick any text editor of your choice)&lt;/p&gt;

&lt;p&gt;Step 3) Open Visual Studio Code&lt;/p&gt;

&lt;p&gt;Step 4) Open your integrated Terminal and run the following command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir api-testing-pactumjs-mocha-javascript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 5) Open the directory&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd api-testing-pactumjs-mocha-javascript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 6) Create a new package.json file with default values&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm init -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Your package.json file should be like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "api-testing-pactumjs-mocha-javascript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 7) I will be using Mocha JavaScript test framework for writing the API tests, mochawesome to generate HTML reports and FakerJS, one of the powerful packages to generate dummy data. Install all the required packages&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install --save-dev pactum mocha @faker-js/faker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the installation is complete node_module will be created with all the dependencies installed in it.&lt;/p&gt;

&lt;p&gt;Your package.json file should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "api-testing-pactumjs-mocha-javascript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@faker-js/faker": "^7.6.0",
    "mocha": "^10.2.0",
    "pactum": "^3.3.2"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 8) Create a .gitignore file so that unwanted files are not committed to the repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules
mochawesome-report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Writing Tests
&lt;/h2&gt;

&lt;p&gt;Step 1) Create a folder test-api. &lt;/p&gt;

&lt;p&gt;Step 2) Under this folder create a file getUserTest.js. &lt;/p&gt;

&lt;p&gt;Step 3) Now we can start writing API tests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');

it('should get a response with status code 200', async () =&amp;gt; {
    await spec()
        .get('https://reqres.in/api/users/2')
        .expectStatus(200);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line #1: Import - we are importing the PactumJS library&lt;/p&gt;

&lt;p&gt;Line #3: ‘it’ - it’s an individual test case (Read more about the MochaJS library here: Mocha - the fun, simple, flexible JavaScript test framework )&lt;/p&gt;

&lt;p&gt;Line #4: spec provides an object to performance request with parameters, headers, cookies, body, files etc. It provides the ability to chain methods.&lt;/p&gt;

&lt;p&gt;Line #5: In the example, we are fetching user details by using .get(), it makes an HTTP GET request on the provided endpoint and gives us back the response.&lt;/p&gt;

&lt;p&gt;Line #6: expect - is to validate the response code (i.e. 200) after the request is made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Tests
&lt;/h2&gt;

&lt;p&gt;Step 1) Update the test scripts in package.json file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scripts": {
    "test": "mocha ./test-api/*.js"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2) Now open the terminal and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm test

or

npm run test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a test fails, then this library will print the complete request, response, and gives you the AssertionError in the terminal. This will help you in further debugging the code&lt;/p&gt;

&lt;h2&gt;
  
  
  E2E API Testing Test Strategy
&lt;/h2&gt;

&lt;p&gt;In this article we will be using Reqres - A hosted REST-API ready to respond to your AJAX requests to write end-to-end API tests. Its a hosted REST API and we will be able to verify the responses in real-time, no need of providing any sample data. For easy understanding I have created simple e2e API testing strategy and I have followed the steps given below:&lt;/p&gt;

&lt;p&gt;POST - Create a user by providing data from the JSON file. Also as the real-time approach, I have used the Fakerjs npm package which will give you test data.&lt;/p&gt;

&lt;p&gt;Response Validation - Assert the response by either comparing it with JSON data or by matching it with data stored in the variable.&lt;/p&gt;

&lt;p&gt;GET - Get the user details by using some of the technique of query param, without query param and path param. And finally assert the response for each.&lt;/p&gt;

&lt;p&gt;PUT - Update user attributes for an existing resource and assert the response.&lt;/p&gt;

&lt;p&gt;PATCH - Partially update an existing resource (not all attributes required) and assert the response.&lt;/p&gt;

&lt;p&gt;DELETE - Finally we will delete the user and assert the response code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Base Setup
&lt;/h3&gt;

&lt;p&gt;We will store the environment details separately and use dotenv npm package to store base URI. Lets install the dependency and save it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install dotenv --save-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a .env file in root folder and add below line:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PACTUM_REQUEST_BASE_URL=https://reqres.in&lt;/code&gt;&lt;br&gt;
We will generate the test result in html by using mochawesome to better analyze the test results:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install mochawesome --save-dev&lt;/code&gt;&lt;br&gt;
POST Request using test data from JSON file&lt;br&gt;
We are going to send a POST request by providing test data from json file. Create a folder at root level named test-data and then create a JSON file named user-data.json. &lt;/p&gt;

&lt;p&gt;Since the POST request endpoint &lt;a href="https://reqres.in/api/users" rel="noopener noreferrer"&gt;https://reqres.in/api/users&lt;/a&gt; will accept name and job, we will provide same in JSON.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "name": "Mike Tyson",
    "job": "Boxer"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under test-api folder create a test file named postJsonTest.js. Now, lets write the post request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;
const userData = require('../test-data/user-data.json');

describe('POST API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for post API when test data from JSON file is used', async () =&amp;gt; {
        await spec()
            .post(baseUrl + '/api/users')
            .withJson(userData)
            .expectStatus(201)
            .expectJsonMatch('name', 'Mike Tyson')
            .expectJsonMatch('job', 'Boxer');
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line #1: Import - we are importing the PactumJS library&lt;/p&gt;

&lt;p&gt;Line #2 &amp;amp; 3: We have specified our URI in config file, we need to require it.&lt;/p&gt;

&lt;p&gt;Line #4: We need JSON test date so we need to require it.&lt;/p&gt;

&lt;p&gt;Line #6: ‘describe’ function is used to group tests. It accepts a string to describe the group of tests and a callback function which contains it() tests. &lt;/p&gt;

&lt;p&gt;Line #8: ‘it’ - it’s an individual test case. Note that one describe block can contain multiple it blocks, which means multiple tests.&lt;/p&gt;

&lt;p&gt;Line #9: spec provides an object to performance request with parameters, headers, cookies, body, files etc. It provides the ability to chain methods.&lt;/p&gt;

&lt;p&gt;Line #10: In the example, we are fetching user details by using .get(), it makes an HTTP GET request on the provided endpoint and gives us back the response.&lt;/p&gt;

&lt;p&gt;Line #12: expect - is to validate the response code (i.e. 200) after the request is made.&lt;/p&gt;

&lt;h3&gt;
  
  
  POST Request by using FakerJS package to generate test data
&lt;/h3&gt;

&lt;p&gt;Under test-api folder create a test file named postFakerJsTest.js. We are going to send a post request by calling test data generated by fakerjs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;
const { faker } = require('@faker-js/faker');

const randomName = faker.name.firstName();
const randomJob = faker.name.jobTitle();

describe('POST API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for post API when test data generated using fakerjs', async () =&amp;gt; {
        await spec()
            .post(baseUrl + '/api/users')
            .withJson({
                "name": randomName,
                "job": randomJob
            })
            .expectStatus(201)
            .expectJsonMatch('name', randomName)
            .expectJsonMatch('job', randomJob);
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line #4: Import - we are importing the FakerJS library&lt;/p&gt;

&lt;p&gt;Line #6 &amp;amp; 7: We are generating  firstName and jobTitle using FakerJS and storing them into a const.&lt;/p&gt;

&lt;p&gt;Line #14: withJson we are passing the const name and job.&lt;/p&gt;

&lt;p&gt;Line #19 &amp;amp; 20: We are verifying name and job in response with const generated by FakerJS library.&lt;/p&gt;

&lt;h3&gt;
  
  
  GET Request
&lt;/h3&gt;

&lt;p&gt;Under test-api folder create a test file named getSingleUserTest.js. We are going to send a GET request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;

describe('GET API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for single user GET API', async () =&amp;gt; {
        await spec()
            .get(baseUrl + '/api/users/2')
            .expectStatus(200)
            .expectJsonMatch('data.id', 2)
            .expectJsonMatch('data.first_name', 'Janet');
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  GET Request using query param
&lt;/h3&gt;

&lt;p&gt;Under test-api folder create a test file named getSingleUserQueryParamTest.js. &lt;/p&gt;

&lt;p&gt;We are going to send a GET request with query parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;

describe('GET API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for single user GET API using query param', async () =&amp;gt; {
        await spec()
            .get(baseUrl + '/api/users')
            .withQueryParams({ page: '2' })
            .expectStatus(200)
            .expectJsonMatch('page', 2)
            .expectJsonMatch('data[0].id', 7)
            .expectJsonMatch('data[0].first_name', 'Michael');
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above example we are passing query params and it used as withQueryParam(key, value). This will help us to pass query params with the request.&lt;/p&gt;

&lt;h3&gt;
  
  
  PUT Request
&lt;/h3&gt;

&lt;p&gt;Create a file named putTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;
const updatedUserData = require('../test-data/updated-user-data.json');

describe('PUT API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for PUT API', async () =&amp;gt; {
        await spec()
            .put(baseUrl + '/api/users/2')
            .withJson(updatedUserData)
            .expectStatus(200)
            .expectJsonMatch('name', 'Floyd Joy Mayweather Jr.')
            .expectJsonMatch('job', 'Boxer Two');
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PATCH Request
&lt;/h3&gt;

&lt;p&gt;Create a file named patchTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;
const minorUpdatedUserData = require('../test-data/minor-updated-user-data.json');

describe('PATCH API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for PATCH API', async () =&amp;gt; {
        await spec()
            .put(baseUrl + '/api/users/2')
            .withJson(minorUpdatedUserData)
            .expectStatus(200)
            .expectJsonMatch('job', 'Boxer');
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DELETE Request
&lt;/h3&gt;

&lt;p&gt;Create a file named deleteTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { spec } = require('pactum');
require('dotenv').config()
const baseUrl = process.env.PACTUM_REQUEST_BASE_URL;

describe('DELETE API tests using PactumJS', () =&amp;gt; {

    it('should successfully pass the test for DELETE API', async () =&amp;gt; {
        await spec()
            .delete(baseUrl + '/api/users/2')
            .expectStatus(204);
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test Report
&lt;/h3&gt;

&lt;p&gt;We are going use mochawesome package to generate html report and it will be placed under root directory with name mochawesome-report&lt;/p&gt;

&lt;p&gt;Step 1) Update the test scripts in package.json file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scripts": {
    "test": "mocha ./test-api/*.js --reporter spec --reporter mochawesome --timeout 5000"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2) Now open the terminal and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm test

or

npm run test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While writing this article I have tried to use all the basic operations done from scratch to set up an API automation framework, project initiation, set common components, explained requests: POST, GET, PUT, PATCH and DELETE requests, and finally how we can generate mochawesome report (Checkout my example code to generate Allure report). &lt;/p&gt;

&lt;p&gt;However, there are several advanced features which can be found in PactumJS Guide, that you may want to try.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Repository
&lt;/h3&gt;

&lt;p&gt;All the code written above can be found on &lt;a href="https://github.com/codewithmmak/api-testing-pactumjs-mocha-javascript" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have any suggestions or found a bug? &lt;a href="https://github.com/codewithmmak/api-testing-pactumjs-mocha-javascript" rel="noopener noreferrer"&gt;Fork this project to help make this even better&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Star the repo and follow me to get the latest updates&lt;/p&gt;

&lt;h3&gt;
  
  
  What Do You Think?
&lt;/h3&gt;

&lt;p&gt;Did this work for you?&lt;/p&gt;

&lt;p&gt;Could I have done something better?&lt;/p&gt;

&lt;p&gt;Have I missed something?&lt;/p&gt;

&lt;p&gt;Please share your thoughts and let me know if there are particular things that you would enjoy reading further.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>UI Automation Testing Demo Site</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Fri, 30 Dec 2022 18:19:59 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/ui-automation-testing-demo-site-4gid</link>
      <guid>https://dev.to/mdmoeenajazkhan/ui-automation-testing-demo-site-4gid</guid>
      <description>&lt;p&gt;While learning Web UI testing we are always searching for Demo sites that try to mimic real-world scenarios. Over time, several people in the community have developed these sites with different features and provided good resources and documentation about each usage.&lt;/p&gt;

&lt;p&gt;In this article I will be listing out all the good resources which you can make use of, and if you find I have missed anything then please comment and I will update the list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automation Book Store: &lt;a href="https://automationbookstore.dev/" rel="noopener noreferrer"&gt;https://automationbookstore.dev/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Automation Test Store: &lt;a href="https://automationteststore.com/" rel="noopener noreferrer"&gt;https://automationteststore.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DemoBlaze: &lt;a href="https://www.demoblaze.com/" rel="noopener noreferrer"&gt;https://www.demoblaze.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DemoQA: &lt;a href="https://demoqa.com/" rel="noopener noreferrer"&gt;https://demoqa.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ParaBank: &lt;a href="https://parabank.parasoft.com/parabank/index.htm" rel="noopener noreferrer"&gt;https://parabank.parasoft.com/parabank/index.htm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LetCode: &lt;a href="https://letcode.in/test" rel="noopener noreferrer"&gt;https://letcode.in/test&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SelectorHub: &lt;a href="https://selectorshub.com/xpath-practice-page/" rel="noopener noreferrer"&gt;https://selectorshub.com/xpath-practice-page/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Selenium Test Pages: &lt;a href="https://testpages.herokuapp.com/styled/index.html" rel="noopener noreferrer"&gt;https://testpages.herokuapp.com/styled/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Swag Labs: &lt;a href="https://www.saucedemo.com/" rel="noopener noreferrer"&gt;https://www.saucedemo.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Internet: &lt;a href="https://the-internet.herokuapp.com/" rel="noopener noreferrer"&gt;https://the-internet.herokuapp.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;UI Test Automation Playground: &lt;a href="http://uitestingplayground.com/" rel="noopener noreferrer"&gt;http://uitestingplayground.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;XYZ Bank: &lt;a href="https://www.globalsqa.com/angularJs-protractor/BankingProject/#/login" rel="noopener noreferrer"&gt;https://www.globalsqa.com/angularJs-protractor/BankingProject/#/login&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Did this work for you?&lt;br&gt;
Could I have done something better?&lt;br&gt;
Have I missed something?&lt;br&gt;
Please share your thoughts and let me know if there are particular things that you would enjoy reading further.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>API Testing Demo Site</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sun, 25 Dec 2022 15:00:00 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/api-testing-demo-site-1ef5</link>
      <guid>https://dev.to/mdmoeenajazkhan/api-testing-demo-site-1ef5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;While learning API testing we are always searching for API Testing Demo sites that try to mimic real-world scenarios. Over time, several people in the community have developed these APIs and provided good resources and documentation about each end-point usage.&lt;br&gt;
In this article I will be listing out all the good resources which you can make use of, and if you find I have missed anything then please comment and I will update the list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;restful-booker: &lt;a href="https://restful-booker.herokuapp.com/apidoc/index.html"&gt;https://restful-booker.herokuapp.com/apidoc/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ReqRes: &lt;a href="https://reqres.in/"&gt;https://reqres.in/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;httpbin: &lt;a href="http://httpbin.org/"&gt;http://httpbin.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;{JSON} Placeholder: &lt;a href="https://jsonplaceholder.typicode.com/"&gt;https://jsonplaceholder.typicode.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FakeRESTApi.Web V1: &lt;a href="https://fakerestapi.azurewebsites.net/index.html"&gt;https://fakerestapi.azurewebsites.net/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Swagger Petstore: &lt;a href="https://petstore.swagger.io/"&gt;https://petstore.swagger.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;This site list many other Free API: &lt;a href="https://apipheny.io/free-api/"&gt;https://apipheny.io/free-api/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Did this work for you?&lt;br&gt;
Could I have done something better?&lt;br&gt;
Have I missed something?&lt;br&gt;
Please share your thoughts and let me know if there are particular things that you would enjoy reading further.&lt;br&gt;
Cheers!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>api</category>
      <category>restapi</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>API Automation using SuperTest Mocha ChaiJS and FakerJS</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sun, 11 Dec 2022 14:30:32 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/api-automation-using-supertest-mocha-chaijs-and-fakerjs-1bc7</link>
      <guid>https://dev.to/mdmoeenajazkhan/api-automation-using-supertest-mocha-chaijs-and-fakerjs-1bc7</guid>
      <description>&lt;p&gt;I have been using JavaScript for UI automation and am in love with it for many reasons, but one of the reasons that always helps me is when I Google any library/package with just npm word, there are many solutions available, which makes life so much easier. The other benefit is saving time as well.&lt;/p&gt;

&lt;p&gt;It is possible to automate API tests using several tools available on the market. It is up to you to choose which tool is most appropriate for your needs.&lt;/p&gt;

&lt;p&gt;The first thing I did was to explore and try to find some library/package on npm which I could use to test APIs. In the end, I found SuperTest to be the answer to my search. Using this tool may be the best solution for scaling your automation framework with additional capabilities. It’s easy to use and allows you to easily integrate it into existing automation frameworks.&lt;/p&gt;

&lt;p&gt;In this article, we will be using SuperTest, Mocha, and Chai. We will use FakerJS to generate the test data and JavaScript for scripting. Let’s look into them one by one.&lt;/p&gt;

&lt;p&gt;SuperTest&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SuperTest module is to provide a high-level abstraction for testing HTTP, while still allowing you to drop down to the lower-level API provided by superagent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mocha&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Chai&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Faker&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Generate massive amounts of fake (but realistic) data for testing and development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Getting Started&lt;br&gt;
Step 1) To start with you need to have Node.js installed on your machine. You can download it directly from the Node.js website and install it on your machine if you are not already using it.&lt;br&gt;
Once installed check the version&lt;br&gt;
&lt;code&gt;node -v&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 2) Install Visual Studio Code (this will help you write formatted code but you can pick any text editor of your choice)&lt;/p&gt;

&lt;p&gt;Step 3) Open Visual Studio Code&lt;/p&gt;

&lt;p&gt;Step 4) Open your integrated Terminal and run the following command&lt;br&gt;
&lt;code&gt;mkdir supertest-mocha-chai-javascript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 5) Open the directory&lt;br&gt;
&lt;code&gt;cd supertest-mocha-chai-javascript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step 6) Create a new package.json file&lt;br&gt;
&lt;code&gt;npm init -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Your package.json file should be like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "supertest-mocha-chai-javascript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 7) I will be using Mocha JavaScript test framework for writing the API tests, ChaiJS for assertions, and mochawesome to generate HTML reports. Also, I will use Faker, one of the powerful packages to generate test dummy data. Install all the required packages&lt;br&gt;
&lt;code&gt;npm install --save-dev supertest mocha chai mochawesome @faker-js/faker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the installation is complete node_module will be created with all the dependencies installed in it.&lt;/p&gt;

&lt;p&gt;Your package.json file should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "supertest-mocha-chai-javascript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "keywords": [
    "supertest",
    "mocha",
    "chai",
    "mochawesome"
  ],
  "author": "Code with MMAK",
  "license": "ISC",
  "devDependencies": {
    "@faker-js/faker": "^7.6.0",
    "chai": "^4.3.7",
    "mocha": "^10.1.0",
    "mochawesome": "^7.1.3",
    "supertest": "^6.3.1"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 8) Create a .gitignore file so that unwanted files are not committed to the repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules/
mochawesome-report/
test-results/
downloads/*
log/*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can start writing your API tests.&lt;/p&gt;

&lt;p&gt;Following is the list of APIs on the Reqres – A hosted REST-API ready to respond to your AJAX requests website which I have used to write end-to-end tests.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a user&lt;/li&gt;
&lt;li&gt;Get the user details&lt;/li&gt;
&lt;li&gt;Updated user details&lt;/li&gt;
&lt;li&gt;Update the user with partial details&lt;/li&gt;
&lt;li&gt;Delete user&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the end-to-end automation testing strategy, I have followed the steps given below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a user with when the date is supplied from the JSON file. Also as the real-time approach, I have used the Fakerjs npm package which will give you dummy test data, which looks real.&lt;/li&gt;
&lt;li&gt;Assert the response by either comparing it with JSON data or by matching it with data stored in the variable.&lt;/li&gt;
&lt;li&gt;Get the user details by query param, without query param and path param. And assert the response for each.&lt;/li&gt;
&lt;li&gt;Updated user full details and assert the response&lt;/li&gt;
&lt;li&gt;Update user practical details and assert the response.&lt;/li&gt;
&lt;li&gt;Finally, delete the user and assert the response.
It’s time to code !!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Base Setup
&lt;/h2&gt;

&lt;p&gt;To being with we will start implementing the base so that it can be reused and we are not going to write unnecessary repeated code.&lt;/p&gt;

&lt;p&gt;Create a folder and name it config inside this folder create a JSON file named reqres.config.json file. here we will keep our base URL, which is the test URL&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    "baseUrl": "&lt;a href="https://reqres.in"&gt;https://reqres.in&lt;/a&gt;"&lt;br&gt;
}&lt;/p&gt;
&lt;h2&gt;
  
  
  POST Request
&lt;/h2&gt;

&lt;p&gt;To being with create a folder and name it test-reqres-api and then create a test file named postTest.js.&lt;/p&gt;

&lt;p&gt;We are going to create a post request by using data stored in JSON, with this we will be able to create a user.&lt;/p&gt;

&lt;p&gt;Create a folder named test-data and then create a JSON file named user-data.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "name": "Code with MMAK",
    "job": "Testing"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now start writing a line of code to import the supertest library and expect the library from chai.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const reqres = require('../config/reqres.config.json');
const userData = require('../test-data/user-data.json');

describe('POST API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for POST api when test data from json file is used', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .post('/api/users')
            .send(userData)
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(201);
                expect(res.body.name).to.be.equal('Code with MMAK');
                expect(res.body.job).to.be.equal('Testing');
                expect(res.body.id).not.to.be.null;
                expect(res.body.createdAt).not.to.be.null;
                done();
            });
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here ‘describe’ means test scenario and ‘it’ means individual test cases&lt;/p&gt;

&lt;p&gt;post – is the request type&lt;/p&gt;

&lt;p&gt;send – is to send the data with the post request&lt;/p&gt;

&lt;p&gt;set – is to set the header of the request&lt;/p&gt;

&lt;p&gt;end – is to say the request is ended and we will perform the assertion&lt;/p&gt;

&lt;p&gt;expect – is to validate the response&lt;/p&gt;

&lt;p&gt;done – is to say our request is completed and the test is done.&lt;/p&gt;

&lt;p&gt;Let’s run the test:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mocha ./test-reqres-api --reporter spec --reporter mochawesome --timeout 5000&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dummy data using fakerjs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const { faker } = require('@faker-js/faker');
const reqres = require('../config/reqres.config.json');

const randomName = faker.name.findName();
const randomJob = faker.name.jobTitle();

describe('POST API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for POST api when fakerjs dummy data is used', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .post('/api/users')
            .send({
                "name": randomName,
                "job": randomJob
            })
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(201);
                expect(res.body.name).to.be.equal(randomName);
                expect(res.body.job).to.be.equal(randomJob);
                expect(res.body.id).not.to.be.null;
                expect(res.body.createdAt).not.to.be.null;
                done();
            });
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GET Request
&lt;/h2&gt;

&lt;p&gt;Create a file named getTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const reqres = require('../config/reqres.config.json');

describe('GET API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for get api without query param', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .get('/api/users/2')
            // .set('Accept', 'application/json')
            // .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(200);
                expect(res.body.data.id).to.be.equal(2);
                expect(res.body.data.first_name).to.be.equal('Janet');
                done();
            });
    });
    it('should successfully pass the test for get api with query param', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .get('/api/users')
            .query({ page: '2' })
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(200);
                expect(res.body.page).to.be.equal(2);
                expect(res.body.data[0].id).to.be.equal(7);
                expect(res.body.data[0].first_name).to.be.equal('Michael');
                done();
            });
    });

});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PUT Request
&lt;/h2&gt;

&lt;p&gt;Create a file named putTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const reqres = require('../config/reqres.config.json');

describe('PUT API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for post api', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .put('/api/users/2')
            .send({ name: 'Andy', job: 'Admin' })
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(200);
                expect(res.body.name).to.be.equal('Andy');
                expect(res.body.job).to.be.equal('Admin');
                expect(res.body.updatedAt).not.to.be.null;
                done();
            });
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PATCH Request
&lt;/h2&gt;

&lt;p&gt;Create a file named patchTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const reqres = require('../config/reqres.config.json');

describe('PATCH API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for patch request', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .patch('/api/users/2')
            .send({ name: 'Mike', job: 'Test Lead' })
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(200);
                expect(res.body.name).to.be.equal('Mike');
                expect(res.body.job).to.be.equal('Test Lead');
                expect(res.body.updatedAt).not.to.be.null;
                done();
            });
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  DELETE Request
&lt;/h2&gt;

&lt;p&gt;Create a file named deleteTest.js and write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const request = require('supertest');
const expect = require('chai').expect;
const reqres = require('../config/reqres.config.json');

describe('DELETE API tests using SuperTest', () =&amp;gt; {

    it('should successfully pass the test for delete request', (done) =&amp;gt; {
        request(reqres.baseUrl)
            .delete('/api/users/2')
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/json')
            .end(function (err, res) {
                expect(res.statusCode).to.be.equal(204);
                done();
            });
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Some Tips
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you want to run a single test then use ‘it.only’. Similarly, if you want to run a single test scenario then use ‘describe.only’.&lt;/li&gt;
&lt;li&gt;If you want to skip any test in a test suite then use ‘it.skip’. Similarly, if you want to skip the test scenario then use ‘describe.skip.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Code Repository
&lt;/h2&gt;

&lt;p&gt;The sample framework is hosted on &lt;a href="https://github.com/codewithmmak/supertest-mocha-chai-javascript"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have a suggestion or found a bug? &lt;a href="https://github.com/codewithmmak/supertest-mocha-chai-javascript"&gt;Fork this project to help make this even better&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/codewithmmak/supertest-mocha-chai-javascript"&gt;Star the repo and follow me to get the latest updates&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Did this work for you?&lt;br&gt;
Could I have done something better?&lt;br&gt;
Have I missed something?&lt;br&gt;
Please share your thoughts and let me know if there are particular things that you would enjoy reading further.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>api</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>supertest</category>
    </item>
    <item>
      <title>Data Masking</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Thu, 24 Nov 2022 14:04:27 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/data-masking-2fg2</link>
      <guid>https://dev.to/mdmoeenajazkhan/data-masking-2fg2</guid>
      <description>&lt;p&gt;What is Data Masking?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Masking is a process that is used to hide data.&lt;/li&gt;
&lt;li&gt;In Data Masking, real data is masked or hidden by replacing them with random characters.&lt;/li&gt;
&lt;li&gt;It protects confidential information from those who don’t have the authorization to see it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why Data Masking Is Required?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Masking shields PII data and other confidential information of the organization.&lt;/li&gt;
&lt;li&gt;It secures the file transferring process from one location to another.&lt;/li&gt;
&lt;li&gt;It also helps to secure application development, testing, or CRM applications.&lt;/li&gt;
&lt;li&gt;It allows users to access dummy data for testing or training purposes.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jng9k90fy3ejjm4it7m.png" alt="Image description" width="800" height="551"&gt;
Image Source: Wallarm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data Masking Process&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vm3z3rrbxvoroasp9i1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vm3z3rrbxvoroasp9i1.png" alt="Image description" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data Masking Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;K2View Data Masking&lt;/li&gt;
&lt;li&gt;Delphix&lt;/li&gt;
&lt;li&gt;Oracle Data Masking and Subsetting&lt;/li&gt;
&lt;li&gt;Accutive Data Discovery &amp;amp; Masking&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>opensource</category>
    </item>
    <item>
      <title>WHY IS COMPATIBILITY TESTING MUCH NEEDED FOR CUSTOMER-FOCUSED TESTING?</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sun, 20 Nov 2022 11:23:23 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/why-is-compatibility-testing-much-needed-for-customer-focused-testing-2nfp</link>
      <guid>https://dev.to/mdmoeenajazkhan/why-is-compatibility-testing-much-needed-for-customer-focused-testing-2nfp</guid>
      <description>&lt;p&gt;WHAT IS COMPATIBILITY?&lt;br&gt;
Compatibility is the ability to check if two entities can work together without actually modifying or altering them.&lt;/p&gt;

&lt;p&gt;Let’s see some of the real-life examples to better understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if my feet size is 10 UK, can I wear 9 UK size shoes?&lt;/li&gt;
&lt;li&gt;if Windows 11 requires a minimum of 4 GB RAM, can I still install it on a lower RAM configuration?&lt;/li&gt;
&lt;li&gt;can I install a Mac installer on a Windows machine?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WHAT IS COMPATIBILITY TESTING?&lt;br&gt;
Compatibility testing is a type of Non-functional testing.&lt;/p&gt;

&lt;p&gt;It majorly focuses on the support or compatibility of applications to ensure there is no difference in behaviour, look and feel etc. It gives great flexibility to my customer to use the application in different modes.&lt;/p&gt;

&lt;p&gt;There are several analytics tools which can give you a clear idea of how the application is used and where your target audience is located and how they are accessing your application etc. It helps in serving customer needs.&lt;/p&gt;

&lt;p&gt;TYPE OF COMPATIBILITY TESTING&lt;br&gt;
The following are the type of compatibility testing types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browsers: It checks the compatibility of test applications on different browser combinations such as Google Chrome, Mozilla Firefox, Safari, Internet Explorer, Microsoft Edge, Opera etc.&lt;/li&gt;
&lt;li&gt;Devices: It checks the compatibility of your software with different devices like different ports like USB, Printers, Scanners, Other media, and Bluetooth.&lt;/li&gt;
&lt;li&gt;Operating systems: It checks your software to be compatible with different Operating Systems like Windows, Mac OS, Linux/Unix etc.&lt;/li&gt;
&lt;li&gt;Network: It checks your software to be compatible with different network speeds and bandwidth.&lt;/li&gt;
&lt;li&gt;Mobile: It checks your software is compatible with different mobile platforms like Android, iOS, Trizon OS etc.&lt;/li&gt;
&lt;li&gt;Version: It checks your software is compatible with a different version of the software or even a hardware combination.&lt;/li&gt;
&lt;li&gt;Software: It checks your software is compatible with other software and doesn’t cause hindrances for each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TOOLS FOR COMPATIBILITY TESTING&lt;br&gt;
Earlier when there was no cloud solution at that time compatibility testing used to be done by setting up devices, and platform with different OS and browser combination, and later point of time some of the cost of the setting of physical machines were taken care of by Virtual Machines. Thanks to the cloud solution which takes care of setting up an environment for you. You just need to select the different combinations of OS and browser combinations and you are good to start testing just like tossing a coin in the air.&lt;/p&gt;

&lt;p&gt;Some of the most commonly used compatibility testing tools are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.lambdatest.com/intl/en-in"&gt;LambdaTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.browserstack.com/"&gt;BrowserStack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://saucelabs.com/"&gt;SauceLabs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/device-farm/"&gt;AWS Device Farm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;COMPATIBILITY TESTING MATRIX&lt;br&gt;
While doing customer-focus testing, it is required to have a list of browsers and devices which is being anticipated to be most used by the customer and compatibility of developed applications should be maintained across the different combinations.&lt;/p&gt;

&lt;p&gt;The table below represents a sample browser compatibility testing matrix.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O1lSAzcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5be7a5919qmk8w3hvsju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O1lSAzcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5be7a5919qmk8w3hvsju.png" alt="Image description" width="880" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;COMPATIBILITY TESTING APPROACH&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gathering Functional &amp;amp; Non-Functional Requirement&lt;/li&gt;
&lt;li&gt;Ask for a compatibility testing matrix with this you will understand customer focus. In some cases, it can work the other way round and you can propose the compatibility testing matrix with all the combinations you can think of.&lt;/li&gt;
&lt;li&gt;Ask for a test bed if it’s available or else you can suggest a cloud solution like LambdaTest.&lt;/li&gt;
&lt;li&gt;Analyse the requirement and prepare the test scenarios.&lt;/li&gt;
&lt;li&gt;Perform functional testing and make sure the application is stable and the majority of bugs are resolved.&lt;/li&gt;
&lt;li&gt;Perform non-functional testing which is compatibility testing on the configuration which is agreed upon with the client.&lt;/li&gt;
&lt;li&gt;Prepare a Compatibility testing report which clearly states the bugs which occurred on a different configuration.&lt;/li&gt;
&lt;li&gt;Once all the bugs found in compatibility testing once fixed and verified, make sure to run another round of compatibility testing to ensure there are no regression bugs.&lt;/li&gt;
&lt;li&gt;Finally, make sure to sign off and produce the test closure report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;COMMON COMPATIBILITY TESTING DEFECTS&lt;br&gt;
Even though modern development frameworks these days claim to be completely responsive on all devices but still many times bugs slip through the cracks.&lt;/p&gt;

&lt;p&gt;The compatibility testing bugs are generally user interface issues, which are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web elements alignment issues.&lt;/li&gt;
&lt;li&gt;Web elements overlapping issues.&lt;/li&gt;
&lt;li&gt;Font size issues.&lt;/li&gt;
&lt;li&gt;Broken frames or rendering issues.&lt;/li&gt;
&lt;li&gt;Look and feel issues.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>compatibilitytest</category>
      <category>lambdatest</category>
      <category>beginners</category>
      <category>qa</category>
    </item>
    <item>
      <title>E-COMMERCE GROWTH AND HEADLESS COMMERCE OVERVIEW</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sat, 19 Nov 2022 13:24:06 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/e-commerce-growth-and-headless-commerce-overview-2jlf</link>
      <guid>https://dev.to/mdmoeenajazkhan/e-commerce-growth-and-headless-commerce-overview-2jlf</guid>
      <description>&lt;p&gt;WHY E-COMMERCE GROWTH CAN STAY STRONGER FOR LONGER&lt;br&gt;
An article “Global E-Commerce Growth Forecast 2022” by Morgan Stanley says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the initial days of COVID-19 e-commerce business surged and very soon it was picked up as all the shopping was done Online as retail locations were closed due to the virus spread.&lt;/li&gt;
&lt;li&gt;Overall retail sales in 2019 were 19% and it was picked up to 21% in the year 2021. It is roughly estimated that 22% of sales would be in 2022.&lt;/li&gt;
&lt;li&gt;It further states that even after COVID e-commerce market will grow in long term and could see a spike from $3.3 trillion today to $5.4 trillion in 2026.&lt;/li&gt;
&lt;li&gt;User purchase behaviour has changed over this period and it’s contributing to the growth and marketplace expansion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E-commerce as a percentage of retail sales continues to grow across regions.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fREDMNwm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdam8rvnt8ts87n3p0oa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fREDMNwm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdam8rvnt8ts87n3p0oa.png" alt="Image description" width="744" height="529"&gt;&lt;/a&gt;&lt;br&gt;
Source: Euromonitor, National Data Sources, Morgan Stanley Research estimates&lt;/p&gt;

&lt;p&gt;WHAT IS HEADLESS COMMERCE?&lt;br&gt;
Now that we know how the e-Commerce market is going to grow over a period of time, it’s time to discuss Headless Commerce.&lt;/p&gt;

&lt;p&gt;Headless commerce is an e-commerce architecture which decouples the front end from the backend. In other words, it decouples the customer-facing front-end application of eCommerce from the backend system’s commerce functions and business logic.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m8DvKIj---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vzf463ozaule29paevb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m8DvKIj---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vzf463ozaule29paevb.png" alt="Image description" width="880" height="682"&gt;&lt;/a&gt;&lt;br&gt;
Source: ElasticPath&lt;/p&gt;

&lt;p&gt;WHAT ARE THE BENEFITS OF HEADLESS COMMERCE?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is less error-prone since the front-end and back-end are decoupled.&lt;/li&gt;
&lt;li&gt;It will eventually help in causing less impact on each other and changes can be deployed smoothly.&lt;/li&gt;
&lt;li&gt;It helps in updating or editing front-end and back-end systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;COUPLED E-COMMERCE VS HEADLESS E-COMMERCE&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oeLU9iHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nh15eh1gu3nmrixobqlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oeLU9iHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nh15eh1gu3nmrixobqlw.png" alt="Image description" width="640" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HEADLESS COMMERCE PROVIDERS&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adobe Commerce (formerly Magento Commerce)&lt;/li&gt;
&lt;li&gt;Shopify Plus&lt;/li&gt;
&lt;li&gt;BigCommerce Enterprise&lt;/li&gt;
&lt;li&gt;CommerceTools&lt;/li&gt;
&lt;li&gt;Elastic Path&lt;/li&gt;
&lt;li&gt;Salesforce Commerce Cloud&lt;/li&gt;
&lt;li&gt;SAP&lt;/li&gt;
&lt;li&gt;OroCommerce Enterprise&lt;/li&gt;
&lt;li&gt;Spryker&lt;/li&gt;
&lt;li&gt;Swell&lt;/li&gt;
&lt;li&gt;SpreeCommerce&lt;/li&gt;
&lt;li&gt;Saleor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HEADLESS COMMERCE NEEDS EXTENSIVE LEVELS OF TESTING FOR A BETTER CUSTOMER EXPERIENCE&lt;br&gt;
Headless Commerce communicate or interact with many systems at various level of technology and it requires extensive levels of testing which can cover all aspect.&lt;/p&gt;

&lt;p&gt;Some of these layers include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Component Level Testing&lt;/li&gt;
&lt;li&gt;Application Programming Interfaces (APIs) Testing&lt;/li&gt;
&lt;li&gt;Integration Testing&lt;/li&gt;
&lt;li&gt;Database Testing&lt;/li&gt;
&lt;li&gt;User interfaces (UI) or presentation layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Typically testing can start from the Component level and APIs can be tested for each of these components. Reflect of data can be tested on UI, for example, if a payload value is changed how it reflects on the front-end if the content is changed from CMS then how it reflects on the front-end.&lt;/p&gt;

&lt;p&gt;Covering all the aspects of the application can be challenging and requires an extensive amount of planning and execution to incorporate the rapid changes throughout the software life cycle.&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>headlesscms</category>
      <category>beginners</category>
      <category>qa</category>
    </item>
    <item>
      <title>Visual Studio Code For Absolute Beginner</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sun, 10 Jul 2022 18:34:22 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/visual-studio-code-for-absolute-beginner-21mm</link>
      <guid>https://dev.to/mdmoeenajazkhan/visual-studio-code-for-absolute-beginner-21mm</guid>
      <description>&lt;p&gt;In this course, I’ll walk you step-by-step about Visual Studio Code and some of its extensions.&lt;/p&gt;

&lt;p&gt;The complete playlist of Visual Studio Code For Absolute Beginner gives you basic setup knowledge to advance usage of the tool.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0dwxdpjH88df2tVV39RaMdT" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--9xWRDw5q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/h6NGKBX7rFM/hqdefault.jpg%3Fsqp%3D-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ%3D%3D%26rs%3DAOn4CLCx882I79-vtkJWENzjvJgK75JRHA%26days_since_epoch%3D19355" height="94" class="m-0" width="168"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0dwxdpjH88df2tVV39RaMdT" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fG46Mg8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.youtube.com/s/desktop/451d4225/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;We will be covering the following topics:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Visual Studio Code and Installation - &lt;a href="https://youtu.be/h6NGKBX7rFM"&gt;https://youtu.be/h6NGKBX7rFM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Format On Save in Visual Studio Code - &lt;a href="https://youtu.be/R7Uw8BHL2RQ"&gt;https://youtu.be/R7Uw8BHL2RQ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Git Integration in Visual Studio Code - &lt;a href="https://youtu.be/fP2fFG2Ck2o"&gt;https://youtu.be/fP2fFG2Ck2o&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitLens Extension for Visual Studio Code - &lt;a href="https://youtu.be/uQB7eGncFEA"&gt;https://youtu.be/uQB7eGncFEA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code Icons Extension for Visual Studio Code - &lt;a href="https://youtu.be/23cU2wq87vw"&gt;https://youtu.be/23cU2wq87vw&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👍 You can follow my content here as well -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codewithmmak.com/"&gt;Website&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/codewithmmak"&gt;GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/company/codewithmmak"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/codewithmmak/"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/codewithmmak"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.instagram.com/codewithmmak/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;I love coffees! And, if this post helped you out and you would like to support my work, you can do that by clicking on the button below and buying me a cup of coffee -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/codewithmmak"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also support me by liking and sharing this content.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>git</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Git &amp; GitHub Tutorial For Beginners</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Sat, 09 Jul 2022 19:17:47 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/git-github-tutorial-for-beginners-2i2i</link>
      <guid>https://dev.to/mdmoeenajazkhan/git-github-tutorial-for-beginners-2i2i</guid>
      <description>&lt;p&gt;In this course, I’ll walk you step-by-step about Git and GitHub.&lt;/p&gt;

&lt;p&gt;The complete playlist of Git &amp;amp; GitHub Tutorial For Beginners gives you basic setup knowledge to advance usage of the tool.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0eGFoJzD38ZFEh2mnKRXbbr" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fAP3caNo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/xSsqGDjj9uM/hqdefault.jpg%3Fsqp%3D-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ%3D%3D%26rs%3DAOn4CLDsVeJVZ9JEGofhTctDMffuixxWjA%26days_since_epoch%3D19355" height="94" class="m-0" width="168"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0eGFoJzD38ZFEh2mnKRXbbr" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          #1 What is Git | How to download Git | How to install Git - https://www.youtube.com/watch?v=xSsqGDjj9uM #2 How to check Git Version | How to set Git Username...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fG46Mg8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.youtube.com/s/desktop/451d4225/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;We will be covering the following topics:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Git | How to download Git | How to install Git - &lt;a href="https://www.youtube.com/watch?v=xSsqGDjj9uM"&gt;https://www.youtube.com/watch?v=xSsqGDjj9uM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to check Git Version | How to set Git Username and Email - &lt;a href="https://youtu.be/8Y8bzAdq9zk"&gt;https://youtu.be/8Y8bzAdq9zk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to initialize Git repository - &lt;a href="https://youtu.be/gyMUvcZyUUQ"&gt;https://youtu.be/gyMUvcZyUUQ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to checkout code - &lt;a href="https://youtu.be/SgTcNle4uBs"&gt;https://youtu.be/SgTcNle4uBs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to check git log - &lt;a href="https://youtu.be/d5NV41qOeCU"&gt;https://youtu.be/d5NV41qOeCU&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to check git diff - &lt;a href="https://youtu.be/GSIPNtUlkdU"&gt;https://youtu.be/GSIPNtUlkdU&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to remove the file from Git - &lt;a href="https://youtu.be/ctppTTN_o-U"&gt;https://youtu.be/ctppTTN_o-U&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to add .gitignore file - &lt;a href="https://youtu.be/bywxx6eqz8g"&gt;https://youtu.be/bywxx6eqz8g&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to create git branch and merge code - &lt;a href="https://youtu.be/CkiWWz-2NQg"&gt;https://youtu.be/CkiWWz-2NQg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to delete a git branch - &lt;a href="https://youtu.be/u3yuQyH1m5U"&gt;https://youtu.be/u3yuQyH1m5U&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Introduction to GitHub  - &lt;a href="https://youtu.be/dcutaVfIWCc"&gt;https://youtu.be/dcutaVfIWCc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Push an existing repository from the command line to GitHub - &lt;a href="https://youtu.be/w1eKbfvAu0I"&gt;https://youtu.be/w1eKbfvAu0I&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Git Fetch and Git Pull Command - &lt;a href="https://youtu.be/i78nYE9NAyk"&gt;https://youtu.be/i78nYE9NAyk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How to clone Git Repository - &lt;a href="https://youtu.be/hq1CNUioSA8"&gt;https://youtu.be/hq1CNUioSA8&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👍 You can follow my content here as well -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codewithmmak.com/"&gt;Website&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/codewithmmak"&gt;GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/company/codewithmmak"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/codewithmmak/"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/codewithmmak"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.instagram.com/codewithmmak/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;I love coffees! And, if this post helped you out and you would like to support my work, you can do that by clicking on the button below and buying me a cup of coffee -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/codewithmmak"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also support me by liking and sharing this content.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>vscode</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to do Test Automation using Playwright and JavaScript?</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Thu, 07 Jul 2022 16:50:13 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/how-to-do-test-automation-using-playwright-and-javascript-2ebg</link>
      <guid>https://dev.to/mdmoeenajazkhan/how-to-do-test-automation-using-playwright-and-javascript-2ebg</guid>
      <description>&lt;p&gt;How to do UI Automation using Playwright and JavaScript? In this course, I’ll walk you step-by-step to build your UI Automation framework.&lt;/p&gt;

&lt;p&gt;Playwright a test automation tool which is used for end-to-end testing for any of the modern web applications like react.js or AngularJS. It currently supports the Chromium, WebKit and Firefox family where you have Chrome, Microsoft Edge, Firefox, Opera and Safari browsers. It also supports all the major platforms of Windows, Linux and Mac OS and you have very good support of all the programming languages like Typescript, JavaScript, Python, .net and Java. So which means that you can write your automation test in any of the programming language. It also supports mobile automation or it supports the mobile emulators which means you can fire up the Chrome browser on Android or the Safari on iPhone/iPAD and do your test. You can also run all your tests on any of the cloud environments as well like LambdaTest, SauceLabs, BrowserStack.&lt;/p&gt;

&lt;p&gt;The complete playlist of Playwright test automation tool which gives you basic setup knowledge to advance usage of the tool.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0cBXkKV5--QCuNmEIkzd1k2" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ytimg.com%2Fvi%2Fl8PQ7rIZPp4%2Fhqdefault.jpg%3Fsqp%3D-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE%3D%26rs%3DAOn4CLDEx8RqW0SgEq3IhoUG3mQwZlbC_g%26days_since_epoch%3D20005" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0cBXkKV5--QCuNmEIkzd1k2" rel="noopener noreferrer" class="c-link"&gt;
          Playwright - Test Automation Tool - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Playwright - Test Automation Tool #1 Playwright - Test Automation Tool | Overview - https://www.youtube.com/watch?v=l8PQ7rIZPp4 #2 Playwright Installation - ...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.youtube.com%2Fs%2Fdesktop%2Ffcb15d92%2Fimg%2Ffavicon.ico"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;We will be covering the following topics:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Playwright - Test Automation Tool | Overview - &lt;a href="https://www.youtube.com/watch?v=l8PQ7rIZPp4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=l8PQ7rIZPp4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Installation - &lt;a href="https://www.youtube.com/watch?v=I59Vban8lAo" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=I59Vban8lAo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;What is Next.js - &lt;a href="https://www.youtube.com/watch?v=u6xMGPZnsXk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=u6xMGPZnsXk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright First Test Script - &lt;a href="https://www.youtube.com/watch?v=CPlYyCLjPqo" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=CPlYyCLjPqo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Configuration File - &lt;a href="https://www.youtube.com/watch?v=r7YGrF3s5kw" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=r7YGrF3s5kw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Test Hooks - &lt;a href="https://youtu.be/739dMoKNcYY" rel="noopener noreferrer"&gt;https://youtu.be/739dMoKNcYY&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright VS Code Extension - Run test with a single click - &lt;a href="https://youtu.be/54BlaEFQjTg" rel="noopener noreferrer"&gt;https://youtu.be/54BlaEFQjTg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright VS Code Extension - Record new tests - &lt;a href="https://youtu.be/ykF3Pff6Zo8" rel="noopener noreferrer"&gt;https://youtu.be/ykF3Pff6Zo8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Command Line - &lt;a href="https://www.youtube.com/watch?v=aqRQ1XhbWG8" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=aqRQ1XhbWG8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Configure NPM scripts in Playwright - &lt;a href="https://www.youtube.com/watch?v=wwlNcfOAqCs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=wwlNcfOAqCs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Test Generator - &lt;a href="https://www.youtube.com/watch?v=WNUmJjIrs2o" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=WNUmJjIrs2o&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Test Annotations - &lt;a href="https://www.youtube.com/watch?v=g91durt7HUY" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=g91durt7HUY&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Test Video Recording - &lt;a href="https://www.youtube.com/watch?v=SvW_aZCmlE4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=SvW_aZCmlE4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Workers | Parallel Test Execution - &lt;a href="https://youtu.be/WgKXdzOfHQU" rel="noopener noreferrer"&gt;https://youtu.be/WgKXdzOfHQU&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Playwright Custom Reporters - &lt;a href="https://youtu.be/iGcqv7vmzq8" rel="noopener noreferrer"&gt;https://youtu.be/iGcqv7vmzq8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Allure Report For Playwright - &lt;a href="https://youtu.be/M3jw47nKHpw" rel="noopener noreferrer"&gt;https://youtu.be/M3jw47nKHpw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Retries In Playwright - &lt;a href="https://youtu.be/wY2hrvFAmTI" rel="noopener noreferrer"&gt;https://youtu.be/wY2hrvFAmTI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Integration of Jenkins with Playwright - &lt;a href="https://youtu.be/BHgfOYL6q5A" rel="noopener noreferrer"&gt;https://youtu.be/BHgfOYL6q5A&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👍 You can follow my content here as well -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codewithmmak.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/codewithmmak" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/company/codewithmmak" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/codewithmmak/" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/codewithmmak" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.instagram.com/codewithmmak/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;I love coffees! And, if this post helped you out and you would like to support my work, you can do that by clicking on the button below and buying me a cup of coffee -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/codewithmmak" rel="noopener noreferrer"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also support me by liking and sharing this content.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to do API Automation using Axios, Mocha, Chai and JavaScript</title>
      <dc:creator>Md Moeen Ajaz Khan</dc:creator>
      <pubDate>Wed, 29 Jun 2022 19:30:47 +0000</pubDate>
      <link>https://dev.to/mdmoeenajazkhan/how-to-do-api-automation-using-axios-mocha-chai-and-javascript-2p6p</link>
      <guid>https://dev.to/mdmoeenajazkhan/how-to-do-api-automation-using-axios-mocha-chai-and-javascript-2p6p</guid>
      <description>&lt;p&gt;How to do API Automation Testing using Axios, Mocha, Chai and JavaScript? In this course, I’ll walk you step-by-step to build your API Automation framework.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0dc9Yav3MMqUlq6RmdC5-I_" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--eyFTIKRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/q7uOGtmd11g/hqdefault.jpg%3Fsqp%3D-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ%3D%3D%26rs%3DAOn4CLD5RxEhU9RBbtNa1Ps5kPMKFu8fkg%26days_since_epoch%3D19355" height="94" class="m-0" width="168"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PL3IwAics3J0dc9Yav3MMqUlq6RmdC5-I_" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          API Automation using Axios, Mocha, Chai and JavaScript | Code with MMAK Tutorial 1 - Introduction - https://www.youtube.com/watch?v=q7uOGtmd11g Tutorial 2 - ...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fG46Mg8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.youtube.com/s/desktop/451d4225/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;We will be covering the following topics:&lt;/strong&gt;&lt;br&gt;
Tutorial 1 - Introduction - &lt;a href="https://www.youtube.com/watch?v=q7uOGtmd11g"&gt;https://www.youtube.com/watch?v=q7uOGtmd11g&lt;/a&gt;&lt;br&gt;
Tutorial 2 - Initialize the project &amp;amp; install npm packages - &lt;a href="https://www.youtube.com/watch?v=jXOkXeXwlyk"&gt;https://www.youtube.com/watch?v=jXOkXeXwlyk&lt;/a&gt;&lt;br&gt;
Tutorial 3 - Create .gitignore file - &lt;a href="https://www.youtube.com/watch?v=IJvSWax7Guk"&gt;https://www.youtube.com/watch?v=IJvSWax7Guk&lt;/a&gt;&lt;br&gt;
Tutorial 4 - Calling A GET API - &lt;a href="https://www.youtube.com/watch?v=juTx72aNNLg"&gt;https://www.youtube.com/watch?v=juTx72aNNLg&lt;/a&gt;&lt;br&gt;
Tutorial 5 - Calling A POST API - &lt;a href="https://www.youtube.com/watch?v=qH1hCU1cHpE"&gt;https://www.youtube.com/watch?v=qH1hCU1cHpE&lt;/a&gt;&lt;br&gt;
Tutorial 6 - Calling A PUT API - &lt;a href="https://www.youtube.com/watch?v=kXvA_l7giFI"&gt;https://www.youtube.com/watch?v=kXvA_l7giFI&lt;/a&gt;&lt;br&gt;
Tutorial 7 - Calling A PATCH API - &lt;a href="https://www.youtube.com/watch?v=qmmZ0k42EZA"&gt;https://www.youtube.com/watch?v=qmmZ0k42EZA&lt;/a&gt;&lt;br&gt;
Tutorial 8 - Calling A DELETE API - &lt;a href="https://www.youtube.com/watch?v=bI_TRt5XNUM"&gt;https://www.youtube.com/watch?v=bI_TRt5XNUM&lt;/a&gt;&lt;br&gt;
Tutorial 9 - Test Suite Execution - &lt;a href="https://www.youtube.com/watch?v=xvm6f540I0A"&gt;https://www.youtube.com/watch?v=xvm6f540I0A&lt;/a&gt;&lt;br&gt;
Tutorial 10 - Generating HTML Report - &lt;a href="https://www.youtube.com/watch?v=17HHB9fbiHU"&gt;https://www.youtube.com/watch?v=17HHB9fbiHU&lt;/a&gt;&lt;br&gt;
Tutorial 11 - Write data to JSON file - &lt;a href="https://www.youtube.com/watch?v=1TuckfRn-Ys"&gt;https://www.youtube.com/watch?v=1TuckfRn-Ys&lt;/a&gt;&lt;br&gt;
Tutorial 12 - Read properties file - &lt;a href="https://www.youtube.com/watch?v=i4uvsjovHVQ"&gt;https://www.youtube.com/watch?v=i4uvsjovHVQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👍 You can follow my content here as well -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codewithmmak.com/"&gt;Website&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/codewithmmak"&gt;GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/company/codewithmmak"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/codewithmmak/"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/codewithmmak"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.instagram.com/codewithmmak/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;I love coffees! And, if this post helped you out and you would like to support my work, you can do that by clicking on the button below and buying me a cup of coffee -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/codewithmmak"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also support me by liking and sharing this content.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>axios</category>
      <category>mocha</category>
      <category>chai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
