Merge branch 'nguyennamthai-cucumber'
This commit is contained in:
		
						commit
						a297e492a9
					
				| @ -110,6 +110,17 @@ | |||||||
| 			<scope>test</scope> | 			<scope>test</scope> | ||||||
| 		</dependency> | 		</dependency> | ||||||
| 
 | 
 | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>info.cukes</groupId> | ||||||
|  | 			<artifactId>cucumber-java</artifactId> | ||||||
|  | 			<version>1.2.4</version> | ||||||
|  | 			<scope>test</scope> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>info.cukes</groupId> | ||||||
|  | 			<artifactId>cucumber-junit</artifactId> | ||||||
|  | 			<version>1.2.4</version> | ||||||
|  | 		</dependency> | ||||||
| 	</dependencies> | 	</dependencies> | ||||||
| 
 | 
 | ||||||
| 	<build> | 	<build> | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								rest-testing/src/main/resources/Feature/cucumber.feature
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								rest-testing/src/main/resources/Feature/cucumber.feature
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||||
							
								
								
									
										14
									
								
								rest-testing/src/main/resources/cucumber.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								rest-testing/src/main/resources/cucumber.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | { | ||||||
|  | 	"testing-framework": "cucumber", | ||||||
|  | 	"supported-language":  | ||||||
|  | 	[ | ||||||
|  | 		"Ruby", | ||||||
|  | 		"Java", | ||||||
|  | 		"Javascript", | ||||||
|  | 		"PHP", | ||||||
|  | 		"Python", | ||||||
|  | 		"C++" | ||||||
|  | 	], | ||||||
|  | 
 | ||||||
|  | 	"website": "cucumber.io" | ||||||
|  | } | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | package com.baeldung.rest.cucumber; | ||||||
|  | 
 | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import cucumber.api.CucumberOptions; | ||||||
|  | import cucumber.api.junit.Cucumber; | ||||||
|  | 
 | ||||||
|  | @RunWith(Cucumber.class) | ||||||
|  | @CucumberOptions(features = "classpath:Feature") | ||||||
|  | public class CucumberTest { | ||||||
|  | } | ||||||
| @ -0,0 +1,83 @@ | |||||||
|  | package com.baeldung.rest.cucumber; | ||||||
|  | 
 | ||||||
|  | import static org.junit.Assert.*; | ||||||
|  | import static org.hamcrest.CoreMatchers.containsString; | ||||||
|  | import static com.github.tomakehurst.wiremock.client.WireMock.*; | ||||||
|  | 
 | ||||||
|  | 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 { | ||||||
|  |     InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("cucumber.json"); | ||||||
|  |     String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); | ||||||
|  | 
 | ||||||
|  |     WireMockServer wireMockServer = new WireMockServer(); | ||||||
|  |     CloseableHttpClient httpClient = HttpClients.createDefault(); | ||||||
|  | 
 | ||||||
|  |     @When("^users upload data on a project$") | ||||||
|  |     public void usersUploadDataOnAProject() throws IOException { | ||||||
|  |         wireMockServer.start(); | ||||||
|  | 
 | ||||||
|  |         configureFor("localhost", 8080); | ||||||
|  |         stubFor(post(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json")).withRequestBody(containing("testing-framework")).willReturn(aResponse().withStatus(200))); | ||||||
|  | 
 | ||||||
|  |         HttpPost request = new HttpPost("http://localhost:8080/create"); | ||||||
|  |         StringEntity entity = new StringEntity(jsonString); | ||||||
|  |         request.addHeader("content-type", "application/json"); | ||||||
|  |         request.setEntity(entity); | ||||||
|  |         HttpResponse response = httpClient.execute(request); | ||||||
|  | 
 | ||||||
|  |         assertEquals(200, response.getStatusLine().getStatusCode()); | ||||||
|  |         verify(postRequestedFor(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json"))); | ||||||
|  | 
 | ||||||
|  |         wireMockServer.stop(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @When("^users want to get information on the (.+) project$") | ||||||
|  |     public void usersGetInformationOnAProject(String projectName) throws IOException { | ||||||
|  |         wireMockServer.start(); | ||||||
|  | 
 | ||||||
|  |         configureFor("localhost", 8080); | ||||||
|  |         stubFor(get(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json")).willReturn(aResponse().withBody(jsonString))); | ||||||
|  | 
 | ||||||
|  |         HttpGet request = new HttpGet("http://localhost:8080/projects/" + projectName.toLowerCase()); | ||||||
|  |         request.addHeader("accept", "application/json"); | ||||||
|  |         HttpResponse httpResponse = httpClient.execute(request); | ||||||
|  |         String responseString = convertResponseToString(httpResponse); | ||||||
|  | 
 | ||||||
|  |         assertThat(responseString, containsString("\"testing-framework\": \"cucumber\"")); | ||||||
|  |         assertThat(responseString, containsString("\"website\": \"cucumber.io\"")); | ||||||
|  |         verify(getRequestedFor(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json"))); | ||||||
|  | 
 | ||||||
|  |         wireMockServer.stop(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Then("^the server should handle it and return a success status$") | ||||||
|  |     public void theServerShouldReturnASuccessStatus() { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Then("^the requested data is returned$") | ||||||
|  |     public void theRequestedDataIsReturned() { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private String convertResponseToString(HttpResponse response) throws IOException { | ||||||
|  |         InputStream responseStream = response.getEntity().getContent(); | ||||||
|  |         Scanner scanner = new Scanner(responseStream, "UTF-8"); | ||||||
|  |         String responseString = scanner.useDelimiter("\\Z").next(); | ||||||
|  |         scanner.close(); | ||||||
|  |         return responseString; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user