一、为什么选用postman


postman调试工具无论对于开发和测试小白,还是技术大牛来说应该都耳熟能详,在过去的几年里大家对这款工具应用最广的用途是把当作接口调试的测试工具,它能发送几乎所有类型的HTTP请求,操作界面非常简洁美观(大家来欣赏下图),支持抓包,保存历史记录,有用户组管理机制,方便多端同步用例等等。最主要的是各位小伙伴已经对它用于接口调试的功能非常熟悉,已经为我们接下来使用它做持续集成的接口自动化打下了良好的基础。 

postman清空es的所有数据_postman 添加cookie

二、postman 基础知识

相信大家使用postman来调试接口应该是相当熟悉了,所以还不懂使用的同学可以在网上找到相关的资料(非常多),或者直接查阅官网,我建议大家还是要学会看官方文档,度娘很多教程可能会不全或者已经过时了,官网是最新最全的学习文档,不懂就慢慢看,这篇文章只能带着大家入门,修行只能靠自己(微笑)。 官方文档: https://learning.getpostman.com/docs/postman/launching_postman/ 1、postman版本选择

postman分为chrome插件版和native版本,插件版的有很多功能都受限制,比如:必须要安装扩展才可以操作cookie,headers设置受限制,没有native版本的Postman console,非常不方便调试等,不方便我们后续做接口自动化,所以版本必须选择native版,版本号用最新的就可以。 工具下载: https://www.getpostman.com/downloads/ 2、postman代理抓包

由于postman不是类似fiddle这种专门用于抓包的软件,fiddler软件安装后默认打开抓包功能,默认端口是8888,但是postman需要自己手动打开代理设置。设置方法如下: ①点击右上角的拦截图标,打开【Capture requests】,设置好Port和Target 注意Capture requests按钮一定是要处于on的状态; Port:就是端口,只要不设置系统和浏览器的冲突端口就可以,比如9999;

Target:就是抓到的HTTP包存放的目标地,我一般选择放在history,方便查看。


postman清空es的所有数据_postman 上传文件_02


②打开浏览器的代理设置,设置相同端口 打开浏览器,找到代理服务器,将地址修改为本地机器的ip地址,端口设置为第①步设置的端口号,点击确定即可。 我们演示的这个设置方法是以PC端为例子,有些同学需要抓APP端的包。设置方法原理也大概相同,大家可以参看官网文档中的设置方法即可。 移动端设置方法: https://learning.getpostman.com/docs/postman/sending_api_requests/capturing_http_requests

postman清空es的所有数据_postman 安装失败_03

3、postman调试控制台

打开左下角打开【postman console】控制台,当我们某个测试用例跑不通的时候需要调试,可以打开这个postman的控制台方便查看接口调试的打印信息,当然我们后续用js写的脚本可以在控制台中看到输出信息。

postman清空es的所有数据_postman cookie设置_04

4、postman 发送请求

发送请求是postman最核心的功能,如下图选择好请求方式及接口地址、相应参数,点击发送即可。有两个地方强调下: ①需要发送上传文件的请求,在body中选择选择form-data ,选择File选项后即可选择文件 ②可以将请求头统一管理,打开任意一个请求tab,点击Headers->Presets->Manage Presets可以设置好请求头信息,下一个请求再需要相同的请求头便可以从这里读取。

postman清空es的所有数据_postman 添加cookie_05

postman清空es的所有数据_postman 安装失败_06

三、postman 变量与集合


1、什么是变量

首先我们来思考一个问题,为什么要使用变量,如果某个参数值只需要在某个独立接口的使用一次,那么我们可以不使用变量,但是如果变量需要在多个位置重复使用,或者发生接口传递(即前一个接口的返回值用于下一个接口的请求参数),那么借助变量,postman就可以实现业务逻辑与测试数据分离,帮助我们建立健壮的测试用例。 2、变量的作用域

