手把手教你搭建java接口自动化测试框架(四):断言、生成测试报告
上一集说到post和Get请求,请求后得到的响应(即接口返回值)是我们想要的吗
比如网站上get接口文档说明 :
“data”: [
{
“id”: 7,
“email”: “michael.lawson@reqres.in”,
“first_name”: “Michael”,
“last_name”: “Lawson”,
“avatar”: “https://reqres.in/img/faces/7-image.jpg”
}
我们得到的接口返回值,id=7时first_name是Michael吗,last_name是Lawson吗
这就需要用到断言
在引入断言之前 有的伙计可能会觉得疑惑
接口得到的response 是json格式 我们将其转化成字符串打印出来
怎么进行对比呢
这 就需要用智慧写出一个提取json字符串值的工具类( ̄▽ ̄)
utils包下新建getJsonValueUtil.java
package com.qa.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class getJsonValueUtil {
//Json解析
public static String getValueByJpath(JSONObject responseJson, String jpath) {
Object obj = responseJson;
for(String s : jpath.split("/")) {
if(!s.isEmpty()) {
if(!(s.contains("[") || s.contains("]"))) {
obj = ((JSONObject) obj).get(s);
}else if(s.contains("[") || s.contains("]")) {
obj =((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("\\[")[1].replaceAll("]", "")));
}
}
}
return obj.toString();
}
}
这个获取json value的方法是什么意思呢
我们来看json字符串的的组成
这个方法主要可以查询两种json值
第一 total=2这种,在json串的第一层,是一个json对象,想要获取total的值,只需要传入其jpath(“total”)就可获取其值,返回结果是12
第二 first_name这种,在data数组中,data属于json数组,不能直接拿值,只能遍历,红线圈出来的是data数组第一个 ,所以查询时jpath是”data[0]/first_name”,返回结果是Michael
既然拿到了json里面的值 我们就可以使用断言进行判断啦
修改之前的GetTest01.java 加入断言内容
@Test
public void getListUsers() throws IOException {
restClient = new RestClient();
response = restClient.getApi(url);
//获取响应内容
String responseString = EntityUtils.toString(response.getEntity(),"UTF-8");
//创建JSON对象 把得到的响应字符串 序列化成json对象
JSONObject responseJson = JSONObject.parseObject(responseString);
System.out.println("response json---->" + responseJson);
//判断得到的结果是否正确
//首先判断网站是否成功响应 先获取状态码
int statusCode = response.getStatusLine().getStatusCode();
//获取到的状态码和200 对比 如果相等就说明网站响应成功
Assert.assertEquals(statusCode,200,"网页成功响应");
//然后判断得到的相应内容是否和接口文档一致
//比如 page=2 per_page=6 total=12是否正确
//调用utils里面写好的 获取json value的方法
String get_total = getJsonValueUtil.getValueByJpath(responseJson,"total");
String get_first_name = getJsonValueUtil.getValueByJpath(responseJson,"data[0]/first_name");
//断言研判接口返回值是否与预期一致
Assert.assertEquals(get_total,"12","获取信息总数非12条");
Assert.assertEquals(get_first_name,"Michael","用户名字不是Michael");
}
举得两个例子都成功了
想看失败效果的可以自己试一试
那么getListUsers这一个测试用例算是通过了 我们来看控制台
可以看到运行了1个用例 失败0 跳过0
控制台有一个左下箭头 点击导出报告
导出后看见报告(奇丑无比)让大家失望了
肯定有伙计就会问 就这?这就是测试报告?
当然不是(~ ̄▽ ̄)~我们在一开始就引了extentreport包,特地来美化测试报告的,测试报告怎么会如此不美观大方呢
继续往下看
IDEA跟eclipse不一样 需要设置一下才能看见测试报告
点击控制台
Listners–>Use default reporters —->apply –>ok
再次运行用例 自动生成test-output文件夹 .html文件就是测试报告啦(●’◡’●)
惊不惊喜意不意外╮(╯▽╰)╭
虽然不好意思说 肯定还是觉得很吃藕 对不对!
当然这个报告是需要继续美化的 具体操作
请看下集👇