Postman实现接口自动化详细步骤解析

实战postman自动化接口测试。
280阅读 · 2019-12-11 22:20发布

概要描述

  • 通过登录接口获取token给其他接口使用
  • 编写支持多环境的脚本,可一键切换目标环境
  • 文件上传、JSON接口步骤解析
  • 接口参数化、配置环境参数。
  • 支持文件上传接口。
  • 批量运行,查看完整请求报告。

简单描述

Postman是一个简单的HTTP请求模拟工具,它可以模拟多种HTTP请求方式,使用简单的配置就可以实现一个请求。通常Postman可以用来做接口自动化测试工具,它拥有切换环境、全局变量、断言、批量运行等功能。本案例使用的是Postman v7.13.0。

Postman界面简易说明图:

测试背景

做接口自动化测试,需要先了解目标系统的设计情况。本次测试系统是前后端分离项目,采用VUE前端+Java后端实现。身份验证使用的是Token校验(既header中存放token来验证身份),请求体大部分是JSON格式传输。因为是演示案例,所以测试的接口只分为三类,第一部分是登录,第二部分是普通数据请求,第三部分是上传文件。

我们要实现的目标是使Postman能自动批量执行接口请求,最后返回一个报告让我们知道整体运行结果。(实际场景中,如果系统功能有大量的关联功能,例如测试A系统可能需要先创建B/C/D/E等等关联的内容,这时也可以通过Postman配置接口,实现一键创建)

确定方案

  • 支持登录后操作:除了登录页面外,其余页面均需要登录后才能访问,本案例使用Token校验身份,所以需要先访问登录接口获得Token,然后将Token保存到全局变量中,以便后面的接口调用。
  • 支持多环境:测试过程中,可能会涉及多个环境,所以我们需要实现这套脚本支持多环境。在通用的地址部分,我们调用Postman里环境的参数,执行时通过指定环境,即可达到切换环境的效果。

具体步骤

第一步:获取接口信息并调通单个接口

  1. 通过Chrome的开发者工具(快捷键F12),获取接口的URL、请求方式和传递参数。
    • 第一个为登录接口,POST请求方式,使用multipart/form-data传递参数,参数内容是Form Data中的内容
  2. 在Postman中,新建选项卡,把对应的参数填写进去。
    • 参考如下图一一对应填入即可,Postman会因为你选择了form-data,自动在header中添加Content-Type:application/x-www-form-urlencoded(这种格式表示内容为form-data)
    • 注意:request请求中的header有很多字段,大多数是浏览器默认自带的,实际只需要传必须的字段就可以访问成功。通常影响服务器判断的字段有:Content-Type、Cookie等(有些系统必须携带,有些系统不带亦可)
  3. 使用Send请求一次接口,查看返回内容是否和前面的返回内容一致。
    • 接口是登录接口,需要获取token,所以我们需要确认是否得到token,本案例中token放在响应头的token字段中(不同的系统存放位置不一样,使用的字段名称也可能不一样,有些系统会放在请求体中)。
  4. 接口请求响应都正确后,保存接口。
    • 点击右侧Save旁边的小箭头,出现选项后点击“Save As...”
    • 在新窗口中“Request name"中输入接口名称,下面的All Collections中创建分类(可按照个人习惯创建)
    • 点击右下角Save保存成功,此时在整个界面左侧的“Collections”中,可以看到刚刚创建的分类和接口。