全局变量(Global):主要用于需要在多个位置重复使用的几乎不改变的数据

环境变量(environment):主要用于接口传递的参数

局部变量(local):集合/文件/接口中 某个js脚本中的变量

数据变量(data):主要用于并发测试(json/csv文件)

同变量名的情况下,优先级范围:局部变量>数据变量>环境变量>全局变量 3、如何设置变量

设置变量的方法有两种: ① 在postman的ui上进行定义:如下图所示

postman清空es的所有数据_postman 安装失败_07

postman清空es的所有数据_postman cookie设置_08


② 使用脚本定义,在Test选项卡中填入脚本: pm.environment.set("new_name", "zhougang");

postman清空es的所有数据_postman 上传文件_09

4、如何使用变量

使用变量也是有两种写法,用在不同的场景中 ① 在Builder中使用:{{varname}},一般用于请求头、请求体、请求地址中

postman清空es的所有数据_postman 添加cookie_10


② 在js 脚本中使用:pm.environment.get("variable_key"),一般用于Test或pre-request Script选项卡中

postman清空es的所有数据_postman清空es的所有数据_11

5、集合

我们为什么要使用集合以及使用集合的好处在哪? ①可以组织业务逻辑:分类和存储接口

②方便一键运行:在runner中选择要运行的集合或者里面的文件夹进行运行

③方便导入导出:导出和导入json文件,如使用newman在命令行执行;

注意点:集合和变量的导出是分开的。

④方便分享:分享至自己团队的共享目录下

基于以上几点,我们想要写出好维护且高效的接口测试用例,一定要好好利用集合。

postman清空es的所有数据_postman cookie设置_12

四、postman脚本应用–接口断言


前三节内容我们了解到了做自动化测试前必须掌握的基础知识,这一节我们进入到接口自动化测试中的核心内容:如何判断一个接口的返回值与期望值相符,也就是我们说的接口断言成功。这个时候postman的测试沙箱sandbox就发挥了巨大的作用。官方解释:Postman sandbox沙箱是一个JavaScript执行环境,在编写pre-request scripts 和 test scripts编写的脚本在此沙箱中执行(Postman和Newman中都可以使用)

①在请求发送前,在“pre-request script”选项卡下输入脚本,主要用于设置测试需要的测试参数 ②在请求发送后,在“test”选项卡下输入脚本,主要用于做断言。

postman清空es的所有数据_postman 添加cookie_13


③因此如果我们需要断言一个接口返回是否是预期值,可以参考如下例子: 1)判断code是不是返回200  var jsonData = pm.response.json(); pm.test("操作是否成功", function () {     pm.expect(jsonData.code).to.eql(200); }); 2)判断字段是不是跟预期值相等 tests["名称是否正确"] = jsonData.data.name === pm.environment.get("customer_contract_name"); 3)判断返回时间是否在预期2000ms内 pm.test("接口返回时间是否超过2s", function () {     pm.expect(pm.response.responseTime).to.be.below(2000); }); 4)执行顺序设定(此代码只在runner和Newman中生效): postman.setNextRequest('接口名称'); 上边的例子都可以在工具的右侧找到事例,大大节省我们编写断言的时间,如果这里没有你需要的,可以查看帮助文档 https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference/

postman清空es的所有数据_postman清空es的所有数据_14

重点强调:你可以将请求和测试脚本添加到一个集合,一个文件夹,一个请求中,优先级是:请求>文件夹>集合。举个例子,判断返回时间的断言就可以放在集合或者文件中,因为多个接口可以共用这一个断言。


五、postman接口自动化


前面我们已经做好了各种准备工作,包括抓包、编写接口、存入集合、设置变量、断言等,接下来就可以把我们的接口自动的跑起来。 1、使用postman自带的 runner工具

①按照下图进入runner页面,在runner中选择要运行的collection或者里面的文件夹进行运行

②enviroment:选择用例跑的环境变量集合

