REST API testiranje s karateom

1. Pregled

U ovom ćemo članku predstaviti Karate, okvir za testiranje razvijenog ponašanjem (BDD) za Javu.

2. Karate i BDD

Karate jestizgrađena na vrhu Krastavca, drugi okvir za testiranje BDD-a i dijeli neke od istih koncepata. Jedan od tih je korištenje Gherkin datoteke koja opisuje testiranu značajku. Međutim, za razliku od Krastavca, testovi nisu napisani na Javi i u potpunosti su opisani u datoteci Gherkin.

Datoteka kornišona sprema se s ".obilježje " produženje. Počinje s Značajka ključna riječ, nakon čega slijedi naziv značajke u istom retku. Sadrži i različite scenarije ispitivanja, a svaki započinje ključnom riječi Scenarij i sastoji se od više koraka s ključnim riječima S obzirom, Kada, Zatim, I, i Ali.

Više o krastavcu i strukturi kornišona možete pronaći ovdje.

3. Ovisnosti Mavena

Da bismo koristili karate u projektu Maven, moramo dodati karate-apache ovisnost o pom.xml:

 com.intuit.karate karate-apache 0.6.0 

Trebat će nam i karate-junit4 ovisnost kako bi se olakšalo testiranje JUnit:

 com.intuit.karate karate-junit4 0.6.0 

4. Izrada testova

Za početak ćemo napisati testove za neke uobičajene scenarije u kornišonu Značajka datoteka.

4.1. Testiranje statusnog koda

Napišimo scenarij koji testira GET krajnju točku i provjerava vraća li 200 (U redu) HTTP statusni kod:

Scenarij: Testiranje valjane GET krajnje točke Dani url '// localhost: 8097 / user / get' When method GET then status 200

To očito funkcionira sa svim mogućim HTTP kodovima statusa.

4.2. Testiranje odgovora

Napišimo još jedan scenarij koji testira da REST krajnja točka vraća određeni odgovor:

Scenarij: Testiranje točnog odgovora GET krajnje točke Dani url '// localhost: 8097 / user / get' When metoda GET Onda status 200 I podudaranje $ == {id: "1234", name: "John Smith"}

The podudaranje operacija se koristi za provjeru valjanosti gdje '$' predstavlja odgovor. Dakle, gornji scenarij provjerava podudara li se odgovor '{id: ”1234 ″, ime:” John Smith ”} '.

Također možemo posebno provjeriti vrijednost datoteke iskaznica polje:

I podudarajte se s $ .id == "1234"

The podudaranje Operacija se također može koristiti za provjeru sadrži li odgovor određena polja. Ovo je korisno kada treba provjeriti samo određena polja ili kada nisu poznata sva polja odgovora:

Scenarij: Testiranje da GET odgovor sadrži određeno polje Dat url '// localhost: 8097 / user / get' When method GET then status 200 I match $ sadrži {id: "1234"}

4.3. Potvrđivanje vrijednosti odgovora pomoću markera

U slučaju da ne znamo točnu vrijednost koja se vraća, još uvijek možemo provjeriti vrijednost pomoću markera - rezervirana mjesta za podudaranje polja u odgovoru.

Na primjer, oznakom možemo označiti da li očekujemo a null vrijednost ili ne:

  • #null
  • #notnull

Ili možemo upotrijebiti marker za podudaranje određene vrste vrijednosti u polju:

  • #boolean
  • #broj
  • #niz

Ostali su markeri dostupni kada očekujemo da polje sadrži JSON objekt ili niz:

  • # niz
  • #objekt

A tu su i markeri za podudaranje na određenom formatu ili regularnom izrazu i onaj koji procjenjuje logički izraz:

  • #uuid - vrijednost odgovara UUID formatu
  • #regex STR - vrijednost odgovara regularnom izrazu STR
  • #? EXPR - tvrdi da je JavaScript izraz EKSPR ocjenjuje do pravi

Napokon, ako ne želimo bilo kakvu provjeru na terenu, možemo koristiti #zanemariti marker.

Prepišimo gornji scenarij kako bismo provjerili je li iskaznica polje nije null:

Scenarij: Testirajte GET zahtjev točan odgovor S obzirom na url '// localhost: 8097 / user / get' When method GET then status 200 I match $ == {id: "# notnull", name: "John Smith"}

4.4. Testiranje POST krajnje točke s tijelom zahtjeva

Pogledajmo konačni scenarij koji testira POST krajnju točku i uzima tijelo zahtjeva:

Scenarij: Testiranje POST krajnje točke s tijelom zahtjeva Dani url '// localhost: 8097 / user / create' I zahtjev {id: '1234', name: 'John Smith'} Kada metoda POST Tada status 200 I match $ sadrži {id : "# notnull"}

5. Pokretanje testova

Sad kad smo završili testne scenarije, možemo pokrenuti naše testove integrirajući Karate s JUnit-om.

Koristit ćemo @CucumberOptions napomena za specificiranje točnog mjesta Značajka datoteke:

@RunWith (Karate.class) @CucumberOptions (features = "classpath: karate") javna klasa KarateUnitTest {// ...}

Da bismo demonstrirali REST API, upotrijebit ćemo WireMock poslužitelj.

U ovom primjeru ismijavamo sve krajnje točke koje se testiraju u metodi označenoj s @BeforeClass. Isključit ćemo WireMock poslužitelj na način označen s @Nakon nastave:

privatni statički WireMockServer wireMockServer = novi WireMockServer (WireMockConfiguration.options (). port (8097)); @BeforeClass public static void setUp () baca izuzetak {wireMockServer.start (); configureFor ("localhost", 8097); stubFor (get (urlEqualTo ("/ user / get")) .willReturn (aResponse () .withStatus (200) .withHeader ("Content-Type", "application / json") .withBody ("{\" id \ " : \ "1234 \", ime: \ "John Smith \"} "))); stubFor (post (urlEqualTo ("/ user / create")) .withHeader ("type-type", jednakTo ("application / json")) .withRequestBody (sadrži ("id")) .willReturn (aResponse () .withStatus (200) .withHeader ("Content-Type", "application / json") .withBody ("{\" id \ ": \" 1234 \ ", name: \" John Smith \ "}")))); } @AfterClass javna statička praznina tearDown () baca izuzetak {wireMockServer.stop (); }

Kad pokrenemo KarateUnitTest klase, OSTALE krajnje točke kreira WireMock poslužitelj i pokreću se svi scenariji u navedenoj datoteci značajki.

6. Zaključak

U ovom vodiču pogledali smo kako testirati REST API-je pomoću Karate Testing Framework-a.

Kompletni izvorni kod i svi isječci koda za ovaj članak mogu se naći na GitHubu.