第二步:实现登录接口token和环境URL参数化,通过全局变量使所有接口共用变量。

  1. 新增测试环境,添加测试环境对应的参数。
    • 点击右上方齿轮图标(Manage Environments),进入配置页面,在弹出的页点击Add,进入环境配置页面。
    • 在配置页面增加该环境中才有的参数,然后提交。VARIABLE表示环境变量名,INITIAL VALUE和CURRENT VALUE填写相同的值即可。后面的请求接口中,可以通过环境变量名调用对应的值。
  2. 配置完成后点击右上角查看图标查看配置的环境变量。图标左侧可以修改不同的环境。
  3. 修改接口,使接口的URL、用户名和密码参数化。
    • 使用{{环境变量名}}替换需要参数化的内容,再次执行Send,响应结果一致即可。
  4. 通过后置断言获取token,把token的值保存到全局变量,方便其他接口调用。
    • 在选项卡的Tests标签内,加入以下代码。
      #新建局部变量tokenA,通过postman的getResponseHeader方法获取响应头中名称为token的值
        var tokenA = postman.getResponseHeader("token");
        #把值放进全局变量token中
        pm.globals.set("token", tokenA);
        #增加断言,判断响应头是否返回有效token(经测试,响应头若无token字段,它的值是undefined)
        tests["获取token成功"] = tokenA !== undefined;
      
  5. 再次执行脚本,查看是否符合预期。
    • 再次执行接口,执行后查看Globals中是否新增了名为token的变量,如果存在则表示tests执行成功。

第三步:新增获取消息状态接口

  1. 获取接口信息并在Postman中单次请求通过。
  2. 参数化token,使用全局变量中token的值。(若有其他需要参数化的内容,在也可以修改,本案例此步骤中没有)
    把接口Headers中
     Authorization: ebabcdefghijabcdefghijabcdefghijk
     替换为
     Authorization: {{token}}
    
  3. 添加后置断言,判断响应内容是否符合预期

    • 判断方式有多种,下面举例几种判断方式,更多的使用方式可参考Postman官方文档。

      #判断响应体内容是否相等
        pm.test("响应body正确", function () {
            pm.response.to.have.body("{\"code\":0,\"msg\":\"成功\",\"data\":[{\"auditStatus\":1,\"statusDesc\":\"已生成\"},{\"auditStatus\":2,\"statusDesc\":\"待配置\"},{\"auditStatus\":3,\"statusDesc\":\"完成\"}]}");
        });
      
        #判断响应码是否相等
        pm.test("Status code is 200", function () {
            pm.response.to.have.status(200);
        });
      
        #判断响应体是否包含
        pm.test("Body matches string", function () {
            pm.expect(pm.response.text()).to.include("string_you_want_to_search");
        });
      
        #判断响应头是否存在指定字段
        pm.test("Content-Type is present", function () {
            pm.response.to.have.header("Content-Type");
        });
      
  4. 再次执行Send,查看断言是否正确执行,若不正确则调试到正确为止。

第四步:新增文件上传接口

  1. 上传文件需要留意接口的Content-Type和参数名称,上传文件会使用Content-Type: multipart/form-data请求头。
  2. 在Postman中的Body处,选择File类型的参数,值上传一个文件即可。
  3. 执行Send,若响应值正确,则表示配置成功。

第五步:批量执行接口,查看执行结果

  1. 配置完全部接口场景后,点击左上角“Runner”进入批量执行页面。
  2. 在Runner界面左侧选择需要执行的Collection,右侧调整执行顺序(Postman的Runner会按顺序从上往下执行),执行前选择一个环境(Environment),点击Run开始批量执行。
  3. 执行结束后查看结果,结果页面会显示本次执行成功与失败的接口数量。

总结

至此,整个系统的部分功能已经实现了接口自动化请求,后续可以根据不同场景、正反向用例再完善接口数量。本次演示的功能已经可以覆盖大部分接口测试,Postman中还有许多其他功能可以再拓展研究,例如数据驱动(Runner中指定数据文件,使脚本运行时每次参数不一样)、接口导出导入、代理请求批量录制接口、MOCK模拟接口等等。

Postman本身不支持命令行模式,不过可以使用另一款newman工具,它可以在Linux、Windows上通过命令行的方式执行导出的Postman脚本,为Postman实现持续集成提供了解决方案。

目前来看Postman唯一的缺点是不支持并发请求压力测试,它的Runner中执行方式是串行执行(前一条接口执行结束后才进行第二条接口的请求),所以如果想要实现并发请求接口,需要使用其他工具(例如Jmeter)~