分享目的
新建请求 新建集合 新建目录 导入文件 ...
Postman 有一个基于 Node.js 的强大运行时,可以向请求和集合添加动态行为。 因此可以在编写 API 测试、构建中包含动态参数的请求、在请求之间传递数据等。 代码在流程中的两个事件期间执行:
pre-request script - > request -> response -> tests collections > folders > requests
场景描述 Pre-request script: 登录(拿token)-获取用户信息(拿用量)->比对用量数据判断是否可以继续上传
Pre-request:
let endpoint=pm.globals.get("rec_dev")
// 登录
{
let login_url=endpoint+"/authentications"
// body 参数
let user_info={
"password":"xxx",
"email":"xxx@qq.com",
"type":1,
"brand_id":"xx",
"app_id":"xx",
"language":"zh"
}
// 请求参数
let login_request = {
url: login_url,
method: 'POST',
header:'Content-Type:application/json',
body: {
mode: 'raw',
raw: JSON.stringify(user_info)
}
};
// 发送请求
pm.sendRequest(login_request, function (err, response) {
if (err){
console.log(response.json());
}else{
let param_resp=response.json();
if (param_resp.status==200){
// 重点 统一覆盖为最新token
pm.request.headers.add({
key: 'Authorization',
value: 'Bearer '+param_resp.data.api_token})
}else{
console.log(param_resp.message);
}
}
});
}
Request&Response:
Request:{{rec_dev}}/users/41638056
Response:
{
"status": 200,
"message": "success",
"data": {
"user_info": {
"user_id": 41638056,
"telephone": "",
"nickname": "1369499226",
"email": "1369499226@qq.com",
"avatar_url": "",
"region": "CN"
},
"member_info": {
"type": 1,
"license_type": "",
"expired_at": 1661910465,
"vip_type": 1
},
"quota": {
"storage": {
"limit": 53687091200,
"used": 11743911
},
"traffic": {
"limit": 0,
"used": 0
},
"quantity": {
"limit": 10000,
"used": 2
}
},
"extra": "Windows ApowerRec"
}
}
Tests
pm.test('是否可继续上传',function(){
// 断言响应码
pm.expect(pm.response.code).to.eq(200);
// 获取响应数据
let resp = pm.response.json()
// 断言业务逻辑
pm.expect(resp.status).to.eq(200)
let resp_data = resp.data;
pm.expect(resp_data.quota.storage.limit).to.lt(resp_data.quota.storage.used)
})
TestResult
断言
pm.test('断言',function(){
// 语法
// pm.expect(elem).to.method(val);
// 判断是否存在
pm.response.to.have.header("Content-Type");//bolean
// 请求头
pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/json')
// 状态码
// pm.expect(pm.response.code).to.eq(200);
pm.expect(pm.response.code).to.oneOf([200,201]);
// cookie
pm.expect(pm.cookies.has('JSESSIONID')).to.be.false;
// 响应时间
pm.expect(pm.response.responseTime).to.be.below(2000);
// 获取响应数据
let resp = pm.response.json()
// 类型
// pm.expect(jsonData).to.be.an("object");
// pm.expect(jsonData.name).to.be.a("string");
// pm.expect(jsonData.age).to.be.a("number");
// pm.expect(jsonData.hobbies).to.be.an("array");
// pm.expect(jsonData.website).to.be.undefined;
// pm.expect(jsonData.email).to.be.null;
// 响应体
pm.expect(resp.status).to.eq(200)
// 业务数据
// pm.expect(resp.usage).to.eql(pm.environment.get("usage"));
// 数组
let temp_array= ['names','goods']
pm.expect(temp_array).to.be.empty;
pm.expect(temp_array).to.include("goods");
// 对象
let temp_obj = {name: "zhang", age: 22}
pm.expect(temp_obj).to.have.all.keys('name', 'age');
pm.expect(temp_obj).to.have.any.keys('name', 'age');
pm.expect(temp_obj).to.not.have.any.keys('gender', 'country');
pm.expect(temp_obj).to.have.property('name');
// 包含
let temp_name = 'zhaoliu'
pm.expect(temp_name).to.be.oneOf(["zhangsan", "lisi", "wangwu"]);
// 环境
pm.expect(pm.environment.name).to.eql("Prod");
})
异步请求
pm.test('异步请求',function(){
let test_url = "https://localhost:8081/rec-login"
pm.sendRequest(test_url, function (err, response) {
console.log(response.json());
});
})
数据解析 pm.test('解析数据',function(){
// json
let resp_json = pm.response.json();
// text
let resp_text = pm.response.text();
// xml
let resp_xml = xml2Json(pm.response.text());
})
postman内置大量动态变量,依赖faker-js库。 常用动态变量:
$guid :v4-guid
$timestamp:Unix时间戳,单位:秒
$randomInt:0到1000之间的随机整数
$randomUUID:随机的 36 个字符的 UUID
$randomColor:随机的颜色
$randomPassword:随机 15 个字符的字母数字密码
$randomFirstName:随机的名字
$randomLastName:随机的姓氏
$randomPhoneNumber:随机的 10 位电话号码
$randomAvatarImage:随机头像图片
内置对象:(pm->postman) 概述:
选择集合
外部文件(json示例,可选csv)
引入文件
请求中使用外部变量
效果
安装环境
node.js[env]: 下载 (验证 newman -v )
newman[pkg mgr]:npm install -g newman
(验证 newman -v)
newman-reporter-html[plugin]: npm install -g newman-reporter-html
(验证npm list -g --depth 0)
操作示例
导出集合
使用脚本生成报告 newman run .\个人测试.postman_collection.json -r html
当前文件夹下打开文件即可
效果展示
概述:
像git管理代码一样管理源码。 操作流程:
创建集合分支:
合并变更
pull源码
查看记录
查看日志
生成在线文档 图解
创建入口
选择集合
markdown编写
效果展示
发布效果 (测试链接)
概述:
模拟真实响应数据。 场景:
保存正常响应数据 -> 新建MockServer -> 拿到Mock Url -> 使用MockUrl建立请求 图解
保存reponse
新建MockServer
拿到MockUrl
请求示例
其他个人已知功能 监控
如果您喜欢我的文章,请点击下面按钮随意打赏,您的支持是我最大的动力。
最新评论