简介

postman是一个接口测试工具,常见的GET请求可以通过浏览器直接访问。但是涉及到POST请求、需要带cookie/权限相关的访问无法实行浏览器访问的时候。Postman最基本的功能就派上用场了。当然它还可以支持一些进阶的功能,比如接口自动化测试。下面就来具体讲一下。

优点

1、启动软件后在引导界面点击Request,给Request命名,然后创建文件夹并把该Request归属到该文件夹。
2、在地址栏输入postman-echo.com/get然后添加参数后点击send按钮,可以看到返回值。
image.png
image.png
image.png

请求说明:


参数编辑:

  • 点击params按钮,postman可以自动办公们解析出对应的参数
  • 如果暂时不传参数,可以方便的通过不勾选方式去实现
  • 如果想要批量编辑参数,可以点击右上角的Bulk Edit,实现批量编辑


响应数据:

  • 在主页下方一栏菜单为响应菜单栏,可以查看响应内容,Cookie、Headers、响应状态码等信息

发送一个POST请求

对一个POST接口发送GET请求。会报404
image.png
HTTP POST请求是将数据传输到服务器,返回 的数据取决于服务器的实现。
POST请求可以使用query String Parameters以及body将参数传递给服务器。
正确操作如下:
1、Query String Parameters传递参数
image.png
2、body传递参数
image.png
Postmam Body 数据类型数码:

  • form-data multipart/form-data是Web表单用于出书数据的默认编码。这模拟了在网站上填写表单并提交它,表单数据编辑器允许我们为数据设置键-值对。我们也可以为文件设置一个键,文件本身作为值进行设置。
  • x-www-form-urlencoded该编码与URL参数中使用的编码相同。我们只需输入键-值对,postman会正确编码键和值,请注意,我们无法通过次编码模式上传文件。表单数据和urlencoded之间可能存在一些差异,因此请务必检查Api的编码实现,确认是否可以使用这种方式发送请求。
  • raw请求可以包含任何内容,除了替换环境变量之外,Postman不触碰在编辑器中输入的字符串。无论你在编辑区输入什么内容,都会随请求一起发送到服务器。编辑器允许我们设置格式类型,以及使用原始主体发送的正确请求头。我们也可以手动设置Content-Type标题,这将覆盖Postman定义的设置
  • binary二进制数据可以让我们发送Postman我i发输入的内容,例如图像,音频或视频文件

    进阶操作

    header

    请求头-用来说明服务器要使用的附加信息,比较重要的信息由Cookie、Content-Type、User-Agent等,在postman中可以在请求下方的Heafers栏目中设置,如下图所示
    image.png
    响应头:打开控制台可以查看response的header
    image.png
    image.png

    Cookies

    Cookie是存储在浏览器中的小片段信息,没次请求后都将其发送会服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。
    由于HTTP是一种无状态的协议,服务器从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证,没人一个,无论谁访问都必须携带自己通信证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
    Cookie是有服务端生成,储存在响应头中,返回客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头重,并发送给客户端。postman也可以设置、获取、删除cookie。
    DEMO:
    image.png发送请求后,请求的request里面就带上了这个Cookie
    image.png
    想不带Cookie,X掉就行了
    image.png
    当响应返回里面有Set-Cookie的时候。你下次请求的时候就会自带刚设置的Cookie
    image.png
    刚请求完成后,我们的Cookies里面就有了这个Cookie
    image.png

    授权

    Basic Auth Demo
    Basic Auth 是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和应对的密码。
    当不输入任何授权信息的时候访问:
    image.png
    输入用户名密码后访问:
    image.png
    还有其他类型的鉴权方式不一一列举了。可以自己测试下

    变量

    变量根据应用范围区分为
    本地变量(本次请求、本URL有效)
    环境变量(某个环境可以使用的变量)
    全局变量(全局生效。都可以引用)
    覆盖关系为 本地>环境>全局
    还有一种【数据变量】稍后再讲解,是通过CSV/JSON文件导入使用的

本地变量Demo:
image.png
环境变量Demo
image.png
再添加一个prod
image.png
发送请求的时候选择环境
image.png
beta
image.png
prod
image.png
如果这个时候还有【本地变量】,【环境变量】会被覆盖。
image.png
Global变量 Demo:
image.png
image.png
实践:从响应中获取到数据,作为下次请求的request参数
image.png
脚本
image.png
控制台上输出userId
image.png
查看Global是否被设置上
image.png
GET请求使用这个【全局变量】
image.png


