Johan Haleby
HTTP Builder
def http = new HTTPBuilder( 'http://ajax.googleapis.com' ) // perform a G T re!uest" expecti#g $%&' respo#se data http.re!uest( G T" $%&' ) ( uri.path = '/ajax/ser)ices/search/*e+' uri.!uer, = - ):'../'" !: '0al)i# a#d Ho++es' 1 headers.'2ser34ge#t' = '5o6illa/7./ 2+u#tu/8../ 9irefox/:./.;' // response handler for a success response code: respo#se.success = ( resp" jso# 3< pri#tl# resp.status=i#e // parse the JSON response object: jso#.respo#se>ata.results.each ( pri#tl# ? @(it.title'o9ormatti#gA : @(it.)isi+le2rlA? A A // handler for any failure status code: respo#se.failure = ( resp 3< pri#tl# ?2#expected error: @(resp.status=i#e.status0odeA : @ (resp.status=i#e.reaso#PhraseA? A A
POST with HTTP Builder
def http = new HTTPBuilder('http://twitter.com/statuses/') http.request( POST ) { uri.path = 'update.xml' body = [ status : 'update!' , source : 'httpbuilder' ] requestContentType = ContentType.URLENC response.success = { resp -> println "Tweet response status: ${resp.statusLine}" assert resp.statusLine.statusCode == 200 } }
JSON Parsing in Groovy
(?lotto?:( ?lottoBd?:7" ?*i##i#g3#um+ers?:-C";7":;"C:"D"7":1" ?*i##ers?:-( ?*i##erBd?:C:" ?#um+ers?:-C";7":;"C:":"71 A"( ?*i##erBd?:7;" ?#um+ers?:-7C":".C"..".8"CC1 A1 A A
jso#.lotto.lottoBd // 5 jso#.lotto.'*i##i#g3#um+ers' // 2, 45, 24 .. jso#.lotto.*i##ers.si6e() // 2 jso#.lotto.*i##ers-/1 // irst !inner"
REST Assured - Requests
get(?/lotto?)E post(?/lotto?)E delete(?/lotto?)E put(?/lotto?)E head(?/lotto?)E
Defaults to localhost:8080
REST Assured - JSON
(?lotto?:( ?lottoBd?:7" ?*i##i#g3#um+ers?:-C";7":;"C:"D"7":1" ?*i##ers?:-( ?*i##erBd?:C:" ?#um+ers?:-C";7":;"C:":"71 A"( ?*i##erBd?:7;" ?#um+ers?:-7C":".C"..".8"CC1 A1 A A
expect().+od,(?lotto.lottoBd?" e!ualTo(7)).*he#().get(?/lotto?)E expect().+od,(?lotto.*i##ers.*i##erBd?" hasBtems(C:"7;)).*he#().get(?/lotto?)E expect().+od,(?lotto.*i##ers.si6e()?" is(C)).*he#().get(?/lotto?)E expect().+od,(?lotto.*i##ers.*i##erBd-/1?" is(C:)).*he#().get(?/lotto?)E expect().+od,(?lotto.*i##er3#um+ers?" hasBtems(C";7" ..)).get(?/lotto?)E
REST Assured - JSON
expect(). +od,(?lotto.lottoBd?" e!ualTo(7)). +od,(?lotto.*i##ers.*i##erBd?" hasBtems(C:"7;)). +od,(?lotto.*i##ers.si6e()?" is(C)). +od,(?lotto.*i##ers.*i##erBd-/1?" is(C:)). +od,(?lotto.*i##ers.*i##er3#um+ers?" hasBtems(C";7" ..)). get(?/lotto?)E
*he#().
REST Assured -
!"
Jrecords< Jcar #ame='H%G 5aloo' maKe='Holde#' ,ear='C//H'< Jcou#tr,<4ustraliaJ/cou#tr,< Jrecord t,pe='speed'<PicKup TrucK *ith speed of CD.KphJ/record< J/car< Jcar #ame='P7/' maKe='Peel' ,ear='.IHC'< Jcou#tr,<Bsle of 5a#J/cou#tr,< Jrecord t,pe='si6e'<%treet3=egal 0ar at IIcm *ide" 7IKgJ/record< J/car< Jcar #ame='Lo,ale' maKe='Bugatti' ,ear='.I:.'< Jcou#tr,<9ra#ceJ/cou#tr,< Jrecord t,pe='price'<5ost Galua+le 0ar at @.7 millio#J/record< J/car< J/records<
expect(). +od,(?records.car-/1.F#ame?" e!ualTo(?H%G 5aloo?)). +od,(?records.car-3.1.cou#tr,?" e!ualTo(?9ra#ce?)). +od,(?records.car-/...1.F,ear?" hasBtems(?C//H?"?.IHC?)). +od,(?records.car.cou#tr,?" hasBtems(?4ustralia?"?Bsle ..?"?9ra#ce?)). get(?/xml?)E
*he#().
REST Assured #
!" $ -Path%
Jrecords< Jcar #ame='H%G 5aloo' maKe='Holde#' ,ear='C//H'< Jcou#tr,<4ustraliaJ/cou#tr,< Jrecord t,pe='speed'<PicKup TrucK *ith speed of CD.KphJ/record< J/car< Jcar #ame='P7/' maKe='Peel' ,ear='.IHC'< Jcou#tr,<Bsle of 5a#J/cou#tr,< Jrecord t,pe='si6e'<%treet3=egal 0ar at IIcm *ide" 7IKgJ/record< J/car< Jcar #ame='Lo,ale' maKe='Bugatti' ,ear='.I:.'< Jcou#tr,<9ra#ceJ/cou#tr,< Jrecord t,pe='price'<5ost Galua+le 0ar at @.7 millio#J/record< J/car< J/records<
expect(). *he#().
+od,(hasMPath(?/records/car-.1/F#ame?)" e!ualTo(?H%G 5aloo?)). +od,(hasMPath(?/records/car-.1/cou#tr,-text()='4ustralia'?)). get(?/xml?)E
REST Assured #
S& ' &T&
Jrecords< Jcar #ame='H%G 5aloo' maKe='Holde#' ,ear='C//H'< Jcou#tr,<4ustraliaJ/cou#tr,< Jrecord t,pe='speed'<PicKup TrucK *ith speed of CD.KphJ/record< J/car< Jcar #ame='P7/' maKe='Peel' ,ear='.IHC'< Jcou#tr,<Bsle of 5a#J/cou#tr,< Jrecord t,pe='si6e'<%treet3=egal 0ar at IIcm *ide" 7IKgJ/record< J/car< Jcar #ame='Lo,ale' maKe='Bugatti' ,ear='.I:.'< Jcou#tr,<9ra#ceJ/cou#tr,< Jrecord t,pe='price'<5ost Galua+le 0ar at @.7 millio#J/record< J/car< J/records<
expect().+od,(matches>td(dtd)).*he#().get(?/xml?)E expect().+od,(matchesMsd(xsd)).*he#().get(?/xml?)E
Para(eters
given(). param(name1, value1). param(name2, value2). expect(). statusCode(200). when(). get(/something);
given().params(name1,value1,name2, value2).when().get(/something); get(/something?name1=value1&name2=value2); Map<String, String> parameters = new HashMap<~>(..); given().params(parameters).when().get(/something); // URL encoding happens automatically given().param(name, value).when().post(/something);
Request Headers ' )oo*ies
given(). header(headerName, value). cookie(cookieName, value). expect(). statusCode(200). when(). get(/something);
given().headers(name1,value1,name2, value2).when().get(/something); given().cookies(name1,value1,name2, value2).when().get(/something); Map<String, String> headers = new HashMap<~>(..); given().headers(headers).when().get(/something); Map<String, String> cookies = new HashMap<~>(..); given().cookies(cookies).when().get(/something);
+alidate Headers ' )oo*ies
expect().header("name", "value").when().get("/something"); expect().cookie("name", containsString("value")).when().get("/something"); expect().headers("name1", "value1", name2,containsString("value")).. expect().cookies("name1", "value1", name2,containsString("value")).. Map<String, Object> expected = new HashMap<~>(..); expected.put(name1, value1); expected.put(name1, containsString(something); expect().headers(expected).when().get(/something);
REST Assured - Request Body
// String given().body("{ \"message\" : \"helloworld\"}").when().post("/jsonBody"); // Binary byte[] body = { 23, 42, 127, 123}; given().body(body).when().post("/binaryBody");
Request ' Res,onse Body
given().request().body(body).and().expect().response().body(containsString("so mething") ).when().post("/header");
REST Assured - Authenti-ation
Basic Form Digest OAuth Certificate
given().auth().basic("jetty","jetty").when().get("/secured/basic"); given().auth().certificate(certURL,"password).when().get("/secured/cert");
REST Assured # Advan-ed validation
Jrecords< Jcar #ame='H%G 5aloo' maKe='Holde#' ,ear='C//H'< Jcou#tr,<4ustraliaJ/cou#tr,< Jrecord t,pe='speed'<PicKup TrucK *ith speed of CD.KphJ/record< J/car< Jcar #ame='P7/' maKe='Peel' ,ear='.IHC'< Jcou#tr,<Bsle of 5a#J/cou#tr,< Jrecord t,pe='si6e'<%treet3=egal 0ar at IIcm *ide" 7IKgJ/record< J/car< Jcar #ame='Lo,ale' maKe='Bugatti' ,ear='.I:.'< Jcou#tr,<9ra#ceJ/cou#tr,< Jrecord t,pe='price'<5ost Galua+le 0ar at @.7 millio#J/record< J/car< J/records<
expect().
+od,(?records.car.fi#d ( it.record.Ft,pe == 'speed' A.cou#tr,?" e!ualTo(?4ustralia?)).
REST Assured - &e.aults
RestAssured.baseURI = "http://myhost.org"; RestAssured.port = 80; RestAssured.basePath = "/resource"; RestAssured.authentication = basic("username", "password");
get("/xml")
http://myhost.org:80/resource/xml with basic auth
RestAssured.reset();
REST Assured # Res,onse $/%
Response response = get("/lotto"); // Get all headers Map<String, String> allHeaders = response.getHeaders(); // Get a single header value: String headerName = response.getHeader("headerName"); // Get all cookies Map<String, String> allCookies = response.getCookies(); // Get a single cookie value: String cookieValue = response.getCookie("cookieName"); // Get status line String statusLine = response.getStatusLine(); // Get status code int statusCode = response.getStatusCode();
REST Assured # Res,onse $0%
Response response = get("/lotto"); String responseBody = response.getBody().asString(); String body = get("/lotto").asString();
REST Assured # JSON Path
{"lotto":{ "lottoId":5, "winning-numbers":[2,45,34,23,7,5,3], "winners":[{ "winnerId":23, "numbers":[2,45,34,23,3,5] },{ "winnerId":54, "numbers":[52,3,12,11,18,22] }] } } String json = get("/lotto").asString(); // Static import with from JsonPath int lottoId = with(json).getInt("lotto.lottoId); List<Integer> winnerIds = with(json).get("lotto.winners.winnerId"); // Or a bit more efficiently JsonPath jsonPath = new JsonPath(json).setRoot("lotto"); int lottoId = jsonPath.getInt("lottoId"); List<Integer> winnerIds = jsonPath.get("winners.winnderId");
REST Assured #
!" Path
Jrecords< Jcar #ame='H%G 5aloo' maKe='Holde#' ,ear='C//H'< Jcou#tr,<4ustraliaJ/cou#tr,< Jrecord t,pe='speed'<PicKup TrucK *ith speed of CD.KphJ/record< J/car< Jcar #ame='P7/' maKe='Peel' ,ear='.IHC'< Jcou#tr,<Bsle of 5a#J/cou#tr,< Jrecord t,pe='si6e'<%treet3=egal 0ar at IIcm *ide" 7IKgJ/record< J/car< J/records<
String xml = get("/xml").asString(); // Static import with from XmlPath String country = with(xml).get("records.car[0].country); List<String> carNames = with(xml).get("records.car.@name"); // Or a bit more efficiently XmlPath xmlPath = new XmlPath(xml).setRoot("records"); String country = xmlPath.get("car[0].country"); List<String> carNames = xmlPath.get("car.@name");
REST Assured # (ore11
Specify parser for mime-type Content type Status codes Status line ..
2e3 Page ' &E!O