Automation Guide

The Ultimate Guide to TestNG & Cucumber Frameworks

Welcome to the Automation Framework Masterclass!

Whether you are transitioning from manual testing or upgrading your automation skills, mastering frameworks like TestNG and Cucumber is essential. This guide covers everything from basic definitions to real-world Page Object Model (POM) structures and interview preparation.

1. Introduction to Automation Frameworks

What is an Automation Framework?

Imagine building a house without a blueprint. You might be able to put some bricks together, but eventually, the structure will collapse. In software testing, an Automation Framework is that blueprint. It is a set of guidelines, coding standards, and structured folders that help QA engineers write clean, maintainable, and reusable code.

Why are Frameworks Important in Selenium?

Selenium WebDriver is just a library that interacts with browsers. It does NOT generate reports, it does NOT manage test data, and it does NOT know which test to run first. To solve these problems, we wrap Selenium inside a framework. Benefits include:

  • Reusability: Write code once, use it across 100 tests.
  • Maintainability: If a UI button changes, you only update the code in one place (POM).
  • Reporting: Generate beautiful HTML reports showing Pass/Fail metrics.
  • Data Separation: Keep test scripts separate from test data (Excel, JSON).

2. TestNG Framework Deep Dive

What is TestNG?

TestNG (Test Next Generation) is an open-source testing framework inspired by JUnit but designed to be much more powerful. It is used heavily by Java Automation Engineers for unit, integration, and end-to-end testing.

Why TestNG is Used (Advantages)

  • Annotations: Controls the flow of execution without writing complex logic.
  • Prioritization: Run tests in a specific order using priority=1.
  • Data Providers: Run the same test multiple times with different data sets.
  • Parallel Execution: Run tests simultaneously to save hours of execution time.
  • Built-in Reporting: Automatically generates an emailable-report.html.

Essential TestNG Annotations

  • @BeforeSuite - Runs once before the entire test suite.
  • @BeforeClass - Runs once before the first method in the current class.
  • @BeforeMethod - Runs before every single @Test method (e.g., launching the browser).
  • @Test - The actual automation script / test case.
  • @AfterMethod - Runs after every single @Test method (e.g., closing the browser).

Practical Example: Assertions

Assertions are how TestNG decides if a test passed or failed. Here is a real-world example of validating a login page:

import org.testng.Assert;
import org.testng.annotations.Test;

public class LoginTests {

    @Test(priority = 1)
    public void verifyLoginTitle() {
        String actualTitle = driver.getTitle();
        String expectedTitle = "Dashboard | Ram Technical Help";
        
        // Hard Assertion: If this fails, the test stops immediately
        Assert.assertEquals(actualTitle, expectedTitle, "Title did not match!");
        System.out.println("Login Successful");
    }
}

3. Cucumber Framework & BDD

What is Cucumber and BDD?

BDD (Behavior Driven Development) is a methodology where developers, QA, and business analysts collaborate using plain English. Cucumber is the most popular tool that reads these plain English files and executes them as code.

The Three Pillars of Cucumber

  1. Feature File (Gherkin): Written in plain English using Given/When/Then.
  2. Step Definitions (Java): The actual Selenium code that maps to the English lines.
  3. Test Runner: The class that ties the feature file and step definitions together to run the test.

Practical Example: Gherkin Syntax

Here is what a real Feature file looks like in an enterprise project:

Feature: User Login Functionality

  Scenario: Successful Login with valid credentials
    Given the user opens the login page
    When the user enters valid username and password
    And clicks on the login button
    Then the user should be redirected to the dashboard
    And a success message should be displayed

4. Real Selenium Framework Structure (POM)

In a real company, you never write all your code in one file. You use the Page Object Model (POM) design pattern. This means every webpage has its own corresponding Java class that holds its web elements and actions.

Standard Enterprise Folder Structure

  • 📂 src/main/java // Core Logic
    • 📁 com.project.base (BaseClass.java - WebDriver setup)
    • 📁 com.project.pages (LoginPage.java, HomePage.java - Locators)
    • 📁 com.project.utils (ExcelReader.java, ExtentReports.java)
  • 📂 src/test/java // Test Executions
    • 📁 com.project.tests (LoginTest.java, CheckoutTest.java)
    • 📁 com.project.runners (TestNG.xml)
  • 📂 src/test/resources // Test Data & Configs
    • 📄 config.properties (URLs, Environment Variables)
    • 📄 testdata.xlsx (Data Driven Testing rows)

5. Real-Time Project Scenarios

When you join a QA team, you will automate business-critical flows. Here are scenarios you must know how to automate:

1. E-Commerce Checkout

Automating the flow of adding an item to the cart, filling out shipping info, passing mock credit card details, and verifying the Order ID on the success page.

2. Data-Driven Login

Using TestNG @DataProvider or Apache POI to read 50 rows of usernames and passwords from an Excel sheet to test positive and negative login combinations.

3. API + UI Validation

Using RestAssured to create a user via an API POST request, then using Selenium to log in to the UI to verify that the user was actually created in the system.

6. Framework Comparisons

Feature TestNG Framework Cucumber Framework
Core Purpose Unit and End-to-End Testing Behavior Driven Development (BDD)
Language Used Pure Java / Code Plain English (Gherkin syntax)
Best Audience QA Engineers & Developers Product Owners & Business Analysts
Execution Engine TestNG.xml TestRunner Class (often uses TestNG internally)

7. Top Interview Questions for QA Engineers

TestNG Interview Questions

  1. What is the difference between Hard Assert and Soft Assert?
    Hard Assert throws an exception immediately and stops the test. Soft Assert logs the failure but continues the test execution until assertAll() is called.
  2. How do you run a test multiple times?
    By using the invocationCount = 5 attribute inside the @Test annotation.
  3. How do you execute failed test cases in TestNG?
    TestNG automatically generates a testng-failed.xml file in the test-output folder. You just run that XML file to retry failures.

Cucumber Interview Questions

  1. What is the difference between Scenario and Scenario Outline?
    A Scenario runs once. A Scenario Outline is used for data-driven testing; it runs multiple times based on the data provided in the Examples table below it.
  2. What are Cucumber Tags?
    Tags like @Smoke or @Regression are used to group specific scenarios. You can tell the Test Runner to only execute scenarios with a specific tag.
  3. What is Background in Cucumber?
    The Background keyword is used to define steps that are common to all scenarios in a feature file (like logging in before doing anything else).

8. Beginner to Pro Learning Roadmap

Follow this exact order if you want to become a highly-paid QA Automation Engineer:

1
Core Java Basics: Learn OOP concepts, Strings, Arrays, Collections (List/Map), and Exception Handling.
2
Selenium WebDriver: Learn locators (XPath/CSS), Waits (Implicit/Explicit), and Actions class.
3
TestNG & Maven: Learn how to structure tests, add dependencies in pom.xml, and run suites.
4
Framework Design (POM): Learn to build a framework from scratch. Separate logic from locators.
5
Cucumber BDD: Integrate Gherkin to make your framework business-readable.
6
Jenkins (CI/CD): Learn how to trigger your automation suite automatically on a server.
7
API Testing: Master Postman and RestAssured to validate backend services.