From c34fb90cd8af618bfa5a810b96685401b06bb0b8 Mon Sep 17 00:00:00 2001 From: Aleksei Kornev Date: Wed, 20 Aug 2014 22:36:27 +0400 Subject: [PATCH] Add functional test for Petclimic web service Tests uses Grid Dynamics JBehave framework. They access the same pages but in XML form and test XML content. --- spring-petclinic-it/README.md | 15 +++++-- .../webservices/steps/WebServicesSteps.java | 43 +++++++++++++++++++ .../suits/WebServicesExampleSuite.java | 41 ++++++++++++++++++ .../context/webServicesApplicationContext.xml | 31 +++++++++++++ .../CheckVetWebServiceResponseBody.story | 3 ++ .../CheckVetWebServiceResponseCode.story | 5 +++ 6 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 spring-petclinic-it/src/main/java/com/griddynamics/webservices/steps/WebServicesSteps.java create mode 100755 spring-petclinic-it/src/main/java/com/griddynamics/webservices/suits/WebServicesExampleSuite.java create mode 100755 spring-petclinic-it/src/main/resources/com/griddynamics/context/webServicesApplicationContext.xml create mode 100644 spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseBody.story create mode 100644 spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseCode.story diff --git a/spring-petclinic-it/README.md b/spring-petclinic-it/README.md index 59f752ed1..f12f9dbd8 100644 --- a/spring-petclinic-it/README.md +++ b/spring-petclinic-it/README.md @@ -1,10 +1,10 @@ Requisites: -- Binary repository for GD JBehave Framework - https://nexus.griddynamics.net/nexus/content/repositories/gd_jbehave_framework-snapshots +- Binary repository for GD JBehave Framework + https://nexus.griddynamics.net/nexus/content/repositories/gd_jbehave_framework-snapshots should be added to Maven repositories in `settings.xml`. It requires authentication so it should be configured properly. -Run test against a remote WebDriver: +Run UI test against a remote WebDriver: mvn -P runTests clean test -Dthreads=1 \ -Dsuite.all=**/*Suite.java -Dsuite.list=UITestsExampleSuite \ @@ -13,3 +13,12 @@ Run test against a remote WebDriver: -DREMOTE_WEBDRIVER_URL=http://localhost:4444/wd/hub -Dbrowser.version= \ -Dpetclinic.url=http://localhost:9966/petclinic +Run web service tests: + + mvn -P runTests clean test -Dthreads=1 \ + -Dsuite.all=**/*Suite.java -Dsuite.list=WebServicesExampleSuite \ + -Dmeta.filters=-not_impl,-not_in_func,-blocked,-non_ci \ + -Dpetclinic.url=http://localhost:9966/petclinic + +(`suite.list` property is `UITestsExampleSuite` for Selenium tests and +`WebServicesExampleSuite` - for direct tests of web service API) diff --git a/spring-petclinic-it/src/main/java/com/griddynamics/webservices/steps/WebServicesSteps.java b/spring-petclinic-it/src/main/java/com/griddynamics/webservices/steps/WebServicesSteps.java new file mode 100644 index 000000000..d8937d4e6 --- /dev/null +++ b/spring-petclinic-it/src/main/java/com/griddynamics/webservices/steps/WebServicesSteps.java @@ -0,0 +1,43 @@ +package com.griddynamics.webservices.steps; + +import com.griddynamics.web.PetClinicStoreHost; +import com.jayway.restassured.response.Response; +import org.jbehave.core.annotations.Then; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import static com.jayway.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author lzakharova + */ + +@Component +@Scope("thread") +public class WebServicesSteps { + + @Autowired + PetClinicStoreHost petClinicStoreHost; + + private Response response; + + @Then("vets webservice responds with $code code") + public void checkResponseCode(int code) { + setResponse(); + assertThat(response.getStatusCode(), equalTo(code)); + } + + @Then("response from vets webservice contains parameter $parameter with value $value") + public void checkParamInResponse(String parameter, String value) { + setResponse(); + assertThat(response.getBody().xmlPath().getString(parameter), equalTo(value)); + } + + private void setResponse() { + response = given().header("Content-Type", "application/xml"). + when().get(petClinicStoreHost.getPetClinicUrl() + "/vets.xml").andReturn(); + } +} diff --git a/spring-petclinic-it/src/main/java/com/griddynamics/webservices/suits/WebServicesExampleSuite.java b/spring-petclinic-it/src/main/java/com/griddynamics/webservices/suits/WebServicesExampleSuite.java new file mode 100755 index 000000000..59ad7c008 --- /dev/null +++ b/spring-petclinic-it/src/main/java/com/griddynamics/webservices/suits/WebServicesExampleSuite.java @@ -0,0 +1,41 @@ +package com.griddynamics.webservices.suits; + + +import com.griddynamics.qa.framework.BaseStoriesRunner; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lzakharova + */ + +public class WebServicesExampleSuite extends BaseStoriesRunner { + protected static String contextPath = "/com/griddynamics/context/webServicesApplicationContext.xml"; + + public WebServicesExampleSuite() { + super(contextPath); + } + + @Override + protected List excludeStories() { + return new ArrayList() { + { + add("**/web/**/*Given*.story"); + } + }; + } + + @Override + protected List includeStories() { + return new ArrayList() { + { + add("**/stories/webservice/**/**.story"); + } + }; + } + + @Override + public void beforeRun() { + } +} diff --git a/spring-petclinic-it/src/main/resources/com/griddynamics/context/webServicesApplicationContext.xml b/spring-petclinic-it/src/main/resources/com/griddynamics/context/webServicesApplicationContext.xml new file mode 100755 index 000000000..a18e4e6a4 --- /dev/null +++ b/spring-petclinic-it/src/main/resources/com/griddynamics/context/webServicesApplicationContext.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + ${petclinic.url} + + + + diff --git a/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseBody.story b/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseBody.story new file mode 100644 index 000000000..cee2bda58 --- /dev/null +++ b/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseBody.story @@ -0,0 +1,3 @@ +Scenario: Check response body for vets webservice +Then response from vets webservice contains parameter vets.vetList.id[0] with value 1 +Then response from vets webservice contains parameter vets.vetList.firstName[0] with value James \ No newline at end of file diff --git a/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseCode.story b/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseCode.story new file mode 100644 index 000000000..da41bcb20 --- /dev/null +++ b/spring-petclinic-it/src/main/resources/com/griddynamics/stories/webservice/CheckVetWebServiceResponseCode.story @@ -0,0 +1,5 @@ +Meta: +@smoke + +Scenario: Check response code for vets webservice +Then vets webservice responds with 200 code \ No newline at end of file