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.