说实话,刚接触那会儿,看着那一堆术语也挺懵的。

哪种查询参数,表单,JSON,文件上传,好像呈现出四种各异的生物形态。
但其实上手了发现,也就是层窗户纸的事儿 。
第一种,看着最实诚:查询参数接口
这种最简单,就像你在浏览器里直接敲地址。
把URL直接贴进地址栏,完事。
当然,要是你打算把那些问号之后的参数,像?name=test这样的,单独填进框里,这也是可行的,其效果是相同的。
比如,你叫人时,可以直接呼喊其完整的姓名。或者,把姓氏与名字分隔开来去做些像填表格这类事情,其实这般的做法,在本质上并没有什么差异的。
然后就是这种,带着“体香”的接口:表单类型
怎么判断?
贼简单,看请求头里的 Content-Type。
POST http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html HTTP/1.1
Content-Type: multipart/form-data
file=a1.jpg
假设它所呈现的是 application/x-www-form-urlencoded 这种形式,好了,此情形即为表单提交。
此时间点你得于工具当中,像是借助那个有着小狐狸头标识的软件,又或者是邮差先生那般的,挑选 body,接着勾选上 x-www-form-urlencoded。
把参数名和值像填表一样列出来就行。
POST http://xxx/api/sys/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
{"account":"root","password":"123456"}
那股子“体香”一出来,你就知道该怎么伺候它。
第三种,现在最潮的,见面就递张名片:JSON类型
这应该是现在最常见的了。
在请求报文当中,Content-Type所显写情形之下,呈现的是 application/json。
一看这格式,你就得换个姿势。
于工具之中,同样选取 body,然而这次需选取 raw,随后将旁边的格式类型,由 Text 转变为 JSON。

随后,将那一段由花括号括起来的“名片”,也就是JSON数据,贴进去。
它讲究,咱就得按它的规矩来。
点发送,服务器处理完,会给你吐回来一个东西,叫响应 。
这响应涵盖三类内容,其一为状态行,它会告知你此请求究竟达成与否,像200便代表请求成功,404则意味着请求针对的对象寻无踪影;其二是响应头,它包含了一系列元数据;更为关键的是还有响应体,其承载着实际的数据。

有时瞅见返回的确是HTML页面,就像模拟着手去打开百度,而后点击那个标着Preview的选项,如此一来便能直接瞧见渲染呈现出的页面效果,真的是蛮直观的。
有了这些基础,才算是刚推开大门。

真正的折腾,在后面。
比如说,你于一个项目之中构建了一批接口测试用例,这些测试用例宛如一个个散装的积木,那么要怎样促使它们共同运行起来呢?

这就是批量执行。

能够挑选出一个文件夹,或者是整个集合,通过一键操作来运行,瞧它们成排待着接受查看。
代码写久了总得报错吧?
这时候就得靠查看日志和打印变量了 。

这就如同你于黯淡无光的房间之内行走,手中需要持有一个打火机,每隔小段时间把它点燃照亮一下,瞧瞧前方究竟是道路还是坑洼。
借由那个形如 console.log 这般的语句,能够将程序运作期间的心里话,也就是变量值给打印出来,助力你找出究竟是何处存在问题。

还有那个断言,这才是从“能跑”到“靠谱”的关键 。
if (!response.has("token")) {
抛出一个新的错误,内容是登录失败了,没拿到标识令牌!
}
用了断言,就像给测试用例装上了眼睛和脑子,能自动判断对错。
这是做自动化的地基 。
变量与脚本:让接口活起来
这功能是真玩出花样的开始。
变量,说白了就是个存东西的盒子 。
在请求当中,存在着某个值,举例来说,它是登录之后所返回的 token,针对这个值,采取右键选中的操作,从中选择 Set: 环境变量 这一选项,进而将其进行存储了。
下次再用,直接 {{token}} 引用就行。

然而需要留意,于请求参数的URL当中如此书写并无问题,倘若在用于编写代码的Tab里(像是 Tests 或者 Pre-request Script),那就必须采用 pm.environment.get("变量名") 这般正规的语法了。
说到脚本,就得提前置脚本 。
pm.test("Status code is 200", function () {
pm.response.to.have.status(200); //这里填写的200是预期结果,实际结果是请求返回结果
});
这儿物品的施行次序饶有趣味:于发出请求之前,先行运行前置脚本之中的代码。
所以你可以在请求发出前,对数据做点手脚。
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK"); //断言响应状态消息包含OK
});
比如密码需要加密?
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type"); //断言响应头存在"Content-Type"
});
在前置脚本里写个md5函数。
比如参数需要个随机数?
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//注解
pm.expect(pm.response.text()).to.include("string") 获取响应文本中包含string
在那儿用JS生成一个。
这恰似在出门去会见客户之前,先朝着镜子去整理一番领带,将状态调节至最为佳妙的程度。
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//注解
pm.response.to.have.body("response_body_string"); 获取响应体等于response_body_string
接口关联:这才是真实世界的玩法
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//注解
var jsonData = pm.response.json() 获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错
pm.expect(jsonData.value).to.eql(100) 获取jsonData中键名为value的值,然后和100进行比较
真实场景里,接口都不是孤岛。
通常情况下,前一个接口所返回得出的数据,常常会作为下一个接口的输入内容,而这种情况就被称作是接口关联。
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200); //断言响应时间<200ms
});
假设你首先去调试那个用于上传头像的接口,之后它会给你返回这样一个内容:"avatar_url":"xxxx.jpg"。
你得把这个 xxxx.jpg 提取出来,存成全局变量。
{
"cityid": "101120101",
"city": "济南",
"update_time": "2020-04-17 10:50",
"wea": "晴",
"wea_img": "qing",
"tem": "16",
"tem_day": "20",
"tem_night": "9",
"win": "东北风",
"win_speed": "3级",
"win_meter": "小于12km/h",
"air": "113"
}
而后,于紧接着的下一个“图像预览”接口当中,再借助 {{avatar_url}} 将其叼走。

核心就两步:提取 -> 保存变量 -> 使用变量。
困难之处在于,所返回的JSON数据,有时会如同俄罗斯套娃那般嵌套,出现层层嵌套包裹的情况。
以那一大串字符串而言,怎么样才能够在其中准确无误十分精确地捞出那个thumb的值呢,那串字符串是data.user.profile.avatar.thumb?
这就考验你对JSON解析的熟练度了。
别怕。
这物件好似谈恋爱,刚开始时觉着对方心思难测,存在四种接口类型,相处较久后发觉也就那几种模式。

多测测,多看看日志,慢慢就摸着门道了。
毕竟,机器比人实在,它错了就是错了,从不装。

Comments NOTHING