Postman总结
一、用途
开发可以用来测试联调和管理接口,测试可用来接口功能测试
二、简介:
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT…),附带任何数量的参数+ headers。
三、Postman功能:
主要用于模拟网络请求包
快速创建请求
回放、管理请求
快速设置网络代理
接口功能测试(可以设置断言,批量测试接口,批量导入和导出,设置全局变量,设置环境变量等等)
压力测试
四、页面访问请求:
form-data、x-www-form-urlencoded、raw、binary的区别
- form-data:就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。、
- x-www-form-urlencoded:
就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对 - raw
可以上传任意格式的文本,可以上传text、json、xml、html等 - binary
相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。
multipart/form-data与x-www-form-urlencoded区别
multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;
x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。
五.常规使用–断言Tests
* 测试返回的body包含的内容
tests["Body matches string"] =responseBody.has("百度搜索");
* 测试返回的状态码
tests["Status code is 200"] =responseCode.code === 200;
tests["1+1"] = 1+1 === 2;
* 测试返回的状态信息
tests["Status code name hasstring"] = responseCode.name.has("OK");
tests["hello is he"] ="hello".has("he");
* 测试响应时间是否低于200ms
tests["Response time is less than200ms"] = responseTime < 200;
* 检查响应body中等于指定string--Check if response body is equal to a string
tests["Body is correct"] =responseBody === "response_body_string";
* 检查Content-Type是否包含在header返回(大小写不敏感)
tests["Content-Type is present"]= postman.getResponseHeader("Content-Type");
* 检查Content-Type是否包含在header返回(大小写敏感)
tests["Content-Type is present"]= responseHeaders.hasOwnProperty("Content-Type");
* 检查成功post的请求
tests["Successful POST request"]= responseCode.code === 201 || responseCode.code === 202 || responseCode.code=== 200;
* 检查JSON某字段值
var jsonData = JSON.parse(responseBody);
tests["Your test name"] =jsonData.expires_in === 7200;
六.接口持久化
把单个接口保存到文件夹(接口项目)中,在接口项目文件夹下新建文件夹(模块)
七.环境变量:
postman可直接通过切换环境来实现多个环境中的参数切换。常用功能:环境地址切换、全局变量使用
八.Postman导入导出功能
九.Postman持久化运行
- 多次迭代进行接口测试,注意与压力测试进行区分。
十.postman提取接口返回值
- 变量赋值的方式
let jsondata = JSON.parse(responseBody) ;
let access_token = jsondata.access_token ;
let expires_in = jsondata.expires_in ;
tests["时效"] =expires_in === 7200 ;
- 保存到全局变量
var jsondata = JSON.parse(responseBody) ;
postman.setGlobalVariable("tokenid",jsondata.access_token);
- 接口串行传参
把上一个接口的返回值送给下一个接口作为输入参数
在postman中通过全局变量实现
十一.Postman动态传参
在runner里循环发n次请求/做自动化测试时,有些接口不适合写死参数:
- Postman有以下内建变量,适合一次性使用:
{{$guid}}//生成GUID,操作如下图所示
② {{$timestamp}}//当前时间戳
时间戳是根据1970-01-01开始进行计算的,通过该方法获取到的值,进行转换后,就是当前的时间值
③ {{$randomInt}}//0-1000的随机整数
产生0-1000的随机整数,可用于自动化用户名操作,操作如下图所示:
- 参数依赖上一个请求的返回:
上个请求的Tests里提取参数存环境变量,这个请求里用{{变量名}}取值 - 参数每次都不同,但之后的断言或别的请求里可能还要用:
在Pre-requestScript里写代码处理,存为环境变量,参数里用{{变量名}}取值
十二.Postman调试功能(日志)
- 使用 Ctrl+Alt+c 可以打开Postman的控制台,可以查看请求和响应(只适用于客户端,不适用于Chrome 插件)
- 用console.log()打印,到控制台看
console.log(jsondata.access_token); - tests[‘这里拼出你想看的字符串’]= true在界面/报告看断言
tests[jsondata.access_token] = false;
十三.定义公共函数
常用公共函数:
- 判断是否超时(assertNotTimeout):
varhasResponse=postman.getResponseHeader(‘Content-Type’)?true:false;if(!hasResponse) tests[‘服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)’]=false; - 未超时,显示发出的请求参数(logParams):
if(hasResponse) tests[[INFO] 请求参数(超时没返回时不解析):${JSON.stringify(request.data)}
]=true; - 未超时,解析返回的JSON对象(getResponseJson):
try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){tests[‘服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)’]=false; tests[[INFO] 返回:${responseBody}
]=true;console.error(err);} - 返回元素的类型(assertType):
var assertType=(name,value,type)=>{letisType=(type===‘array’)? Array.is Array(value):type of value===type;tests[${name}为${type}(实际值:${value})
]=isType;};
js的数据类型:
typeof 2 输出 number
typeof null 输出 object
typeof {} 输出 object
typeof [] 输出 object
typeof (function(){}) 输出 function
typeof undefined 输出 undefined
typeof ‘222’ 输出 string
typeof true 输出 boolean - 返回元素是否与预期值一致(assertEqual):
var assertEqual=(name,actual,expected)=>{tests[${name}等于${expected}(实际值:${actual})
]=actual===expected;}; - 返回元素是否与预期值不一致(assertNotEqual):
Var assertNotEqual=(name,actual,expected)=>{tests[${name}不等于${expected}(实际值:${actual})
]=actual!==expected;};
各函数的具体用法,如下详解: - 第一个函数和第二个函数一起使用,先判断是否超时,若未超时,便显示发出的请求参数,操作如下图所示:
tests中的代码为:
eval(globals.assertNotTimeout);
eval(globals.logParams);
- 返回元素的类型(assertType),操作如下图所示:
tests中代码为:
eval(globals.assertType);//assertType=(name,value,type);//name为返回的元素key,value为该元素的值,type为该元素的类型assertType(‘姓名’,‘boss’,‘string’);
assertType(‘name’,‘汪兵’,‘string’);
assertType(‘roleType’,0,‘number’);
十四.Postman导出接口测试脚本
打开postman输入我们要测试的登录接口参数之类的
可以看到,接口访问成功,返回的是Json字符串。这个时候我们点击红色框内的Code,弹出如下界面
选择python–>Request后生成代码,我们把该代码复制到python编辑器中。下面是生成的脚本: