PostMan的工具使用分享
一、postman简介
1、简介
Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。 它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。
2、下载与使用:
由于2018年初chrome停止对chrome应用程序的支持,目前postman插件还可安装,但已经无法正常使用了。
下载地址:Postman: The World's Leading API Platform | Sign Up for Free
3、界面元素简介:
1)主要界面功能介绍
l New: 新建,可以创建request(请求),collection(请求集),environment(环境变量)等。
l Inport:导入,可以直接导入postman请求集,curl等一些请求文件。
l Runner: 执行请求,可以选择执行请求的collection,并且添加执行参数,例如执行时间,执行次数等等。
l Workspace: 工作台,可以选择使用个人工作台或团队工作台,可以创建team并且邀请成员加入一起编辑使用请求集。
l History: 历史请求,所有调试的历史请求数据
l Collection: 请求集,可以创建保存,将某些请求放到一起形成请求集
l Environment: 环境变量,管理设置的环境变量,可以设置全局环境变量,也可新建环境,添加环境变量
2)工作台页面主要介绍
l 请求方法: 支持get,post,put,patch等请求方法
l URL: 可以直接输入请求URL,也可以通过环境变量设置,自定义URL
l Params: 请求参数
l Authorization: 认证鉴权,支持多种授权鉴权
l Header: 请求头
l Body: 请求体,包含form-data,json,文件上传等
l Pre-request-Script: 请求脚本,可以在请求发起前执行的脚本
l Tests: 接口测试,请求完成后进行的测试脚本
l Cookies: 可以为请求添加cookies
l 下面就是response的一些信息,返回数据,返回头,cookie,测试结果等
4、常规使用步骤:
1)打开postman,新建一个请求
2)在请求方法模块中选择具体的请求方法,比如GET,
3)接口URL中输入地址,点击Send按钮即可发送请求。
二、postman接口测试之断言
1、操作说明
对接口请求后端内容进行设置,如状态码、响应头、响应正文等信息进行断言操作,在设置时会给一个预期结果,在发送请求后会得到一个实际结果,如果两者结果一致,则认为是成功,否则认为是失败,在失败的情况下需要进一步分析原因,从而判断是否是一个bug如果没有断言,我们只能做接口的功能测试,但有了断言后,就为我们做自动化提供了条件。
Postman的Test模块就是实现请求断言功能的,也是基于Node.js的,并且在postman中的断言是非常方便和强大的 ,它为我们内置了一些常用的断言 。用的时候,只需从右侧点击其中一个断言类型,就会在文本框中自动生成对应断言代码块。
2、postman断言的一些特点
- 断言编写位置:Tests标签
- 断言所用语言:JavaScript
- 断言执行顺序:在响应体数据返回后执行 。
- 断言执行结果查看:Test Results
3、常用的断言类型:
1、状态行中的断言:
- 断言状态码:Status code: code is 200
pm.test("Status code is 200", function () { pm.response.to.have.status(200); //这里填写的200是预期结果,实际结果是请求返回结果 });
- 断言状态消息:Status code:code name has string
pm.test("Status code name has string", function () { pm.response.to.have.status("OK"); //断言响应状态消息包含OK });
2、响应头中的断言
- 断言响应头中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); //断言响应头存在"Content-Type" });
3、断言响应体(常用)
- 断言响应体中包含XXX字符串:Response body:Contains string
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); //注解 pm.expect(pm.response.text()).to.include("string") 获取响应文本中包含string
- 断言响应体等于XXX字符串:Response body : is equal to a string
pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); }); //注解 pm.response.to.have.body("response_body_string"); 获取响应体等于response_body_string
- 断言响应体(json)中某个键名对应的值:Response body : JSON value check
pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); //注解 var jsonData = pm.response.json() 获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错 pm.expect(jsonData.value).to.eql(100) 获取jsonData中键名为value的值,然后和100进行比较
4、响应时间(一般用于性能测试)
- 断言响应时间:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); //断言响应时间<200ms });
三、接口批量执行
1、点击postman左侧Collections下面有个添加文件夹图标,就可以创建测试项目
2、该目录下还可以创建子目录,进行测试用例的细分
3、创建测试用例
创建接口测试用例,即新建http请求,选择请求方式、写好url、请求头、请求体
4、设置变量
postman的变量和Jmeter的参数化相似,即把若干处出现多次的数值用一个变量表示,达到一次修改、多处生效的效果,便于修改和管理。
点击postman右上方一个按钮,点击Globals后面的Add按钮,添加全局变量
5、点击右下角Add按钮,添加Environment Name,Key值写变量名称,Value值写变量对应的数值,点击Save按钮进行保存
6、把Value值出现过的地方用{{key}}代替,比如以下面面的截图为例,出现Cookie的位置使用“{{cookie1}}”代替
7、添加响应处理(断言)
在Tests中添加检查条件,postman提供了一些常用的检查条件的代码,直接添加或稍加修改即可。如:响应数据的状态码为200,则判断测试通过,则在代码片中选择“status code:code is 200”
8、点击运行
9、运行后,弹出测试结果,显示测试通过和失败的个数、请求URL、请求头、请求体信息,响应头、响应体信息,状态码等,我们就可以查看测试用例的执行结果及具体信息
四、接口串联
1、先在创建任务接口下,test里选择json check value这个代码片段,将接口返回内容转化为json格式
2、设置全局or局部变量(我这里是设置里全局变量)设置全局or局部变量(我这里是设置里全局变量)
3、在第一个接口请求成功后会自动生成一个环境变量
4、第二个接口我们直接使用 {{变量}}进行传参就行。
原理总结:
1)获取上一个接口的返回值 2)用一个环境变量或全局变量来接受这个返回值 3)用此环境变量或者全局变量作为下一个接口的参数
五、Mock Server
1、Mock Server的意义:模拟那些无法实时连接的后端,或是较难测试的系统接口,用于获得结果反馈的一种测试方式。通过发送请求后,模拟后台返回的响应内容来确认当前系统的正确性。
2、Mock对象适用场景
(1)需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑。
-----比如被测代码中需要依赖第三方接口返回值进行逻辑处理,可能因为网络或者其他环境因素,调用第三方经常会中断或者失败,无法对被测单元进行测试,这个时候就可以使用mock技术来将被测单元和依赖模块独立开来,使得测试可以进行下去。
(2)被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理。
1)前后端项目中,后端接口开发完成之前,接口联调;
2)依赖的上游项目的接口尚未开发完成,需要接口联调测试;
-----比如service层的代码中,包含对Dao层的调用,但是,DAO层代码尚未实现
(3)被测单元依赖的对象较难模拟或者构造比较复杂。
-----比如,某系统的异常条件有很多,但是测试这种异常条件很复杂或者无法模拟。
3、操作步骤:
1)首先,创建一个自定义的URL
2)点击右侧,添加example,保存请求的响应作为一个example
3)此时可以在创建的请求下方看见一个”e.g"的举例, 编辑example,展示请求结果
4)点击mock Server》新建》创建一个mock server 》选择上面已经创建好的 collection
5)在Configuration里面 补充 自定义 mock server名称、环境变量等信息,最后点击创建
6)可以看到mock server里面新增了一个 mock test的项目,复制这个URL
7)然后 用这个API替换自己创建的URL :https://507e0097-5a40-419c-b800-02f5b0b48b78.mock.pstmn.io
8)点击Send
9)使用这个URL去浏览器访问
4、总结:
1)使用mock-server配置私有环境变量并设置相应内容 2)获取mock-sever的接口密钥AIP-key并创建接口名称 3)将mock-server的url(和接口密钥API-key一并)添加在环境变量中 4)在当前集合中创建新请求,在example中设置预期响应结果,使用环境变量中的mock-sever的url,并将环境变量中的mock-server的接口名称和API-key放到请求头(header)里,发送请求,获得预期结果.
六、查看日志
在做接口测试时,经常会因为代码写的有问题导致报错,这时通过查看日志就显得非常重要了,postman也提供了这样的功能,它允许我们在脚本中编写打印语句,查看打印的结果 ; 同时也可以查看每个请求的日志信息 。
在postman中编写日志打印语句使用的是JavaScript,编写的位置可以是Pre-request Script 或Tests标签中。编写打印语句如:console.log("我是一条日志")
打印的日志可以在在postman中:view-show postman console 进行查看
(第二个入口就是左上角第三个图标 )
这里面有几个比较实用的功能:
- 搜索日志:输入URL或者打印的日志就能直接搜索出我们想要的请求和日志,这对我们在众多日志中查找某一条日志是非常方便的 。
- 按级别搜索:可以查询log,info,warning,error级别的日志 ,有助于我们更快定位到错误 。
- 隐藏请求(Hide network):把请求都隐藏掉,只查看输出日志 。
总之,通过这个功能,我们在请求接口报错时,通过打印响应的日志,就能很轻松地找到问题原因了 。