Rest Assured gyakorló feladat

Rest Assured gyakorló feladat
2022-03-20T15:48:26+01:00
2022-03-21T16:15:54+01:00
2022-10-15T21:20:57+02:00
WorkingClassHero
Sziasztok,

a RestAssured-et gyakorlom, nem vagyok benne profi. A weben bóklászva találtam egy feladatot, háttér adatbázissal, ezt szeretném megoldani. Fel is állitottam egy Java projektet, és pl. az adatbázis lekérdezés már megy a RestAssured-del, sőt, a törlés is. De a Post és a Put nem mennek.

Ez swagger lapja az webshop-nak : webshop

És ezeket a feladatokat akarom megcsinálni : 

- "available" státusszal rendelkező kisállatok lekérdezése (get), az eredményre assert futtatása
- új állat felvitele (post), az eredmény assertálása
- az ujonnan felvitt kisállat státuszának "sold"-ra állitása (put), és az uj státuszra assert futtatása
- ezen eladott állat törlése (delete), a törlésre assert futtatása


És ez a meglévő kódom, a get és a delete működik, bár a delete fixen megadott értékre megy. Előzőleg megnézem, mi az, amit nem töröltem ki, és azt irom be a kodba. Tehát nem a felvitt elemet törlöm, mert nem tudom felvinni az új adatot a szerverre. Tudnátok segíteni egy kicsit ? A POST és a PUT -ban kellene segíteni, és ha azok mennek, akkor megpróbálnám szépíteni a dolgot.

import io.restassured.RestAssured; import io.restassured.response.Response; import io.restassured.specification.RequestSpecification; import org.testng.Assert; import org.testng.annotations.Test; import static io.restassured.RestAssured.given; import org.json.simple.JSONObject; public class TestCases { @Test public void getAvailablePets() { String url = "https://petstore.swagger.io/v2/pet/findByStatus?status=available"; given() .when() .get(url) .then() .assertThat() .statusCode(200); } @Test public void postNewAvailablePet() { } @Test public void updateLastPetStatus() { String url = "https://petstore.swagger.io/v2/pet/"; RestAssured.baseURI = "https://petstore.swagger.io/v2"; JSONObject obj = new JSONObject(); obj.put ("id","9223372000668885684"); obj.put ("category","{id :0,name:string}"); obj.put ("name","tigris"); obj.put ("photoUrls","www.picture.com"); obj.put ("tags","[{id:0,name:string}]"); obj.put ("status","sold"); RequestSpecification request = RestAssured.given(); request .contentType("application/json" ) .accept("application/json") .body(obj.toJSONString()); Response response = request.put("/pet/"+"9223372000668885684"); int statusCode = response.getStatusCode(); System.out.println(response.asString()); Assert.assertEquals(statusCode, 200); } @Test public void deleteLastPet() { String url = "https://petstore.swagger.io/v2/pet/9223372000668883762"; given() .when() .delete(url) .then() .assertThat() .statusCode(200); } }
Mutasd a teljes hozzászólást!
CMD alatt helyesen:

