-
Notifications
You must be signed in to change notification settings - Fork 3
Building a Test Automation with Spring Boot BDD
This guide provides a sampling of how Spring Boot helps you accelerate and facilitate test automation development. As you read more Spring Getting Started guides, you will see more use cases for Spring Boot. It is meant to give you a quick taste of Spring Boot. If you want to create your own Spring Boot-based project, visit Spring Initializer, fill in your project details, pick your options, and you can download either a Maven build file, or a bundled up project as a zip file. (please refer guide for Spring Boot app here)
You’ll build a simple test automation application with Spring Boot and add some useful services to it.
- About 15 minutes
- A favorite text editor or IDE
- JDK 1.8 or later
- Gradle 4+ or Maven 3.2+
You can also import the code straight into your IDE:
- IntelliJ IDEA
Like most Spring Getting Started guides, you can start from scratch and complete each step, or you can bypass basic setup steps that are already familiar to you. Either way, you end up with working code.
- To start from scratch, move on to Build with Maven.
- To pick complete version please move here
First you set up a basic build script. You can use any build system you like when building apps with Spring, but the code you need to work with Maven is included here. If you’re not familiar with Maven, refer to Building Java Projects with Maven.
Create the directory structure
In a project directory of your choosing, create the following subdirectory structure; for example, with mkdir -p src/main/java/hello
on *nix systems.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sprimber-parent</artifactId>
<groupId>com.griddynamics.qa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.griddynamics.qa</groupId>
<artifactId>sprimber-test</artifactId>
<dependencies>
<dependency>
<groupId>com.griddynamics.qa</groupId>
<artifactId>sprimber-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>2.8</version>
<configuration>
<resultsDirectory>${project.parent.basedir}/allure-results</resultsDirectory>
</configuration>
</plugin>
</plugins>
</build>
The Spring Boot Maven plugin provides many convenient features:
- It collects all the jars on the classpath and builds a single, runnable "über-jar", which makes it more convenient to execute and transport your service.
- It searches for the public static void main() method to flag as a runnable class.
- It provides a built-in dependency resolver that sets the version number to match Spring Boot dependencies. You can override any version you wish, but it will default to Boot’s chosen set of versions.
Now you can create a class with step definitions for a simple test automation application.
test/steps/BaseEchoSteps.java
@Actions
public class BaseEchoSteps {
private static final Logger LOGGER = LoggerFactory.getLogger(BaseEchoSteps.class);
public BaseEchoSteps() {
}
@Before
public void before() {
LOGGER.info("Hey, I'm before action");
}
@BeforeStep
public void beforeStep() {
LOGGER.info("Hey, I'm beforeStep action");
}
@Given("^test given action$")
public void given() {
LOGGER.info("Hey, I'm given action");
}
@When("^test when action$")
public void when() {
LOGGER.info("Hey, I'm when action");
}
@When("some when action with param '{word}'")
public void whenWithParameters(String word) {
LOGGER.info("Hey, I'm when action with param {}", word);
}
@Then("test then action")
public void then() {
LOGGER.info("Hey, I'm then action");
}
@Then("every time failed action")
public void thenFail() {
LOGGER.info("Hey, I'm every time failed action");
Assertions.assertThat("true").as("True should never be false").isEqualTo("false");
}
@AfterStep
public void afterStep() {
LOGGER.info("Hey, I'm afterStep action");
}
@After
public void after() {
LOGGER.info("Hey, I'm after action");
}
public void dummy() {
LOGGER.info("Hey, I'm not an action");
}
}
The @Actions
marks this class as a source for step definitions. It contains @Component
annotation, so this class also will be eligible for Spring class path scan.
Standard Cucumber annotations available when Cucumber bridge selected
@Given
@When
@Then
-
@Before
@BeforeStep
-
@After
@AfterStep
Here you create an main class with the components:
test/EchoTestBackend.java
@SpringBootApplication
@EnableSprimber
@EnableAsync
public class EchoTestBackend {
public static void main(String[] args) throws Exception {
SpringApplication.exit(SpringApplication.run(EchoTestBackend.class));
}
}
@SpringBootApplication
is a convenience annotation that adds all of the following:
-
@Configuration
tags the class as a source of bean definitions for the application context. -
@EnableAutoConfiguration
tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings. -
@ComponentScan
tells Spring to look for other components, configurations, and services in the hello package, allowing it to find the controllers. -
@EnableSprimber
tells Spring to add corresponding Sprimber engine beans to the context and configure all required bridges. -
@EnableAsync
tells Spring to enable support for@Async
annotations
To run the application, execute:
mvn package && java -jar target/sprimber-test-1.0.1.jar
mvn spring-boot:run
You expect to have allure-results
folder in the root folder of the project with test automation results.
Once you will be ready to view allure report, execute:
mvn allure:report
Maven target folder will contain folder site with allure report web application.
Congratulations! You built a simple test automation application with Spring Boot and Sprimber and learned how it can ramp up your development pace. You also turned on some handy production services. This is only a small sampling of what Spring BDD can do. Checkout Spring Boot’s online docs if you want to dig deeper to standard Spring boot capabilities.