软件测试须知基于PostMan的接口自动化测试

临近年底,公司任务也不是很多,趁这个机会老大让我研究了一下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的接口自动化测试_第1张图片

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

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

软件测试须知基于PostMan的接口自动化测试_第2张图片

定义变量(集合变量)

软件测试须知基于PostMan的接口自动化测试_第3张图片

使用变量

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

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

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

软件测试须知基于PostMan的接口自动化测试_第4张图片

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

实现步骤

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

软件测试须知基于PostMan的接口自动化测试_第5张图片

断言

    //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,就是我们自定义的参数文件

软件测试须知基于PostMan的接口自动化测试_第6张图片

生成html格式的报告

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

软件测试须知基于PostMan的接口自动化测试_第7张图片

结尾

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

你可能感兴趣的