1. getting started
- place rest-assured before the JUnit dependency declaration in pom.xml
- use statically import methods, i.e. 'import static io.restassured.RestAssured.*;'
2. example
given(). // parameter
contentType()
param().
formParam().
queryParam().
when(). // action
get().
put()
post().
then(). // field
body()
statusCode()
assertion // locator + matcher
locator
--------
lotto.lottoId
lotto.winners.winnerId
find { it.@type == 'groceries' } //Groovy
hamcrest matchers
-----------------------
is
equalTo
hasItems
hasXPath
matchesXsd
matchesJsonSchemaInClasspath
matchesXsd
{
"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]
}
]
}
}
3. pass parameters
given(). //'get' will automatically convert param to query
param("param1", "value1").
when().
get("/something");
given(). //'post' and 'put' user will hava choice
formParam("formParamName", "value1").
queryParam("queryParamName", "value2").
when().
post("/something");
4. others
- log().all()
- request.relaxedHTTPSValidation()
5. multipart/form data
- multipart -> multiPart (file)
- form data -> formParam (json, name value pair)
6. link in rest-assured/SSLITest.java for example on using of certificate
7. link for client certificate example on using .jks as truststore and .p12 as keystore
8. two ways to parse json response and 1 way to reconstruct into json
Map responseBody = RestAssuredClientFactory.responseToObject(response, Map)
assert responseBody.BSBResponse.BSBName
@Step("Map response to generic Object")
public static <T> T responseToObject(Response response, Class<T> responseType) {
return response.getBody().as(responseType);
}
or
response.jsonPath().get("results[0].data.type")
then
new JsonBuilder(payload).toPrettyString()
9. do not use default charset in content header
RestAssured.config =
RestAssured.config().encoderConfig(
RestAssured.config().encoderConfig
.appendDefaultContentCharsetToContentTypeIfUndefined(false))
10. create json payload
ObjectMapper objectMapper = new ObjectMapper()
def payload = [
assetId: assetId,
udid: playerEnum.udid
]
objectMapper.writeValueAsString(payload)
11. package io.restassured.path.json
public class JsonPath {}
can be used to parse json STRING in general
12. use jackson to change json file value
import com.fasterxml.jackson.databind.ObjectMapper
String path = FileSystem.getResourcePath(fileName)
Map map = objectMapper.convertValue(loadFile(path), Map) //convert from jsonNode to map
map.channel.name = channelName //change value
objectMapper.writeValueAsString(map) //convert back to json
static JsonNode loadFile(String file) {
InputStream fileStream = new FileInputStream(file)
objectMapper.readValue(fileStream, JsonNode)
}
13. groovy define json payload
def payload = [records: []]
payload.records << [
key : [
channelName: playList.channelName,
origin : playList.origin
],
value: [
channel: [
name : playList.channelName,
enabled: false
],
date : playList.playlistDate
]