断言

一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是否符合我们的预期,也就是断言。在街口测试中一般会根据响应状态码或者返回的数据来进行断言。
postman提供一个测试沙盒(postman sandbox)测试沙盒是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script 和 test Script。

  • pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行
  • test Script(测试脚本)当接收到响应之后,在执行测试脚本。


Demo**
设置变量
image.png
使用变量请求,查看返回
image.png
脚本编写

  1. //校验返回值为200
  2. pm.test("Status code = 200",function(){
  3. pm.response.to.have.status(200);
  4. });
  5. //获取请求的参数值打印
  6. username = pm.variables.get("user");
  7. console.log(username)
  8. //校验响应内容是否和请求一致
  9. pm.test("Check username = request.username", function () {
  10. var jsonData = pm.response.json();
  11. pm.expect(jsonData.form["user"]).to.eql(username);
  12. console.log(jsonData);
  13. });
  14. //检测响应时间是否小于0.5s
  15. pm.test("Response time is less than 1000ms", function () {
  16. pm.expect(pm.response.responseTime).to.be.below(1000);
  17. });

image.png
其中请求超过1s了。所以校验失败了
再请求一次成功1s内返回
image.png
其他API还有一堆堆。可以自行学习
https://learning.postman.com/docs/writing-scripts/test-scripts/

扩展&集成

本地批量运行

基于Collection
image.png
image.png
执行结果
image.png
执行 3次 + 每次请求间隔1s
image.png
image.png
数据驱动
有时候需要我们参数化我们的参数,批量运行不同的case
1、创建一个data.json文件

  1. [{
  2. "username":"Jack",
  3. "password":"6666"
  4. },{
  5. "username":"Bob",
  6. "password":"5555"
  7. },{
  8. "username":"Marry",
  9. "password":"8888"
  10. }]

2、修改我们的请求以及Assert结果
设置环境变量
image.png
调试接口
image.png
image.png
image.png

批量运行
image.png

出现了两次超时导致的失败,其他校验逻辑通过
image.png
image.png
不过发现一个问题。retry的时候不会带上参数化的参数
image.png
image.png

Postman + Newman 实现API运行


1、安装 newman **

需要本地有node、npm环境

  1. sudo npm install -g newman
  2. sudo npm install -g newman-reporter-html

这个包在官方源中下载特别慢。以至于无法安装。我设置了taobao源,就很快安装上了

  1. npm config set registry http://registry.npm.taobao.org/

安装完成后,执行

  1. newman -v

image.png
则安装成功。

2、将刚才的文件夹导出
image.png
image.pngimage.png
在本地会产生一个json文件,内容大致如下
image.png
3、执行命令

  1. newman run ./Desktop/demo.json -r html

image.png
会在当前路径下产生一个newman的文件夹
image.png
image.png
打开这个HTML
我们发现case运行失败了2个case。
image.png
image.png
原因在于环境变量并未打包在导出的文件中。需要数据驱动。所以我们执行

  1. newman run ./Desktop/demo.json -r html -d ./Desktop/data.json

执行完成后再查看报告
image.png
image.png
执行了三次。只有一次失败是超时导致。
命令说明

  • run 代表要执行的postman脚本,即为导出的集合。
  • -d 表示要执行的数据,也就是执行 data.json 的数据
  • -r 生成测试报告类型,这里生成html格式报告


    更多方法请输入newman -h 即可查看

    报告查看
    newman不仅支持生成html报告,还支持其他报告类型,我们刚刚就是采用的Html格式的报告:

  • JSON reporter
  • JUNT/XML repoter
  • Client report
  • Html report

集成Jenkins

这个就是和Jenkins结合一下。
Jenkins所在服务器安装node、npm、newman。
上传demo.json / data.json 到服务器上
构建一个自由风格的JOB,里面配置下shell命令(内容和本地一样)就可以了。在这里不做演示了

导出为其他语言的请求
postman发的请求,可以自由转换为其他语言的语法。方便和其他语言(java/python 比较常见)结合着一起搞自动化测试
image.png
image.png