Test Automation Framework with Selenium and Docker : Robust Continuous Integration architecture

In the rapidly evolving world of software development, the need for efficient and reliable testing methodologies cannot be overstated. Test automation has become a cornerstone for Agile and DevOps practices, enabling teams to deliver high-quality software at speed. This blog post explores building a robust test automation framework with Selenium and Docker, addressing key challenges faced by test automation engineers today.

Why Use Docker in Test Automation?

Docker offers a lightweight, portable, and consistent environment for running applications, making it an ideal choice for test automation. Here’s why integrating Docker into your Selenium testing framework is advantageous:

Consistency: Docker containers ensure that tests run in the same environment, eliminating “works on my machine” issues.

Isolation: Each test suite can run in isolation without interfering with other tests.

Scalability: Easily scale your test execution across multiple containers.

CI/CD Integration: Docker integrates seamlessly with CI/CD tools like Jenkins, enabling automated test runs on every code change.

Test Automation Framework with Selenium and Docker

Many test automation engineers face challenges such as flaky tests, environment inconsistencies, and slow execution times. This blog aims to guide you through creating a test automation framework that addresses these issues while leveraging Docker for enhanced efficiency.

Prerequisites

Before we start, ensure you have the following installed on your machine:

  • Java (JDK 8 or higher)
  • Maven
  • Docker
  • Docker Compose
  • Git

Step 1: Set Up Your Project Structure

Create a new Maven project structure. Here’s a suggested layout:

/test-automation-framework
|-- /src
|   |-- /main
|   |   `-- /java
|   |-- /test
|   |   `-- /java
|-- /docker
|   `-- Dockerfile
|-- pom.xml

Step 2: Create the Maven pom.xml File

The pom.xml file defines the dependencies required for the project. Below is a sample configuration with Selenium and TestNG to create Test Automation Framework with Selenium and Docker

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>test-automation-framework</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>5.4.1</version>
        </dependency>
    </dependencies>
</project>

Step 3: Create the Dockerfile

The Dockerfile will help you create a Docker image that contains all the necessary tools to run your Selenium tests. Here’s an example Dockerfile to create Test Automation Framework with Selenium and Docker

# Use the official Maven image as a base
FROM maven:3.8.6-openjdk-11 AS build

# Set the working directory
WORKDIR /app

# Copy the pom.xml and install dependencies
COPY pom.xml .
RUN mvn dependency:go-offline

# Copy the source code and package the application
COPY src ./src
RUN mvn clean package

# Use a lightweight image for runtime
FROM openjdk:11-jre-slim

WORKDIR /app

# Copy the jar file from the build stage
COPY --from=build /app/target/test-automation-framework-1.0-SNAPSHOT.jar app.jar

# Specify the command to run the application
ENTRYPOINT ["java", "-jar", "app.jar"]

Step 4: Write Sample Selenium Tests

In the src/test/java directory, create a sample Selenium test class:

package com.example.tests;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class SampleTest {
    private WebDriver driver;

    @BeforeClass
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        driver = new ChromeDriver();
    }

    @Test
    public void testGoogleSearch() {
        driver.get("https://www.google.com");
        // Add your assertions here
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }
}

Step 5: Docker Compose for Multi-Container Setup

If you want to run tests in parallel using multiple containers, create a docker-compose.yml file to create Test Automation Framework with Selenium and Docker

version: '3.8'
services:
  selenium:
    image: selenium/standalone-chrome
    ports:
      - "4444:4444"
  test:
    build: .
    depends_on:
      - selenium
    environment:
      - SELENIUM_HOST=selenium

Step 6: Run Your Tests in Docker

To build your Docker image and run the tests, execute the following commands:

1. Build the Docker image:

docker-compose build

2. Run the tests:

docker-compose up --abort-on-container-exit

By leveraging Selenium and Docker, you can create a robust test automation framework that enhances test reliability and execution speed while integrating seamlessly into your CI/CD pipeline. This approach not only resolves common testing issues but also fosters a culture of quality within your development process.

Next Steps

• Explore advanced features of Selenium, such as WebDriverWait for handling dynamic web elements.

• Consider integrating tools like Cucumber for behavior-driven development (BDD).

• Set up notifications for test results using Jenkins or other CI/CD tools.

By following this guide, you’re well on your way to establishing a cutting-edge test automation framework that can adapt to the evolving landscape of software development.


Discover more from Automation Script

Subscribe to get the latest posts sent to your email.

Related Posts