Powered By Blogger

Search Here!

Tuesday, September 3, 2024

WebdriverIO onPrepare To check Url

 onPrepare: async function () {

        console.log("onPrepare setup started...");
        try {
            // make a request to a reliable server
            await axios.head("https://www.google.com/", { timeout:
            10000 }); // Replace the URL with any reliable server
            console.log("Internet is connected. cheers! 👍");
        } catch (error) {
            console.log("No internet connection or server is
            unreachable 🙄");
            process.exit(1); // Exit the process with an error code
        }
        // url to check accessibility
        const urlsToCheck = [
           "https://www.example.com",
           "https://www.example.com",
           "https://www.example.com",
           "https://www.example.com",
        ];
        for (const urlToCheck of urlsToCheck) {
            try {
                // Send a GET request to the URL
                const response = await axios.get(urlToCheck);
                // Check if the response status is in the
                   success range (e.g., 2xx)
                if (response.status >= 200 && response.status < 300)
                    {
                    console.log(
                        `Url ${urlToCheck} is accessible. Status:
                            ${response.status}` + "👍"
                    );
                } else {
                    console.error(
                        `Url ${urlToCheck} is not accessible.
                            Status: ${response.status}` +
                            "🙄"
                    );
                    await browser.close();
                    process.exit(1); // Exit the process with an
                    error code
                }
            } catch (error) {
                console.error(
                    `Error while checking accessibility of Url
                        ${urlToCheck}:`,
                    error.message
                );
                await browser.close();
                process.exit(1); // Exit the process with an
                error code
            }
        }
        //set maxInstances
        console.log(
            "Set chrome browser maxInstances: " +
                CONSTANT.CONFIG_SETTING.MAXINSTANCES_VALUE +
                "👍😀"
        );
        console.log("onPrepare setup completed..." + "👍👍👍😀");
    },

WebdriverIO Chrome Browser Capabilities For Windows & Linux Environment

wdio.conf.js
// Set the path to the Chromedriver executable based on the
operating system
const isWindows = os.platform() === "win32";
const chromedriverPath = isWindows
    ? "./driver/win/chromedriver.exe" // Path for Chromedriver
on Windows
    : "./driver/linux/chromedriver"; // Path for Chromedriver
on Linux

// Set the path to the Chrome binary based on the operating system
const chromeBinaryPath =
    os.platform() === "win32"
        ? "C:\\Program Files\\Google\\Chrome\\Application
        \\chrome.exe" // Path for Chrome on Windows
        : "/usr/bin/google-chrome"; // Default path for Chrome
on Linux

capabilities: [
        {
            //maxInstances can get overwritten per capability.
So if you have an in-house Selenium
            // grid with only 5 firefox instances available
you can make sure that not more than
            // 5 instances get started at a time.
            browserName: CONSTANT.CONFIG_SETTING.CHROME_BROWSER_NAME,
            acceptInsecureCerts: true,
            "goog:chromeOptions": {
                binary: chromeBinaryPath, // Set the Chrome
                binary path dynamically
                prefs: {
                    credentials_enable_service: false,
                    profile: {
                        password_manager_enabled: false,
                    },
                    w3c: true,
                    download: {
                        default_directory: path.join(process.cwd(),
                        "downloads"),
                        prompt_for_download: false,
                        directory_upgrade: true,
                        "safebrowsing.enabled": false,
                    },
                },
                args: [
                    ...(process.env.HEADLESS === "true"
                        ? ["--headless", "--disable-gpu",
                        "--window-size=1920,1080"]
                        // Configurations for headless mode
                        : []), // No additional args for
                        non-headless mode
                    "--disable-cache",
                    "--no-sandbox",
                    "--disable-dev-shm-usage",
                    "--disable-application-cache",
                    "--disable-offline-load-stale-cache",
                    "--disk-cache-size=0",
                    "--v8-cache-options=off",
                    "--disable-infobars",
                    "--kiosk-printing",
                ].filter(Boolean), // Filter out any empty strings
            },

    ], 

Friday, December 8, 2023

Below is a simplified example of a customized Jira workflow for Product Development and QA (Quality Assurance). This is a basic representation, and you may need to adapt it to match the specific needs and processes of your team or organization.


This is a simple representation, and the actual workflow might be more complex based on your team's specific requirements and processes. Customize the workflow according to your team's needs, and consider integrating it with your version control system and other tools for a seamless development process.

Thursday, December 7, 2023

Calculate Software Automation ROI

Software automation ROI" refers to the Return on Investment (ROI) associated with implementing software automation in a business or organizational context. ROI is a measure used to evaluate the financial benefits of an investment relative to its cost. In the case of software automation, ROI assesses the value gained from automating specific processes or tasks compared to the expenses incurred in implementing and maintaining the automation.

Here are the following calculation parameters: (used google sheets)
 





Considering 2 years(12 months) of ROI projection:

Data Calculation parameters: 

  • Number of test-cases can be automated: (B5 -(B5*B6)/100) 
  • Automation of the test-cases needs: =(($B$7*$B$11)+B9)/B12
  • Time-to-market acceleration: =(B10*B7*B8)/8


Statistics calculation parameters: 


Saved manual testing time (accumulated), hrs = 

  • =$B$10*F21*$B$8*0
  • =H21+($B$10*F22*$B$8) ...

Automation costs (accumulated), hrs =

  • =D21
  • =D22+I21 ...

Autotests run and support cost, hrs= 

  • 0.00
  • =$B$13 ...

Test cases automated = 

  • =IF((E21/$B$11)*B12 >= $B$7, $B$7, (E21/$B$11)*B12)
  • =IF(((E22/$B$11)*$B$12) + $F21 >= $B$7, $B$7, (($E22/$B$11)*$B$12) + F21) ...


Autotests development cost, hrs using standard working hrs/month =

  • =IF($B$14 <= $B$18 * $B$12, $B$14, $B$18*$B$12)
  • =IF(SUM($E$21:E21)+$B$18 >= $B$14, MAX(0, $B$14 - SUM($E$21:E21)), $B$18*$B$12) ...

Automation costs, hrs =

  • =E21+G21
  • =E22+G22 ...

Saved manual testing time, hrs = 

  • =$B$10*F21*$B$8*0
  • =$B$10*F22*$B$8 ...

ROI, hrs = 

  • =H21-I21
  • =H22-I22 ...

Total saved in $ (- ve means in loss) = 

  • =(B45*B17)

Sunday, February 6, 2022

Short Continuous Deployments To Production !

One of my product teams has been successful in deploying to production once every 4 weeks. In the past, our release plan would comprise of an Iterative and incremental development sprint zero, one or three working sprints, one or two alpha or beta sprints, and followed by a hardening sprint. 



We were essentially releasing features to end-users once in every six 8 or more. Our product features are critical to the business. 

Our product team migrated to a shorter release cycle thereby developing and deploying for each sprint and changed to following into 1 month cycle,


Benefits of Small Releases


As the iterative development process is mastered, the door opens for the team to deliver smaller and more frequent releases to the end-users, and that is one of the prime drivers of agile. The ability to release software more frequently has two primary business benefits: increased responsiveness to the customer amidst changing marketing conditions and reduced risk to the enterprise.


  1. Frequent deployments to end-user provide a competitive advantage.
  2. Product requirements could change significantly if deployed to production once every few months. By launching frequently, you could gather data from end-users earlier and apply adjustments accordingly.
  3. Keep your team energized and motivated.
  4. Helps in establishing best practices.
  5. Exposes risks and challenges with design, architecture, and solutions earlier in the process.