自动化测试开发文档(postman)
文章目录
- 软件环境
- 运行脚本
- 调用http(s)接口
- 脚本执行顺序
- 编写测试脚本
- pm对象
- 变量
- 处理response
- 流程控制
- 断言(assertions)
软件环境
开发环境: postman 从官网下载安装
命令行运行环境: newman 。先安装nodejs, 再执行npm install -g newman 进行安装。
运行脚本
- postman运行。
点击左上角import 将脚本导入到postman ;
导入之后,会显示在左侧菜单collections面板中
选中对应的collection , 点击右侧上方按钮,展开运行菜单,点击蓝色“run”按钮,弹出 collection runner窗口。
选择运行环境,设置运行次数等参数。如果需要在运行之前输入数据文件,可以在线选择数据文件,并指定数据格式
点击下方蓝色"Run"按钮,执行测试。 - newman 运行脚本
运行命令 : newman run [脚本文件名称] -d 数据文件名称 -e 执行环境文件名称
调用http(s)接口
http接口调用是postman测试用例的最小单元。postman提供全面的http接口支持,界面如下:
在接口调用中使用变量
配置接口调用时可以使用各种变量。使用变量的方式: {{变量名}}。例如下图:
其中 apiContextPath 是定义在运行环境中的变量, request body中的 loginUserName 则是在 pre-request script中定义的临时变量。
脚本执行顺序
postman支持以javascirpt语言编写脚本。对于每一个http接口请求,有两个脚本的调用入口:pre-request script 和 tests。
pre-request script在调用http接口之前执行,可以在这里准备接口调用需要的数据;tests 在接口调用完毕之后执行,可以对接口返回结果进行校验,并根据结果进行流程控制。
执行顺序如下:
编写测试脚本
pm对象
在postman运行环境,有一个全局的pm对象,它的作用类似于浏览器环境下的window对象,可以以js方法的形式调用postman提供的各种功能。
变量
变量是传递数据的主要手段,按照变量的作用范围(scope),分成5种变量。全局变量, 环境变量, 集合变量, 数据变量 , 本地变量。
全局变量(global): 全局可使用,在pm.globals中管理。
环境变量(environment): 描述运行环境,在运行环境中配置。通过 pm.environment进行管理。
集合变量(collection): 集合变量在集合内所有请求都可以访问,通过pm.collectionVariables进行管理。
数据变量(data): 数据变量通过数据文件读取,通过pm.iterationData获取。
本地变量(local): 可以通过pm.variables进行赋值和更新,但使用pm.variables获取变量时, 如果变量不存在,可以获取其他作用范围的变量。
不同作用域的同名变量:不同作用域可以定义同名的变量,通过各自作用域的管理对象访问时互不冲突。在请求中使用{{变量名}}获取变量,或者使用pm.variables.get()方法获取变量时,会根据作用域的优先级,返回变量值。 作用域的优先级为: 本地 > 数据 > 集合 > 环境 > 全局。例如,我们在集合变量和环境变量都定义了一个名叫username的变量,{{username}}和 pm.variables.get(“username”)都会返回集合变量中的变量。
常用的数据操作API(以pm.globals为例,其他作用范围api基本一致):
pm.globals.has(variableName) 检查变量是否存在
pm.globals.get(variableName) 获取变量
pm.globals.set(variableName, variableValue) 设置变量值
pm.globals.unset(variableName) 删除变量
pm.globals.clear() 清空所有全局变量
处理response
在tests脚本中,我们可以获取请求返回的结果,进行处理和校验工作。
postman将它封装到pm.response对象中。
pm.response.status 响应状态
pm.reponse.json() 将json格式的响应内容转换为对象
流程控制
流程控制通过 postman.setNextRequest(requestName)方法来实现,这个方法可以指定当前请求执行完毕之后下一个运行的请求。
postman没有提供循环控制的方法,如果要实现循环调用,可以配合条件判断一起实现。
举例,我们在数据文件中定义了一个帖子信息的数组,变量名为articleList,需要循环调用“发布帖子“接口。我们可以在登陆成功之后,定义一个当前处理帖子的下标变量。在调用发布帖子接口完毕后,判断是否是最后一个帖子,如果不是,继续调用发布帖子接口。
登录接口tests 脚本:
pm.collectionVariables.set("articleIndex",0);
发布帖子接口 Pre-request script 脚本:
let artcileList = pm.itreationData.get("articleList")
pm.collectionVaribles.set("articleInfo", articleList[pm.collectionVaribles.get("articleIndex")]);
发布帖子接口tests 脚本:
let articleIndex = pm.collectionVariables.get("articleIndex")
if(pm.iterationData.get("articleList").length > articleIndex + 1){pm.collectionVariables.set("articleIndex", articleIndex + 1);postman.setNextRequest("发布帖子");
}
断言(assertions)
断言是验证接口运行结果与我们的预期是否一致的工具。postman 使用 pm.test(断言名称, 断言回调函数)方法来实现断言操作。
我们可以在pre-request scripts中校验输入数据是否符合预期,在tests脚本中校验接口响应结果是否符合预期。