Me pehea te Taapiri i te Apa o te Kukamo ki runga o nga Whakamatau API WHAKAMAHI

Ko tenei whakairinga he tohu taahiraa-i te-taahiraa ki te whakauru i te papa kukamo ki runga ake o nga whakamatautau api i tuhia ki te REST-sure.

Kua whakawhiwhia e te DSL a REST-sure te tuhi-a-tuhi mo te whakamatautau BDD i roto i te whakatakotoranga Mo te Waa-Ina-Ana, engari kei te nehu tonu ki te waehere I etahi atu kupu, mena kei te hiahia koe kia kite he aha nga ahuatanga ka kapi, me keri tonu koe ki nga whakamatautau api ka panui i te waehere. Kaore he konae konae.

Ko te whaainga o tenei pou ko te whakatika i nga whakamatautau api-a te REST-tino ma te taapiri i nga totoma me nga konae whakaatu, kia marama ake ai te panui i nga ahuatanga me te kore e titiro ki te waehere kei raro




Nga Whakamatau API -Whirinaki-pono

I roto i tenei tauira, ka tuhia e maatau te waehere hei whakamatau i te mahinga a nga kaiwhakamahi.

Tuatahi, he whakamatautau tuuturu-whakamoemiti me te JUnit mo tatou, e noho ana i:


src/test/java/io.devqa/scenarios

import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.response.Response; import org.junit.jupiter.api.*; import static io.restassured.RestAssured.given; public class UserTests {
private static String path;
private static String validRequest = '{ ' +

' 'username': 'test-api-user', ' +

' 'email': 'test-api-user@email.com', ' +

' 'password': 'Passw0rd123!', ' +

' 'name': 'Test Api-User' }';
@BeforeAll
public static void setConfig() {
RestAssured.baseURI = 'https://localhost:8080';
path = '/users';
}
@Test
public void shouldBeAbleToCreateNewUser() {
Response createUser = given()


.auth()


.preemptive()


.basic('MY_USERNAME', 'MY_PASSWORD')


.header('Accept', ContentType.JSON.getAcceptHeader())


.contentType(ContentType.JSON)


.body(validRequest)


.post(path)


.then().extract().response();
Assertions.assertEquals(201, createUser.getStatusCode());

String username = createUser.jsonPath().get('username');
String email = createUser.jsonPath().get('email');
String name = createUser.jsonPath().get('name');
String id = createUser.jsonPath().get('id');

Assertions.assertEquals('test-api-user', username);
Assertions.assertEquals('test-api-user@email.com', email);
Assertions.assertEquals('Test Api-User', name);
Assertions.assertNotNull(id);
} }

Ko te whakamatautau i runga ake nei ka taea te whakahaere tika mai i te akomanga na te mea ka taea e JUnit te karanga.

Ko te setConfig() tikanga whakatakoto te mua-whakaritenga. Ma te tikanga whakamatautau e mahi nga mahi (te tuku i te tono) ka whakaatu i runga i te waehere whakautu me te utu whakautu.

A muri ake, ka tirohia me pehea te whakanoho i te papa totoma ki runga ake o te whakamātautau api-REST-i runga ake nei.




Kukama me te WHAKAMAHI KAUPAPA API

Ko te mea tuatahi hei mahi ma tatou ko te whakauru i te totika totika ki ta tatou kaupapa.

Ma te whakamahi i te Maehe, i roto i ta maatau build.gradle konae, ka hoatu e matou enei ki raro o te dependencies:

dependencies {
testCompile 'io.cucumber:cucumber-java:6.2.2'
testCompile 'io.cucumber:cucumber-junit:6.2.2'
testCompile 'io.rest-assured:rest-assured:3.3.0'
testCompile 'com.jayway.jsonpath:json-path:2.4.0' }

Ana ko enei kei raro configuration kei build.gradle konae:

configurations {
cucumberRuntime {
extendsFrom testImplementation
} }

