Postman
安装
官方文档
https://learning.postman.com/docs/writing-scripts/pre-request-scripts/
安装
这个没啥说的,下载安装就行
首页

出现问题
问题一:
Error: Client network socket disconnected before secure TLS connection was established
请求页面出现如下错误:

控制台信息:

检查 代理
设置,关掉代理即可

问题二:SSL Error: Self signed certificate
请求后报如下错误:

原因:开启了 SSL 校验,可是用的是本地的 SSL
解决方法:关闭 SSL 校验即可

快捷操作-小技巧
快速整理 json/xml
ctrl + b
打开控制台
ctrl + alt + c

创建团队
创建团队
页面顶部中间,点击

加入团队后,可以看到团队内成员的数据
对URL手动编码
默认不会自动编码
在URL上,选中需要编码的内容,鼠标右击,选择 EncodeURIComponent
或者 DecodeURIComponent
变量管理
环境管理
使用数据文件
准备数据文件
JSON 和 CSV 皆可,这里以 JSON 文件为例
[{
"user_id": 1
},
{
"user_id": 2
},
{
"user_id": 3
},
{
"user_id": 4
},
{
"user_id": 5
},
{
"user_id": 6
},
{
"user_id": 7
},
{
"user_id": 8
},
{
"user_id": 9
},
{
"user_id": 10
}
]
Body 构造请求参数

Tests 编写请求语句

pm.test("Response has data value",function(){
var jsonData = pm.response.json();
pm.expect(jsonData.data.user_id).to.equal(pm.iterationData.get("user_id"));
});
pm.expect(jsonData.data.请求字段名)
to.equal(pm.iterationData.get("字段变量名,需要和json文件中保持一致"))
示例如下:
# Body
{
"type":"1",
"user_id":{{idid}}
}
# Tests
pm.test("Response has data value",function(){
var jsonData = pm.response.json();
pm.expect(jsonData.data.user_id).to.equal(pm.iterationData.get("idid"));
});
# json 文件
[{"idid":1},{"idid":2}]
准备 Run

点击之后出现如下界面,选择你的各种参数和文件

点击运行之后就是下图,我这里显示的都是FAILED,接口请求都是成功了的

附录一:接口主要干嘛了
接口做的事情很简单,就是去数据库查询记录,代码如下
private function type1($data = '') {
$id = $data['user_id'];
return User::find($id);
}
附录二:接口请求记录
显示接口都成功请求,并且成功响应了

Chrome network timing 分析
如图所示:


Queueing(队列)
排队的时间花费。可能由于该请求被渲染引擎认为是优先级比较低的资源(图片)、服务器不可用、超过浏览器并发请求的最大连接数(Chrome的最大并发连接数是6)
【资源调度】期间,浏览器有自己的线程限制,所有的请求不可能都能够同时发送,一般chrome的最大并发连接数为6,根据请求顺序,会将所有请求加入队列中,此概念表示在队列所耗费等待的时间。
Stalled(阻塞,卡顿)
Queueing完成后,准备发出请求 ——> 实际发出请求消耗的时间。浏览器准备要发出这个请求,但由于一些情况不能发出请求指令,例如此刻没有可复用的TCP链接,此过程不包括DNS查询、建立TCP连接等时间等。(浏览器对同一个主机域名的并发连接数有限制,因此如果当前的连接数已经超过上限,那么其余请求就会被阻塞,等待新的可用连接;)
Proxy negotiation
与代理服务器连接的时间花费
DNS Lookup(DNS查找)
DNS解析域名消耗的时间。可以借助DNS缓存减少该消耗
Initial connection(初始化连接)
TCP建立连接的三次握手时间
Request sent
发送HTTP请求的时间(从第一个字节发出前到最后一个字节发出后的时间
TTFB(Time To First Byte)
发送请求完毕到接收请求的第一个字节的时间
影响因素:线路、服务器距离、后台服务性能,MySQL查询等
Content Download
资源下载时间
影响因素:资源大小、是否使用缓存
参考链接
- https://github.com/w3c/web-performance/
ApiPost
预执行脚本
// //生成指定长度的随机数字字符
// function randomString(length) {
// const str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
// let result = '';
// for(let i = 0; i<length; i++)
// {
// let id = Math.floor(Math.random() * str.length);
// result += str[id];
// }
// return result;
// }
// var nonce = randomString(10);
// var time = Math.round(new Date() / 1000);
// var sign_string = nonce + time +'shuxiaoyuan';
// var sign = CryptoJS.MD5(sign_string).toString().toUpperCase();
// apt.setRequestHeader("nonce", nonce);
// apt.setRequestHeader("timestamp", time);
// apt.setRequestHeader("sign",sign);
预执行脚本
预执行脚本
// //生成指定长度的随机数字字符
// function randomString(length) {
// const str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
// let result = '';
// for(let i = 0; i<length; i++)
// {
// let id = Math.floor(Math.random() * str.length);
// result += str[id];
// }
// return result;
// }
// var nonce = randomString(10);
// var time = Math.round(new Date() / 1000);
// var sign_string = nonce + time +'shuxiaoyuan';
// var sign = CryptoJS.MD5(sign_string).toString().toUpperCase();
// apt.setRequestHeader("nonce", nonce);
// apt.setRequestHeader("timestamp", time);
// apt.setRequestHeader("sign",sign);