curl -X POST https://petstore.swagger.io/v2/pet -H "accept:application/json" -H "Content-Type: application/json" -d "{"""id""":0,"""category""":{"""id""":0,"""name""":"""string"""},"""name""":"""Bodri""","""photoUrls""":["""string"""],"""tags""":[{"""id""":0,"""name""":"""string"""}],"""status""":"""available"""}"
Mutasd a teljes hozzászólást!

  • Nem vagyok jártas sem a Java, sem a Rest Assured világában, de amit én megnéznék:
    - a test outputja / logja
    - Fiddlerrel megnézném a hálózati kommunikációt, és hogy mit válaszolt a request-re a szerver
    - ellenőrizném a Fiddler capture alapján azt, hogy amit a teszt küld, megfelel-e a Swagger specifikációnak

    Abban sem vagyok biztos, hogy a Rest Assured a jó eszköz erre a feladatra. Ha nem lenne Swaggered, tökéletes lenne. A Swagger viszont egy contract két fél közt - a szerver fejlesztői vállalják, hogy a szerver API-jai pontosan úgy fognak viselkedni, ahogy a Swagger azt leírja, és a kliens fejlesztői pedig ennek hála pontosan tudják, milyen request-eket küldhetnek a szerver felé. Ez a Rest Assured nekem úgy tűnik, azt várja el, hogy kézzel barkácsold össze a request-et a test case-ben. Ellenben itt nem az a feladat, hogy jó kódot tudsz-e kézzel összerakni, hanem az, hogy a szerver megfelel-e a specifikációnak. Véleményem szerint jobb irány, ha a Swagger dokumentumból kliens kódot generálsz a swagger-codegen vagy az openapi-generator programok egyikével, és azt használod a Rest Assured helyett, sima jUnit (vagy legyen szó bármilyen más unit testing framework-ről) teszteket írva.
    Mutasd a teljes hozzászólást!
  • Köszönöm a részletes választ.

    Ez a feladat valamikor egy teszt feladat volt egy cég számára, akik RestAssured-et használtak. Ezért akarom én is ezzel megoldani a feladatot.

    A PUT parancs hibakódja egyébként 405
    Mutasd a teljes hozzászólást!
  • A PUT és a DELETE teljesen másképp van csinálva, a DELETE strukturája volt az eredeti. De mivel ahhoz hasonlóan a PUT nem ment, ezért próbáltam ahogy itt irtam, de azzal se megy. Ezt az egészet én csináltam, nem a netről szedtem le a kódot, igaz, csak a GET és a DELETE jó.
    Mutasd a teljes hozzászólást!
  • Nem értem, hogy a swagger lap alapján a következő POST curl művelet miért nem  jó. Láttok esetleg benne hibát ?

    curl -X POST https://petstore.swagger.io/v2/pet -H 'accept:application/json' -H 'Content-Type: application/json' -d '{"id":0,"category":{"id":0,"name":"string"},"name":"Bodri","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}' <?xml version="1.0" encoding="UTF-8" standalone="yes"?><apiResponse><type>unknown</type></apiResponse>curl: (6) Could not resolve host: application
    Mutasd a teljes hozzászólást!
  • Azért, mert a Windows-os command prompt-ból curl-özöl bash helyett. Bizonyára a command line argument-eket másképp kell escape-elni. Ezért hiszi azt többek között a curl CMD alatt, hogy te az "application" DNS nevű szerver felé akarsz requestet küldeni.

    CMD esetén nálam:

    C:\> curl --version curl 7.79.1 (Windows) libcurl/7.79.1 Schannel Release-Date: 2021-09-22 Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets C:\> curl -X POST https://petstore.swagger.io/v2/pet -H 'accept:application/json' -H 'Content-Type: application/json' -d '{"id":0,"category":{"id":0,"name":"string"},"name":"Bodri","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}' <?xml version="1.0" encoding="UTF-8" standalone="yes"?><apiResponse><type>unknown</type></apiResponse>curl: (6) Could not resolve host: applicationC:\>
    Bash esetén:

    $ curl --version curl 7.81.0 (x86_64-w64-mingw32) libcurl/7.81.0 OpenSSL/1.1.1m (Schannel) zlib/1.2.11 brotli/1.0.9 zstd/1.5.2 libidn2/2.3.1 libssh2/1.10.0 nghttp2/1.46.0 Release-Date: 2022-01-05 Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL SSPI TLS-SRP zstd $ curl -X POST https://petstore.swagger.io/v2/pet -H 'accept:application/json' -H 'Content-Type: application/json' -d '{"id":0,"category":{"id":0,"name":"string"},"name":"Bodri","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 292 0 155 100 137 175 155 --:--:-- --:--:-- --:--:-- 331{"id":9223372000668928629,"category":{"id":0,"name":"string"},"name":"Bodri","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}
    Mutasd a teljes hozzászólást!
  • CMD alatt helyesen:

    curl -X POST https://petstore.swagger.io/v2/pet -H "accept:application/json" -H "Content-Type: application/json" -d "{"""id""":0,"""category""":{"""id""":0,"""name""":"""string"""},"""name""":"""Bodri""","""photoUrls""":["""string"""],"""tags""":[{"""id""":0,"""name""":"""string"""}],"""status""":"""available"""}"
    Mutasd a teljes hozzászólást!
  • Köszönöm, jó a parancsori curl !

    Adom a pontot, és gyakorlatilag újra nyitom a témát, innentől, azaz ha parancsosorból megy a curl, de a RestAssured-ből még nem.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd