临近年底,公司任务也不是很多,趁这个机会老大让我研究了一下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 | 请求ID | String |
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
- 安装newmannpm 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上实现真正的自动化测试,这个还的我们老大来搞,能力有限就不多介绍了,有兴趣的小伙伴可以自行查看
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!