一、根路径(Root path)
为了避免在body方法中使用重复的路径来断言,我们可以指定一个根路径(root path),比如:
我们以前的写法是:
1 when(). 2 get("/something"). 3 then(). 4 body("x.y.firstName", is(..)). 5 body("x.y.lastName", is(..)). 6 body("x.y.age", is(..)). 7 body("x.y.gender", is(..));
现在我们可以使用root path的方法来写:
1 when(). 2 get("/something"). 3 then(). 4 root("x.y"). //我们也可以使用root方法来设置根路径 5 body("firstName", is(..)). 6 body("lastName", is(..)). 7 body("age", is(..)). 8 body("gender", is(..));
我们也可以设置默认的根路径:
1 RestAssured.rootPath="x.y";
在许多高级的测试用例中,在根路径上附加一些参数也非常有用,我们可以使用 appendRoot 方法来实现:
1 when(). 2 get("/jsonStore"). 3 then(). 4 root("store.%s", withArgs("book")). 5 body("category.size()", equalTo(4)). 6 appendRoot("%s.%s", withArgs("author", "size()")). 7 body(withNoArgs(), equalTo(4));
这里也可以对根路径进行拆分:
1 when(). 2 get("/jsonStore"). 3 then(). 4 root("store.category"). 5 body("size()", equalTo(4)). 6 detachRoot("category"). 7 body("size()", equalTo(1));
二、URL编码(URL Encoding)
由于rest-assured提供了非常好的自动编码功能,通常情况下我们在使用rest-assured时不需要考虑URL编码的事情。但是在有些测试用例当中,我们需要关闭URL编码的功能。其中一个原因是我们在将参数传递给rest-assured之前,我们已经对参数进行了URL编码,为了避免二次编码我们需要告诉rest-assured关闭URL编码的功能。比如:
1 String response = given().urlEncodingEnabled(false).get("https://jira.atlassian.com:443/rest/api/2.0.alpha1/search?jql=project%20=%20BAM%20AND%20issuetype%20=%20Bug").asString(); 2 ..
或者:
1 RestAssured.baseURI = "https://jira.atlassian.com"; 2 RestAssured.port = 443; 3 RestAssured.urlEncodingEnabled = false; 4 final String query = "project%20=%20BAM%20AND%20issuetype%20=%20Bug"; 5 String response = get("/rest/api/2.0.alpha1/search?jql={q}", query); 6 ..