在接口测试中,经常会遇到接口之间存在依赖的情况,比如接口B的输入依赖于接口A的输出。这时候就涉及到接口之间数据的流动。 今天我们这一章要介绍的就是如何使用postman处理接口之间的依赖。
不过在介绍具体如何解决接口依赖的问题前,我会先介绍下一些基础知识,如果大家对于基础已经掌握了,可以直接看第三部分。
大纲:
* Postman的变量介绍
* Postman的变量的操作
* 接口依赖操作的例子
1 Postman的变量介绍
1.1 类型
Postman根据变量的作用范围,提供了5中不同类型的变量:
global 全局变量: 全局变量的作用范围是针对一个workspace,也就是同一个workspace内的所有的集合,请求,测试脚本,环境变量都共享。
全局变量容易造成混淆,所以尽量避免使用,一般只有这两种情况会考虑使用全局变量,一是为了快速测试某个请求,而是你的项目还处于非常早期的原型阶段。
collection 集合变量:集合变量作用于集合这个范围,独立于environment,也就是不需要根据选择的环境不同而进行更改的变量可以放在集合里。
适合如果只有一个环境的情况,或者虽然有多个环境,可是这个变量不会随着环境变化而变化。
environment 环境变量:如果你的变量需要根据不同的环境进行调整的话(比如local,开发环境,生产环境等),就可以选择环境变量。这个在Postman 实用接口测试系列 1 中有介绍,这里就多做讲解。
如上面所提到的,如果你只有一个环境的话,选择集合变量更合适,可是如果你有多个环境的话,选择环境变量更好。环境变量不同于集合变量,它还可以定义不同角色的权限。
local 本地变量:是个临时变量,只在脚本中使用。是个局部变量,只在当个请求运行时或者集合运行(collection runner)时有效, 运行结束则不再可用。
特别适合如果你希望一个值来覆盖之前的变量的值,可是又不希望脚本跑结束后依然保持不变。
- data 数据变量:这个变量比较特殊,所以我最后介绍,这个指的是当我们通过Newman或者Collection Runner来批量跑请求的时候,变量从csv文件或者json文件里导入。比较适合做数据驱动的测试,这个在我们之后会介绍。
1.2 生命周期的关系
如下图所示,如果一个变量同时定义在多个地方,则会使用最里面定义的变量。例如一个叫username的变量同时定义在global 和 local里,则会使用local里定义的值。
2 Postman变量操作
2.1 通过UI进行操作:
- global 变量:
点击右上角的眼睛图标,然后在弹出窗里点击Edit
- collection 变量:
选中左边栏的期望的集合,然后点击 ... ,在弹出框里点击Edit,在Edit的弹出框里点击Variables
- environment 变量:
1是通过点击右上角的设置图标,2是点击眼睛图标,然后点击Add
2.2 使用变量
使用双花括号就可以使用这个变量了。比如 {{username}}, 注意,如果变量是字符串,使用的时候需要加上引号 "{{username}}"
2.3 通过脚本进行操作:
pm.globals.set("variable_key", "variable_value");
pm.globals.get("variable_key");
pm.globals.unset("variable_key");
pm.collectionVariables.set("variable_key", "variable_value");
pm.collectionVariables.get("variable_key");
pm.collectionVariables.unset("variable_key");
pm.environment.set("variable_key", "variable_value");
pm.environment.get("variable_key");
pm.environment.unset("variable_key");
pm.variables.set("variable_key", "variable_value");
pm.variables.get("variable_key");
pm.variables.unset("variable_key");
注意:
Postman 把环境变量和全局变量是存为string类型,如果我们要存的是一个arrays或者objects,需要使用JSON.stringify()
方法,在检索他们的时候记得使用JSON.parse()
方法。
3 接口依赖的例子
前面我们介绍了这么多基础知识,现在我们使用他们来解决我们接口依赖的问题。关于这一部分,我将会举一个具体的例子来说明。
背景:
假设我们有一个login接口,它会生成token,query接口需要使用token才可以访问。也就是query接口依赖于login接口.
如何选择变量:
按照其他提到的,首先非必要情况尽量不要使用全局变量,所以全局变量排除。
其次,我们这个接口不仅仅有DEV环境,还会有QA和Prod环境,所以也排除了collection变量。
再次,我们并不希望代码跑完token的值就没了,因为除了query接口,我们还会有一系列登陆后才可以使用的接口都需要这个token。
综上,我们选择了环境变量。
步骤:
1.创建一个环境,命名为DEV
2.在login接口的test加入如下代码,导出他的token
var data \= JSON.parse(responseBody);
if(data.accessToken){
postman.setEnvironmentVariable("access-token", data.accessToken);
3.选择环境DEV,跑login接口 ,之后我们会发现环境变量里多一个一个变量叫做access-token, 同时它的值就是login接口返回的response的token
4.query接口通过{{access-token}} 使用变量
这样一个接口依赖的例子就结束啦。下一章将会介绍如何编写测试代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。