利用rest-assured做接口自动化测试,在执行用例时,有时候我们需要上一步请求的返回值作为参数,例如登录token,生成的用户id等;
- 登录rest-assured的官方GitHub地址(https://github.com/rest-assured/rest-assured/wiki/Usage)查看文档发现
实例演示
-
现有如下关于患者信息的接口返回,
Request method: POST Request URI: http://XXX/brain/rest/patient/insert Proxy: <none> Request params: <none> Query params: <none> Form params: <none> Path params: <none> Headers: Token=Bearer C891hs2oaDrFZTr+E8YdqAOGkfMiRD7GdyZJKEFHPA4QNkyj6JVAsoFdqXq2FvhgOhALlDZRvcXF+1QNbG3VmA== Host=XXX.com Accept=*/* Content-Type=application/json; charset=UTF-8 Cookies: <none> Multiparts: <none> Body: { "medicalHistoryType": [ "medicalHistoryName": "是否有老年痴呆家族史", "medicalHistoryIdentify": 2, "medicalHistoryDegree": 0, "medicalHistoryDescribe": null, "createTime": "" ], "patient": { "address": "上海市浦东新区张江镇XX路XXX号", "education": "本科", "educationTime": 6, "jobType": "公务员", "marrige": "已婚", "mobilephone": "1392602****", "patientAge": 0, "patientBirthdate": "1965-05-04", "patientName": "API测试患者qMnxUulJ", "patientSex": 0 } }
从官方给的文档中我们清楚的发现,如果只是单独的获取ResponseBody中的单一值的话可以使用"请求.path(“检索路径”)"
- 现在假如我们需要通过创建患者的id来进行患者删除的操作,就可以直接通过.path的方式来获取:
Integer uid = patientManager.createPatient(patientName,mobilephone).path("body.patient.uid");
patientManager.deletePatient(uid).then().statusCode(200) .body("status",equalTo("1"));
如果想获取ResponseBody中的多个值,可以先将响应结果以json字符串的形式保存下来,再一一根据需要获取
- 现假如我们需要获取uid和patientName两个值来进行参数传递:
String json = patientManager.createPatient(patientName,mobilephone).asString();
Integer uid = from(json).get("body.patient.uid");
patientName = from(json).get("body.patient.patientName");
如果想要获取Headers, cookies, status等值,可以利用Response.get的方法来获取
- 现假如我们要获取Header中的token信息,就可以使用Response.get的方法来获取:
public static String getBPFAppToken(){
String url = setLoginEnv();
String body = loginBody;
return RestAssured.given().log().all()
.body(body)
.when().post(url)
.then().log().all().statusCode(200)
.extract().response().getHeader("Token");
}