given()这是一个请求对象,get(url)这个是做GET类型请求的发送操作,then()这个是验证相关的对象,前面get()执行完了就能拿到response对象,然后response对象下有一些验证相关的类,then()就是验证类的一个方法。
log().all() 打印全部日志大控制台
1、环境搭建
新建个maven 工程,直接在pom文件配置如下,导入Rest Assured和TestNG相应的包,可以根据实际情况导入最新版本。
2、Get Demo 演示
https://blog.csdn.net/Liuyuelinjiayou?t=1&orderby=ViewCount
以这个接口为例
我们用Rest Assured 要模拟这个请求,
首先我们需要先导入静态方法
import static io.restassured.RestAssured.*;
接下来写简单的demo, https要添加SSL, 参数可以放在parasm中。
import io.restassured.RestAssured;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.SSLConfig;
import io.restassured.response.Response;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
public class Apitools {
@Test
public void getHttpTest(){
Response response = given()
//配置SSl让所有请求支持所有的主机名
.config((RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())))
.params("q","自动化测试","start",0,"count",2)
.get("https://api.douban.com/v2/book/search");
//打印出response的body
response.print();
}
}
3、Post Demo演示
接口如下:这个接口是项目中一个接口, 请求
https://idp-stg.jryzt.com/vega/core/inner/deposit
body:
{
"channel": "QJ10301",
"serviceCode":"RB000001",
"requestNo": "56789876578903456",
"requestData": {
"channelUserId":"shengou01",
"productCode":"",
"prodComCode":"QJCCB",
"idNo":"410102199003076074"
}
}
响应:
{
"responseCode": "000000",
"responseData": {
"bankCardList": [
{
"bankCardNo": "6222022201007325758",
"phoneNo": "15221203746"
}
],
"eacctCardNo": "6214970200002676",
"eacctState": "12",
"prodComCode": "QJCCB",
"prodComName": "曲靖市商业银行"
},
"responseMessage": "处理成功"
}
完整demo
import io.restassured.RestAssured;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.SSLConfig;
import io.restassured.http.Headers;
import io.restassured.response.Response;
import org.testng.annotations.Test;
import sun.jvm.hotspot.memory.HeapBlock;
import java.util.ArrayList;
import java.util.Map;
import static io.restassured.RestAssured.*;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsEqual.equalTo;
public class Apitools {
// @Test
public void getHttpTest(){
Response response = given()
//配置SSl让所有请求支持所有的主机名
.config((RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())))
.params("q","自动化测试","start",0,"count",2)
.get("https://api.douban.com/v2/book/search");
//打印出response的body
response.print();
//获取response的headers 并输出
Headers headers = response.getHeaders();
System.out.println("headers:" + headers.toString());
// 获取Response中header名为Content-Type的值
String contentType = response.getHeader("Content-Type");
System.out.println("contentTypesss:" + contentType);
// 等同上面方法
System.out.println(headers.get("Content-Type"));
//如果headers 不为空,返回true
System.out.println(headers.exist());
//获取所有cookie,返回map
Map<String,String> cookieMap = response.cookies();
// keySet :该方法返回map中所有key值的列表。
for (String key : cookieMap.keySet()){
System.out.println(key + ":" + cookieMap.get(key));
}
}
@Test
public void postTest(){// 电子账户信息
Response response = given()
//设置request Content-Type
.headers("Content-Type","application/json")
.body("{\n" +
"\"channel\": \"QJ10301\",\n" +
"\"serviceCode\":\"RB000001\",\n" +
"\"requestNo\": \"56789876578903456\",\n" +
"\"requestData\": {\n" +
" \"channelUserId\":\"shengou01\",\n" +
" \"productCode\":\"\",\n" +
" \"prodComCode\":\"QJCCB\",\n" +
" \"idNo\":\"410102199003076074\"\n" +
"}\n" +
"}\n")
.expect() //开始校验response是否达到预期
//判断responseCode是否包含了000000
// .body("responseCode",hasItems(0000))//这个中不能适用
.body("responseData.prodComCode",is("QJCCB"))
//直接字符串匹配
.body("responseData.eacctState",equalTo("12"))
.when()
.post("https://idp-stg.jryzt.com/vega/core/inner/deposit");
//打印出response
response.print();
//获取reponse的状态码200,是int类型
System.out.println("StatusCode" + response.getStatusCode());
//获取Response body,并转成String类型:
//response.getBody().asString(),打印出来结果和上面一样
System.out.println("asString:"+response.getBody().asString());
//解析json
//获取响应结果里的bankCardList
ArrayList<ArrayList<String>> bankCardLists = response.jsonPath().get("responseData.bankCardList");
for (int i = 0; i < bankCardLists.size(); i++) {
System.out.println("bankCardLists:"+ bankCardLists.get(i));
}
System.out.println("_________");
//获取响应结果里的eacctCardNo
System.out.println("eacctCardNo:" + response.jsonPath().get("responseData.eacctCardNo").toString());
}
}
4、解析JSON
Rest Assured 自带支持对JSON、xml的解析
如上的,解析。
response.jsonPath().get("")
5、校验Response 是否达到预期
Rest Assured提供了类似hasITems ,is,equalTo等静态方法供使用,使用时先导入方法,无法自动匹配导入。
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsEqual.equalTo;
尽管Rest Assured 提供了校验方法,但是在实际API自动化测试过程中,因为往往需要校验的字段非常多,建议还是直接先把要校验的JSON字段解析出来,再通过TestNG提供的Assert类进行校验。
网友评论