Me hanga ano he mahi i roto i te build.gradle konae ki te whakahaere i nga konae kukama kei roto nga ahuatanga nei:


task cucumber() {
dependsOn assemble, compileTestJava
doLast {
mkdir 'build/test-results/'
javaexec {

main = 'io.cucumber.core.cli.Main'

classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output

args = ['--plugin', 'pretty', '--plugin', 'html:build/test-results/functional.html', '--plugin', 'junit:build/test-results/functional.xml','--tags', '@functional', '--glue', 'scenarios', 'src/test/resources']
}
} }

Hanganga Kaupapa mo te Kukamo

Me whakarereke i a maatau mahinga kaupapa kia pai ai te whakarereke i te totoma.

Ka penapena nga konae aahua i:

src/test/resources/scenarios

Ko nga whakamarama taahiraa ka penapena i roto


src/test/java/scenarios

Muri iho, ka hangahia e maatau he konae hono e kiia nei UserScenarios.feature ka waiho ki raro src/test/resources/scenarios kōpaki

He penei te ahua o te konae:

@functional Feature: User Scenarios Scenario: I should be able to create a new user
Given the users endpoint exists
When I send a valid create user payload
Then response status code should be 201
And create user response should be valid

I tenei wa me whakakore taatau whakamatautau JUnit REST-pono ki te tuhi i nga whakamaaramatanga taahiraa ka taea te piri ki nga korero ki ta maatau konae konae.


import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.response.Response; import org.junit.jupiter.api.Assertions; import static io.restassured.RestAssured.given; public class UserScenarios {
private String path;
private Response response;
private String validRequest = '{ ' +

' 'username': 'test-api-user', ' +

' 'email': 'test-api-user@email.com', ' +

' 'password': 'Passw0rd123!', ' +

' 'name': 'Test Api-User' }';
@Given('the users endpoint exists')
public void preReq() {
RestAssured.baseURI = 'https://localhost:8080';
path = '/users';
}
@When('I send a valid create user payload')
public void createUser() {
response = given()


.auth()


.preemptive()


.basic('MY_USERNAME', 'MY_PASSWORD')


.header('Accept', ContentType.JSON.getAcceptHeader())


.contentType(ContentType.JSON)


.body(validRequest)


.post(path)


.then().extract().response();
}
@Then('response status code should be {int}')
public void checkResponseStatusCode(int code) {
Assertions.assertEquals(code, response.getStatusCode());
}
@And('create user response should be valid')
public void verifyResponse() {
String username = response.jsonPath().get('username');
String email = response.jsonPath().get('email');
String name = response.jsonPath().get('name');
String id = response.jsonPath().get('id');

Assertions.assertEquals('test-api-user', username);
Assertions.assertEquals('test-api-user@email.com', email);
Assertions.assertEquals('Test Api-User', name);
Assertions.assertNotNull(id);
} }

Ka kitea i roto i nga whakamaaramatanga o runga ake nei, mo ia raina i roto i te horopaki o te konae whakaaturanga, he whakamaarama taahiraa rite ta tatou.

Ko te tikanga me te Given Tuhinga ka whakatakoto i nga whakaritenga o mua. Ko te tikanga me te When ko te taupatupatu te mahi i te tuku tono me te mutunga ko te tikanga me te Then Tuhinga e whakaatu ana i nga korero mo te whakautu.

Hei whakatutuki i nga korero o runga ake nei, ko te mahi noa i te whakahau ./gradle cucumber i roto i te tauranga mai i te pakiaka kaupapa.

Ka mutu ana nga whakamatautau, ka tiakina nga hua ki build/test-results/functional.html.



Whakamutunga

I tenei panui, i hipokina e matou tetahi aratohu taahiraa-i-te-iti me pehea te taapiri i tetahi papanga kukamo ki runga o nga whakamatautau API REST-tino Ma te mahi pera, ka taea e taatau te tuhi i o maatau ahuatanga ki roto i nga konae konae ka kitea ake e nga taangata kore-hangarau.