zl程序教程

您现在的位置是:首页 >  前端

当前栏目

一文3000字从0到1实现基于PostMan的接口自动化测试(建议收藏)

postman测试接口自动化 实现 基于 建议 收藏
2023-09-11 14:14:52 时间

整理了一些软件测试方面的资料、面试资料(接口自动化、web自动化、app自动化、性能安全、测试开发等),有需要的小伙伴可以文末加入我的学习交流qun,无套路自行领取~

临近年底,公司任务也不是很多,趁这个机会老大让我研究了一下PostMan的脚本自动化测试。作为一个前端开发,说实话,对于PostMan的操作,仅仅限于新建请求->填写url地址和参数->send发送,然后看看返回值而已。事实上,PostMan的功能还是非常强大的,我也搜了许多资料,整理出一篇比较详细的文档

理解pm对象

pm对象 - 是PostMan中非常核心的一个对象。包含与正在执行的脚本有关的所有信息,并允许访问正在发送的请求的副本或接收到的响应,还允许获取和设置环境变量和全局变量

pm对象内部的核心功能(属性)

  • pm.info -- info对象包含与正在执行的脚本有关的信息(请求名称、请求id、请求次数....)
  • pm.variables/pm.environment/pm.global -- 变量管理
  • pm.request -- 当前脚本所在的请求
  • pm.response -- 当前脚本所在请求的响应结果
  • pm.cookies -- 包含与请求域相关联的cookie列表
  • pm.test -- test函数用于编写测试脚本
  • pm.expect -- 断言函数

pm上的方法(此部分不需死记,需要的时候查找就ok)

pm.info对象

方法描述结果类型
pm.info.eventName输出脚本实在哪个脚本栏中执行的String
pm.info.iteration当前运行迭代的次数Number
pm.infi.iterationCount计划运行的迭代总数Number
pm.info.requestName请求名String
pm.info.requestId请求IDString

pm.globals对象

方法描述
pm.globals.has('变量名')判断是否存在该全局变量
pm.globals.get('变量名')获取指定全局变量
pm.globals.set('变量名','变量值')设置全局变量
pm.globals.unset('变量名')清除指定的全局变量
pm.globals.clear()清除全部全局变量
pm.globals.toObject()将全局变量以一个对象的方式全部输出

pm.environment对象

方法描述
pm.environment.has('变量名')判断环境变量是否包含某个值
pm.environment.get('变量名')获取指定环境变量
pm.environment.set('变量名','变量值')设置环境变量
pm.environment.unset('变量名')清除指定环境变量
pm.environment.clear()清除全部环境变量
pm.environment.toObject()将环境变量以一个对象的方式全部输出

pm.variables对象

方法描述
pm.variables.get('变量名')获取变量中的指定值

pm.request对象

方法描述
pm.request获取当前发起请求的全部headers
pm.requset.url获取当前发起请的url
pm.request.headers以数组的方式返回当前请求中的header信息

pm.response对象

方法描述
pm.response.code当前请求返回的状态码200、404、500...
pm.response.reason()当前请求成功返回Ok
pm.response.headers以数组的形式返回当前请求成功后的请求头信息
pm.response.responseTime获取本次请求的时长,单位ms
pm.response.text()以文本的方式获取响应中的body内容
pm.response.json()将body中的内容解析为json对象

PostMan中的Test

在postman中用于测试、断言的函数主要有

方法描述
pm.test("testName",specFunction)测试方法,第二个方法中填写测试内容
pm.expect(assertion:*)断言

理解变量

  • 全局变量,一但声明了全局变量,全局有效。在postman中的任何集合、任何请求中都可以使用这个变量。作用域最大
  • 集合变量,集合变量是针对集合的,声明的变量必须是基于某个集合,使用范围也只是针对某个集合有效
  • 环境变量,声明环境变量,首先要创建环境,然后在环境中才能创建变量,如果想要使用这个环境变量,必须先选择这个环境.环境可以创建多个,每个环境下又可以有多个变量

上图展示了postman中变量的关系,由小到大依次为 data->local->-environment->clooection->global。local变了暂时我还没研究,data对象下面我会讲到

定义变量(环境变量&全局变量)

定义变量(集合变量)

使用变量

1.在请求参数中使用变量:{{变量名}},请求参数包括URL、Params、Authorization、Headers、Body

2.在Tests或者Pre-request Script中获取变量

  • 获取全局变量 - pm.globals.get("变量名")
  • 获取集合变量 - pm.collectionVariables.get("变量名")
  • 获取环境变量 - pm.environment.get("变量名")

外部文件实现数据参数化(导入csv文件)

实现步骤

1.创建数据文件,支持的格式为csv和json
2.请求中替换参数变量,{{}}或者data.xxx(我们导入的csv文件中的字段,可以直接通过data对象访问)
3.选择集合->点击Run->选择对应数据文件
复制代码

断言

    //pm.expect是一个通用的断言函数,主要与pm.test联合使用,常见的用法如下
    pm.test("testName",function(){
        pm.expect('xxx').to.include('xxx');
    })
    // pm.expect()接收一个断言内容(实际结果,一般为response返回的结果)
    // .to 是连接符,用于连接断言与判断,这些连接符不会对结果造成任何影响,只是让断言语句更复核英文语法。连接符包括to,be,been,is,that,which,and,has,have,with,at,of,same
    //.include()断言方式,接收预期结果
复制代码

常用的断言方式

.equal(value)--断言是否严格相等
.not--取非,对之后的断言无条件取反
.include(value)/.contains(value)--表示实际结果是否包含预期结果
.ok/.true--断言目标为真

Newman

介绍

Newman是一款基于node.js开发的可以运行postman的工具,可以直接从命令行运行和测试postman集合

安装

npm install -g newman - 安装newman
npm intall -g newman-reporter-html - 安装生成html报告时需要的插件

语法

newman run xxx.json -d xxx.json/xxx.csv

  • run xxx.json - 标识要执行的postman脚本,就是我们导出的集合
  • -d xxx.json/xxx.csv - 标识要执行的数据data,就是我们自定义的参数文件

生成html格式的报告

newman run xxx.json -d xxx.json/xxx.csv -r html --reporter-html-export /Users/lz01/Desktop/tdtest.html
默认将html报告保存在当前目录下,如想保存到指定目录,在文件名前加路径即可

结尾

以上就是postman配合newman的使用,我们可以把每个接口需要的参数和期望的状态导入csv文件或者json,然后通过命令就能直接测试出每次的结果,节省了大量的测试时间。至于集成到Jenkins上实现真正的自动化测试,这个还的我们老大来搞,能力有限就不多介绍了,有兴趣的小伙伴可以自行查看

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我们的测试交流群大家一起讨论交流学习。