1、Postman接口测试工具
Postman简介与安装:
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数+ headers。
Postman功能:
- 主要用于模拟网络请求包
- 快速创建请求
- 回放、管理请求
- 快速设置网络代理
Postman安装:
2、界面
3、Postman简单使用 http://www.bejson.com/ 解析json格式数据的网站 https://developers.douban.com/wiki/?title=book_v2#get_book_search
开始开发--接口测试号申请 appID wx55614004f367f8ca Appsecret 65515b46dd758dfdb09420bb7db2c67f 用户分组管理--创建分组利用postman发送post请求、参数是json格式 页面访问请求(Post方法): form-data、x-www-form-urlencoded、raw、binary的区别 1. form-data 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。 2.x-www-form-urlencoded: 就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对 3.raw 可以上传任意格式的文本,可以上传text、json、xml、html等 Cookies: Postman v0.8.x以上版本 可以显示浏览器 cookies, 就像它与浏览器共享相同的环境一样。对于本地应用, 你需要启用Interceptor,然后你就可以在响应部分的 Cookies 选项卡中查看响应的 cookies。 Tests: Tests为执行断言后的测试结果 4、常规使用--断言Tests 测试返回的body包含的内容 - tests["Body matches string"] =responseBody.has("百度搜索");
复制代码测试返回的状态码 - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">tests["Status code is 200"] =responseCode.code === 200;</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">tests["1+1"] = 1+1 === 2;</p>
复制代码测试返回的状态信息 - 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";
复制代码- <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">检查Content-Type是否包含在header返回(大小写不敏感)</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">tests["Content-Type is present"]= postman.getResponseHeader("Content-Type");</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">检查Content-Type是否包含在header返回(大小写敏感)</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">tests["Content-Type is present"]= responseHeaders.hasOwnProperty("Content-Type");</p>
复制代码检查成功post的请求 - tests["Successful POST request"]= responseCode.code === 201 || responseCode.code === 202 || responseCode.code=== 200;
复制代码检查JSON某字段值 - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">var jsonData = JSON.parse(responseBody);</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">tests["Your test name"] =jsonData.expires_in === 7200;</p>
复制代码5、接口持久化 把单个接口保存到文件夹(接口项目)中,再接口项目文件夹下新建文件夹(模块) 6、环境变量: 环境变量: postman可直接通过切换环境来实现多个环境中的参数切换。常用功能:环境地址切换、全局变量使用。 7、Postman导入导出功能 8、Postman持久化运行 9、postman提取接口返回值 1、变量赋值的方式 - let jsondata = JSON.parse(responseBody) ;
- let access_token = jsondata.access_token ;
- let expires_in = jsondata.expires_in ;
- tests["时效"] =expires_in === 7200 ;
复制代码10、保存到全局变量 - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">var jsondata = JSON.parse(responseBody) ;</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">postman.setGlobalVariable("tokenid",jsondata.access_token);</p>
复制代码11、接口串行传参 把上一个接口的返回值送给下一个接口作为输入参数 在postman中通过全局变量实现 12、Postman动态传参 在runner里循环发n次请求/做自动化测试时,有些接口不适合写死参数: 1.Postman有以下内建变量,适合一次性使用: - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;"> {{$timestamp}}//当前时间戳</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;"> {{$randomInt}}//0-1000的随机整数</p>
复制代码
2.参数依赖上一个请求的返回: 上个请求的Tests里提取参数存环境变量,这个请求里用{{变量名}}取值 3.参数每次都不同,但之后的断言或别的请求里可能还要用: 在Pre-requestScript里写代码处理,存为环境变量,参数里用{{变量名}}取值 5、Postman流程控制 流程控制只有在collection runner或Newman里才生效 设2个接口的顺序为:接口A-->接口B 如果希望执行顺序为:接口A -> 接口B -> 接口A,又不想复制一份接口A A接口: B接口: 失败的测试自动重新运行 6、Postman调试功能(日志) 1.使用 Ctrl+Alt+c 可以打开Postman的控制台,可以查看请求和响应(只适用于客户端,不适用于Chrome 插件) 2.用console.log()打印,到控制台看 - console.log(jsondata.access_token);
复制代码3.tests['这里拼出你想看的字符串']= true在界面/报告看断言 - tests[jsondata.access_token] = false;
复制代码7、定义公共函数 常用公共函数: 1).判断是否超时(assertNotTimeout): - varhasResponse=postman.getResponseHeader('Content-Type')?true:false;if(!hasResponse) tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;
复制代码2).未超时,显示发出的请求参数(logParams): - if(hasResponse) tests[`[INFO] 请求参数(超时没返回时不解析):${JSON.stringify(request.data)}`]=true;
复制代码3).未超时,解析返回的JSON对象(getResponseJson): - try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false; tests[`[INFO] 返回:${responseBody}`]=true;console.error(err);}
复制代码4).返回元素的类型(assertType): - var assertType=(name,value,type)=>{letisType=(type==='array')? Array.isArray(value):typeof value===type;tests[`${name}为${type}(实际值:${value})`]=isType;};
复制代码5).返回元素是否与预期值一致(assertEqual): - var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(实际值:${actual})`]=actual===expected;};
复制代码6).返回元素是否与预期值不一致(assertNotEqual): - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow-x: auto;">varassertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(实际值:${actual})`]=actual!==expected;};</p>
复制代码
|