Hvernig á að bæta við gúrkulagi ofan á REST-vissu API prófunum

Þessi færsla veitir skref fyrir skref leiðbeiningar um hvernig á að bæta við gúrkulagi ofan á api próf sem eru skrifuð í REST-fullvissu.

DSL af REST-fullvissu veitir nú þegar BDD-stíl ritun á prófunum í gefnu-þegar-þá sniði, en það er samt grafið í kóðanum. Með öðrum orðum, ef þú vilt sjá hvaða atburðarás er fjallað um, þá þarftu samt að grafa þig niður í api prófin og lesa kóðann. Engar eiginleikaskrár eru til.

Markmið þessarar færslu er að endurbæta núverandi REST-vissar API prófanir með því að bæta við gúrku og lögun skrám, svo að hægt sé að lesa atburðarás skýrari án þess að þurfa að skoða undirliggjandi kóða.

HVÍTT örugg próf API

Í þessu dæmi munum við skrifa kóða til að prófa API fyrir sköpun notenda.

Í fyrsta lagi höfum við sjálfstætt REST-fullvissað og JUnit próf, sem er í:

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);
} }

Ofangreind próf er hægt að keyra beint úr bekknum þar sem JUnit getur kallað á það.

The setConfig() aðferð setur forsenduna. Prófunaraðferðin gerir aðgerðirnar (sendir beiðnina) og fullyrðir síðan um svarkóða og svörunun.

Því næst munum við skoða hvernig setja má gúrkulögin ofan á ofangreindu api prófið hér að ofan.

Agúrka og REST-viss API próf

Það fyrsta sem við þurfum að gera er að bæta gúrkufíkninni við verkefnið.

Með því að nota Gradle, í build.gradle okkar skrá, við setjum þessar undir 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' }

Og þessir undir configuration í build.gradle skrá:

configurations {
cucumberRuntime {
extendsFrom testImplementation
} }

Við þurfum líka að búa til verkefni í build.gradle skrá til að keyra agúrka lögun skrár sem innihalda atburðarás:

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']
}
} }

Uppbygging verkefnis fyrir agúrku

Við þurfum einnig að breyta verkefnaskipan okkar til að koma til móts við breytingar á agúrku.

Aðgerðarskrárnar verða vistaðar í:

src/test/resources/scenarios

Skrefaskilgreiningarnar verða vistaðar í

src/test/java/scenarios

Næst munum við búa til lögunaskrá sem heitir UserScenarios.feature og settu það undir src/test/resources/scenarios möppu.

Aðgerðarskráin mun líta út eins og:

@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

Nú þurfum við að taka í sundur REST-fullvissa JUnit prófið til að skrifa skref skilgreiningar sem hægt er að líma við fullyrðingarnar í eiginleikaskránni okkar.

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);
} }

Eins og sjá má á ofangreindum skrefaskilgreiningum, fyrir hverja línu í atburðarásinni í eiginleikaskránni, höfum við samsvarandi skrefskilgreiningu.

Aðferðin með Given skýring setur forsendur. Aðferðin með When skýring gerir aðgerðina við að senda beiðnina og loks aðferðina með Then skýring framkvæmir fullyrðingarnar um svarið.

Til að framkvæma ofangreint er allt sem við þurfum að gera að framkvæma skipunina ./gradle cucumber í flugstöð frá verkefnarótinni.

Þegar prófin hafa verið keyrð eru niðurstöðurnar vistaðar í build/test-results/functional.html.

Niðurstaða

Í þessari færslu fórum við yfir skref fyrir skref leiðbeiningar um hvernig á að bæta við gúrkulagi ofan á REST-vissu API prófunum. Með því að gera það getum við skrifað atburðarás okkar í eiginleikaskrár sem verða læsilegri fyrir fólk sem ekki er tæknilegt.