diff --git a/testing-modules/rest-testing/pom.xml b/testing-modules/rest-testing/pom.xml
index 0e54980683..9bfd715682 100644
--- a/testing-modules/rest-testing/pom.xml
+++ b/testing-modules/rest-testing/pom.xml
@@ -106,6 +106,46 @@
true
+
+
+
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ classes
+ 4
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+ com.github.temyers
+ cucumber-jvm-parallel-plugin
+ 5.0.0
+
+
+ generateRunners
+ generate-test-sources
+
+ generateRunners
+
+
+
+ com.baeldung.rest.cucumber
+
+ src/test/resources/Feature/
+ SCENARIO
+
+
+
+
+
diff --git a/testing-modules/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java b/testing-modules/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java
index b461da8403..35a913ae25 100644
--- a/testing-modules/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java
+++ b/testing-modules/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java
@@ -1,19 +1,5 @@
package com.baeldung.rest.cucumber;
-import com.github.tomakehurst.wiremock.WireMockServer;
-import cucumber.api.java.en.Then;
-import cucumber.api.java.en.When;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Scanner;
-
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
@@ -25,10 +11,27 @@ import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static com.github.tomakehurst.wiremock.client.WireMock.verify;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Scanner;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+import cucumber.api.java.en.Then;
+import cucumber.api.java.en.When;
+
public class StepDefinition {
private static final String CREATE_PATH = "/create";
@@ -37,20 +40,20 @@ public class StepDefinition {
private final InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("cucumber.json");
private final String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next();
- private final WireMockServer wireMockServer = new WireMockServer();
+ private final WireMockServer wireMockServer = new WireMockServer(options().dynamicPort());
private final CloseableHttpClient httpClient = HttpClients.createDefault();
@When("^users upload data on a project$")
public void usersUploadDataOnAProject() throws IOException {
wireMockServer.start();
- configureFor("localhost", 8080);
+ configureFor("localhost", wireMockServer.port());
stubFor(post(urlEqualTo(CREATE_PATH))
.withHeader("content-type", equalTo(APPLICATION_JSON))
.withRequestBody(containing("testing-framework"))
.willReturn(aResponse().withStatus(200)));
- HttpPost request = new HttpPost("http://localhost:8080/create");
+ HttpPost request = new HttpPost("http://localhost:" + wireMockServer.port() + "/create");
StringEntity entity = new StringEntity(jsonString);
request.addHeader("content-type", APPLICATION_JSON);
request.setEntity(entity);
@@ -67,11 +70,11 @@ public class StepDefinition {
public void usersGetInformationOnAProject(String projectName) throws IOException {
wireMockServer.start();
- configureFor("localhost", 8080);
+ configureFor("localhost", wireMockServer.port());
stubFor(get(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo(APPLICATION_JSON))
.willReturn(aResponse().withBody(jsonString)));
- HttpGet request = new HttpGet("http://localhost:8080/projects/" + projectName.toLowerCase());
+ HttpGet request = new HttpGet("http://localhost:" + wireMockServer.port() + "/projects/" + projectName.toLowerCase());
request.addHeader("accept", APPLICATION_JSON);
HttpResponse httpResponse = httpClient.execute(request);
String responseString = convertResponseToString(httpResponse);
diff --git a/testing-modules/rest-testing/src/test/resources/Feature/cucumber.feature b/testing-modules/rest-testing/src/test/resources/Feature/cucumber.feature
new file mode 100644
index 0000000000..99dd8249fe
--- /dev/null
+++ b/testing-modules/rest-testing/src/test/resources/Feature/cucumber.feature
@@ -0,0 +1,10 @@
+Feature: Testing a REST API
+ Users should be able to submit GET and POST requests to a web service, represented by WireMock
+
+ Scenario: Data Upload to a web service
+ When users upload data on a project
+ Then the server should handle it and return a success status
+
+ Scenario: Data retrieval from a web service
+ When users want to get information on the Cucumber project
+ Then the requested data is returned
\ No newline at end of file