- 引入maven依赖
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- 启动web服务
- 添加单元测试用例
@Before
public void setup() {
RestAssured.baseURI = "https://127.0.0.1:6443/as-api";
RestAssured.basePath = "/api/v1";
//单项认证允许所有客户端通过
//RestAssured.useRelaxedHTTPSValidation();
}
Rest-Assured 可以直接在 GET 的时候,同时进行验证。如下例子:
@Test
public void test1() {
given()
.param("param", "1223434")
.expect()
.statusCode(200)
.body("challenge", equalTo("1223434"))
.when()
.get("/test2");
}
或者这样(是不是发现特别灵活,一般情况下,通过一个链式调用就可以完成一次API的测试
get("/test2?param=1223434").then().body("challenge", equalTo("1223434"));
post请求
@Test
public void test() {
Map<String, Object> map = new HashMap<>();
map.put("mode", 2);
map.put("id", "23452345234");
map.put("identity", "11111111");
map.put("challenge", "s234523452345g");
map.put("response", "98CF0059D520E39E2016EB3AC70763BB26B665D77CD81378F11E5479E7094ACD");
map.put("sign", "1232321");
given()
.contentType(ContentType.JSON)
.request()
.body(JSON.toJSONString(map))
.post("/test").then().assertThat()
.body("mode", equalTo("2"),"id",equalTo("23452345234")).time(lessThan(1000L), TimeUnit.SECONDS);
}
其中第一个body体是requestBody,第二个body是responseBody,而且可以直接断言相应body体里面的内容是不是和自己预判的一样。并且在特别情况下还可以检测请求时间是不是超过我们的预期。 文件上传
@Test
public void testFile() {
Response post = RestAssured.given()
.given().param("id", "sdfgfsdg").multiPart("file1", new File("d:/pic.png"))
.post("/apply/upload.do");
System.out.println(post.asString());
}
如果你是双向认证只需要这样一个链式调用就OK了,如果使用HttpUrlConention或者httpclient可不止这一行程序能够解决问题的,当然这并不是说httpclient不好用,只能说,Rest-assured跟我们提供了更好的封装,降低我们犯错的几率,使我更高效率的投入到我们业务中。
RestAssured.authentication = RestAssured
.certificate("clq.truststore",
"123456","clq.p12", "123456",
CertificateAuthSettings
.certAuthSettings()
.keyStoreType("PKCS12")
.trustStoreType("jks"));
这里只简单列举基于get和post以及HTTP(S)请求,从中可以看出rest-assured的确语法简单好用。 其中他还提供很多好用的API,例如操作头部或者Cookie,或者在调用的过程种改变端口号等功能。这些我们都可以根据API进行查找使用。 具体详见测试用例源码