③iterations:接口迭代次数(接口自动化 默认使用1就行,1以上一般拿来做并发测试)

④delay:每个接口发起请求的的间隔时间(建议100ms)

⑤data:数据文件,可以是json格式的,也可以是csv格式的(一般用于并发测试)

⑤keep variable values: 重点!!!必须要勾上,环境变量将会更新

⑥start run:运行结果集,并查看结果页,可导出


postman清空es的所有数据_postman 安装失败_15


运行结果如下显示,示例中34条成功,0条失败。如果有失败的用例可以用控制台查看是请求没发送成功还是断言失败,单独调试。

postman清空es的所有数据_postman cookie设置_16

2、使用postman的插件:Newman

到了这一步,其实我们已经讲完用postman做接口自动化的一个完整过程了。但是再来思考一个问题,如果我要将这个接口自动化测试加入持续集成的环节,并且再给领导发一份这个测试结果的报告呢?这时候 Postman的持续集成方案,便是使用自带的插件Newman + 持续集成工具如Jenkins的结合使用 1)官方说明文档: https://www.npmjs.com/package/newman(https://www.npmjs.com/package/newman 2)使用Newman运行用例并生成测试报告

①首先需要安装node.js环境(同时安装了npm) 下载地址:http://nodejs.cn/download/

②使用命令行安装 Newman npm install -g newman 安装导出html报告的包: npm install -g newman-reporter-html ③Newman运行命令脚本,一般只需要指定运行集合、运行环境、间隔时间,数据文件,指定输出报告的模板和位置 原始脚本: newman run xxx.json 添加下述定制化参数:

指定运行环境变量集合: --environment xxx.environment.json 指定输出环境变量集合: --export-environment xxx.environment.json 指定输出报告形式: -r cli,html 指定输出报告文件: --reporter-html-export xxx.htm 指定接口间隔时间: --delay-request 100 进入脚本所在文件目录,运行最终脚本 newman run cms_init.postman_collection.json --environment cms-test.environment.json --export-environment cms-test.environment.json -r cli,html --reporter-html-export ./reports/cms_init_html_output.htm --delay-request 120 运行结果(命令行):

postman清空es的所有数据_postman清空es的所有数据_17


运行结果(html格式):

postman清空es的所有数据_postman 上传文件_18

3)使用Newman与Jenkins结合

当我们将代码推送到git上后,可以使用jenkins直接构建任务即可,省去了脚本打包放到对应服务器再启用对应环境脚本的麻烦。 参考链接: https://www.jianshu.com/p/18863c609019 参考链接:

①下载jenkins的war包,使用java -jar jenkins.war –httpPort=8080启动, 按照配置jenkins完成 ②在Jenkins中安装对应的插件,Git、NodeJS 插件 ③新建job,配置相关内容

postman清空es的所有数据_postman 添加cookie_19


构建环境配置

postman清空es的所有数据_postman 上传文件_20


构建脚本

postman清空es的所有数据_postman 添加cookie_21


选择构建,查看控制台输出信息

postman清空es的所有数据_postman清空es的所有数据_22

六、与钉钉机器人结合


钉钉是我们常用于工作沟通的工具,配合钉钉强大的机器人功能,可以让我们在持续集成的测试环节中实时、快速接收到测试结果的消息推送。 1、建一个自动化测试群,点击群设置-》群机器人

postman清空es的所有数据_postman 添加cookie_23


2、选择自定义机器人

postman清空es的所有数据_postman 上传文件_24


3、添加机器人,获取到access token

postman清空es的所有数据_postman 上传文件_25


4、将access token设置到Jenkins中的钉钉通知器插件中(在Jenkins插件中下载安装),最后保存即可

postman清空es的所有数据_postman清空es的所有数据_26


5、Jenkins任务跑完以后,钉钉就会收到消息推送

postman清空es的所有数据_postman cookie设置_27

End