接口工具
postman,jmeter,soupui(webservice),apipost,fiddler,charles
界面
请求模块:
Authorization:postman 自带的鉴权功能
Headers 请求头
Body post请求传参
none 没有参数
form-data 既有文件又有键值对
raw 传json,txt,xml,html,js
binary 把文件以二进制的方式传输
Pre-request sciprt 接口请求之前的脚本 js
Tests 断言的代码
Cookies Postman的cookie的管理器
code 生产接口自动化脚本
响应模块:
Body 返回的数据
Pretty 以json格式展示
Raw 以文本的格式展示
Preview 以网页的格式展示
cookie 返回的cookie信息
Headers 响应头
TestResults 断言结果
status 状态码
time 消耗的时间
size 字节数
新建界面
Get请求
搜索“聚合数据”网站,选择一个数据模拟发送请求,运行后的参数必须和接口文档一致(Get请求)
Post请求
保存接口数据
Postman内置的动态参数
企业中做接口测试的时候经常会出现接口不能把参数写死
时间戳 {{$timestamp}}
生成0-1000的随机整数 {{$randomint}}
生成一个GUID的字符串 {{$guid}} 很长的一个字符串
例如:时间戳
Postman环境变量和全局变量
开发环境,测试环境,预颁发环境,线上环境每种环境地址都不一样,要实现自动化需要一个全局变量的ip,不需要每个都重新填一遍
添加环境(环境变量和Globals也好都是全局变量,一般环境变量用于环境,全局变量Globals用于用例,这两种是不允许冲突的)
比如这是开发环境的地址,设置不同环境的地址
切换环境测试
全局变量
接口关联(Json提取/正则表达式提取)
第一种:Json提取器
//提取access_token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.accesse_token)
//把提取的值保存到全局变量
pm.globals.set("access_token",jsValue.access_token)
接口关联(CRUD的时候不需要每个接口进行修改,利用全局变量实现接口关联,创建-获取-编辑-删除四个接口只需要写一个创建,提取全局变量就能实现接口关联)
比如有个token值被每个接口都使用,都重复,没必要每次都重新输入,只需要提取出来做全局变量然后用{{}}显示
提取access_token
将token设置为全局变量
var jsValue = JSON.parse(responseBody)
console.log(jsValue.man)
pm.globals.set("man",jsValue.man)
点send发送请求后,提取出来的值就会出现在全局变量列表(Globals)中
双大括号取token,用到这个变量的接口都可以改为{{}}取值进行接口关联
第二种方式:使用正则表达式提取
match:匹配一种规则
new RegExp()新建一种规则
.+?
//使用正则表达式提取
// "id": 779, => "id":(.+?),
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))
console.log(flag_id)
pm.globals.set("id",flag_id );
之后所有需要用到的id都可以用全局变量{{}}替换,进一步实现接口互联
第三种:使用cookie提取器
进行批量测试实现自动化(接口都ctrl+s保存一下)
串行的
八种断言方式
//b八种断言方式,八大元素定位
重要://1.断言返回码为200 用于状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
重要://2.断言返回的结果中包含有一个指定的字符串 用于业务断言
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("人物类");
});
重要://3.对返回的结果做json字段检查 用于业务断言
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.result[0].name).to.eql("人物类");
});
重要://4.断言返回的结果等于一个字符串 用于业务断言
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//5.断言响应头中包含有指定的响应头
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Date");
});
重要://6.断言接口的请求的时间少于200毫秒 用于性能断言
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//7.断言一个post请求的返回的状态码是否在指定的范围里面
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 200]);
});
//8.断言返回的状态码信息中包含指定的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
精确断言
比如我们需要精确断言某个参数值,可以将参数设置为全局变量
加前置脚本:
全局断言
一般应用于状态断言
运行
Postman实战