变量
借助变量,Postman可以实现业务逻辑与测试数据相分离,这有助于用户创建健壮性的测试用例
什么是变量
变量是来源于数学的概念,在计算机语言中指能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。简单的来说,变量就是可以取不同值得符号
为什么使用变量
变量允许在多个位置重用同一个值,这样就可以使代码保持独立。另外,如果想要更改值则可以通过改变变量来影响变量的值
如:假设有3个API请求使用同一个域-----domain.com
第一个API请求:baidu.com/x1
第二个API请求:baidu.com/x2
第三个API请求:baidu.com/x3
如果有一天baidu.com变成了so.com,若没有使用变量则需要修改上面3个API请求的URL。但如果将baidu.com设置为了变量,比如{{domain}}=baidu.com,那么上面3个API请求就变成了下面的形式:
第一个API请求:{{domain}}/x1
第二个API请求:{{domain}}/x2
第三个API请求:{{domain}}/x3
1、此时如果需要将baidu.com改为so.com的话,就只需要改变变量domain的值即可:{{domain}}=so.com
2、当然也可以将x1、x2、x3定义为变量
注:
1、使用Postman的脚本,用户可以设置变量值,从一个请求复制数据,并将其用于另一个请求
2、在Postman中使用变量有如下好处:
⑴重复使用变量定义的值,以便保持代码的可读性、可维护性等
⑵灵活的配置我们的设置以适应不同的用户或环境
⑶从响应中提取数据并向集合中的其它请求发起请求
变量作用域
作用域其实就是变量的生效范围和优先级。如果同一个变量在两个不同的范围内,那么优先从更高优先级的范围和变量中取值。Postman遵循以下4个层次来取值变量的值
1、全局变量:Global,在所有环境下都生效
2、集合变量:collection,只在所属集合下生效
3、环境变量:Environment,只在变量所属环境下生效
4、本地变量:Local,针对单个请求
5、数据变量:Data,感觉是针对同一个集合中的所有请求
1、上面4个变量域的优先级从低到高:全局<集合<环境<本地<数据
2、如:Global中有个变量name=jack,而Environment中也有一个变量name=rose,那么请求中的name变量值为rose。换句话说,全局变量会被环境变量覆盖,而环境变量会被数据变量覆盖(仅在集合中使用数据驱动可用)
变量的使用场景
Postman的变量主要用于参数化和关联
应用1: 常用变量可以按使用范围设置成集合或全局变量
应用2: 一套接口要在不同的环境上测试时, 可以新建两个环境,比如test环境和stage环境, 两个环境中添加base_url变量并设置不同的值, 请求中接口的url中使用{{base_url}}, 这样只需在Postman中切换环境就可以测试不同的环境
应用3: 接口依赖, 由于Postman的请求是只读的, 我们在Pre-request Script脚本中不能修改已设置好的请求, 这时我一般通过脚本将所需变量设置为集合/全局/环境变量, 然后在请求中使用{{变量名}}读取变量即可
构建请求时访问变量
1、在Postman界面上,我们可以用{{variableName}}这样的形式访问变量。当Postman解析变量时,字符串{{variableName}}将被替换为相应的值。
例如,对于值为http://localhost的环境变量url,我们必须在请求URL字段中使用{{url}}。发送请求时,{{url}}将被http://localhost替换
2、由于变量在请求builder中被访问是使用字符串代替的,因此,你可以在请求builder的任何地方添加文本,这包括URL,URL parameters,headers,authorization, request body ,header presets。Postman根据变量范围部分中讨论的范围规则解析变量,并将它们发送到服务器
环境变量
1、每个环境变量都是一组键值对,其中键为变量名。用户可以使用数据编辑器编辑这些内容
2、环境变量将始终作为字符串储存(全局变量也是)。如果正在储存对象、数组,应使用JSON.stringify()将其转为JSON格式再储存,使用的时候再借助JSON.parse()解析
3、环境变量:指在不同环境下,同一个变量值随着环境的不同而变化
4、环境变量可以在url 中使用,也可以在header 中能使用,还能在请求体中使用
什么是环境变量
在使用API时,经常需要不同的设置,如本地计算机、开发服务器或生产环境API。环境变量使用户能够通过变量来定制请求,这样就可以轻松地在不同的环境之间切换,而不需要改变请求。环境变量可以下载并保存为JSON文件,在需要的时候上传
例:
测试环境,host值:test.postman.com
生产环境,host值:postman-echo.com
按照常规思路,一种方式是需要维护2套环境的API,另一种方式是每次都需要手动逐个去修改URL。不管哪种选择都比较麻烦且低效,Postman提供了一套比较好的方法通过配置Environment来解决这个问题
创建、管理环境变量
1、在Postman界面右上角,点击"齿轮"图标,即可开始设置环境变量和全局变量。此时需要对环境变量设置2种环境:test环境、release环境(test——开发测试环境,release——正式的生产环境)
2、在这个窗口中除了创建和共享环境变量之外,还可以复制、导出和删除环境变量,也可以导入环境变量的JSON文件
注:
VARIAVLE: 变量名
INITIAL VALUE: 共享初始值, 用于团队共享时供别人使用的默认值
CURRENT VALUE: 当前值, 自己当前使用的变量值(一般我们只用设置这个值即可)
Perisit All: 保持所有, 将当前自己使用的值(CURRENT VALUE)替换所有的初始值
Reset All: 重置所有, 将当前所有的CURRENT VALUE重置为与当前初始值一样
选择、查看当前环境变量
在Postman窗口右上角的下拉菜单,选择一个环境变量作为当前的环境变量,或输入环境变量名,会自动匹配相应的环境变量。一旦选择了一个环境变量,就可以在当前环境变量范围内访问变量
注:
在查看环境变量页面中,点击[Edit]或当前值后面的"笔"可修改环境变量的值等
使用环境变量
1、在定义好环境变量且选择好环境变量后,我们就可以调用所选择的环境变量下的变量了,调用格式为:{{变量名}}
2、在下面例子中切换到生成环境,然后设置请求URL:{{host}}/get。即所请求的url为:http://postman-echo.com/get
注:在调用变量时,可以根据变量的颜色来判断变量调用是否正确:正确调用时变量名为橙色,且选中悔显示变量详情
注:
从上面的例子可以看出:不同的测试环境下,请求时不同的
例:
注:
1、一般来说,用户会将密码等重要信息保存到变量中,这时候当和其他人分享接口时(只分享接口文件,不分享变量文件),就不用担心重要信息泄露了,而其他人也可以重建这些变量
2、感觉环境变量也只是针对单个请求的呀,不能同时作用于多个请求,不知道是不是我理解错了,还希望有大佬解答下。还是说环境变量的使用方法本来就是针对一个请求的:同一个请求(变量名一致、值不一致),通过去选择不同的环境变量来实现快速在不同环境下请求(不同环境变量中变量名需要保证一致,这样就可以在切换环境变量时就不需要修改变量名了)
全局变量
1、全局变量提供了在所有范围内始终可用的一组变量
2、用户可以有多个环境变量,但是一次只能激活一个环境变量(选择一个环境变量为当前环境变量)。全局变量只有一组,并且它们总是可用的
3、postman 的环境变量可以分组,但是全局变量不能分组,只能有一组全局变量,在设置和使用都类似于环境变量
4、全局变量:是指在所有的环境里变量值都是一样的,全局变量的作用域是所有请求
5、全局变量设置有两种方式:
⑴界面设置
⑵脚本设置
界面管理全局变量
单击Postman窗口右上方的"齿轮"图标,进入环境变量设置界面,然后点击界面下方的[Globals]按钮,就会进入全局变量界面,在该界面可以添加、编辑和删除全局变量。在这里也可以导入全局变量的JSON文件
查看全局变量
点击Postman主界面右上方的"眼睛"图标会显示环境变量(已选择了环境变量)和全局变量。在查看环境变量页面中,点击[Edit]或当前值后面的"笔"可修改全局变量的值等
使用全局变量
脚本设置全局变量
使用脚本可以设置全局变量,如:
pm.globals.set("variable_key","variable_value")
其中variable_key表示变量名,variable_value表示变量值
接口关联
在实际接口测试过程中,接口经常会有关联。比如需要获取上一个接口的某个返回值,然后作为参数传递到下一个接口作为参数
案例:获取接口A返回的aaa_id值,作为接口B发送请求的参数
API_A
接口A-请求URL:https://postman-echo.com/post
请求方式:POST
请求参数:自定义aaa_id
(接口A会返回对应的aaa_id值)
API_B
请求B需要使用接口A返回的aaa_id值进行请求URL
请求URL:https://postman-echo.com/get?bbb_id={{global_id}}
请求方式:GET
例子:
步骤1:
发送带参数的post请求:需要的值会在response中返回
注:
根据以上返回值,需要从中提取aaa_id值,并赋值给全局变量global_id存储,然后传递到接口B中作为参数发送请求
步骤2:
在【Test】标签(专门对返回响应数据进行处理的栏目)栏目编写脚本
步骤3:
构造接口B请求URL:https://postman-echo.com/get?bbb_id={{global_id}}
步骤4:
依次发送请求:【API_A】--->【API_B】
结果:
1、接口B的返回
2、查看Postman Console监控结果
3、查看Postman界面Global变量区域
本地变量(Local Variable)
1、本地变量:主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内
2、代码创建本地变量在Pre-request Script区域添加代码:pm.variables.set("变量名","变量值");
3、引用本地变量的格式为:{{变量名}}
例子:get方法使用本地变量
例子:Post方法使用本地变量
获取变量值
数据变量(Data Variable)
数据变量:通过导入外部数据文件(json/csv/TXT文件),来获取变量的数据
例子:
步骤1:构建请求(确定好哪部分需要使用变量)
步骤2:在Pre-request Script区域添加代码
步骤3:准备数据文件
注:
1、文件第一行一定要写上参数的名称
2、如果文本中有中文,会显示乱码,此时,应该把文件另存为UTF-8格式的文件
步骤4:打开collection Runner
步骤5:设置集合运行器
注:上传本地数据文件后,还需要在"Data File Type"栏中选择数据文件类型。全部设置好后,点击[Run]运行集合
步骤6:查看运行结果
Collection变量
对该集合及子文件夹下所有请求生效
例子:
步骤1:进入集合设置页面
步骤2:设置集合变量
步骤3:发送请求
拓展
访问变量通过脚本(scripts)
变量可以被使用在pre-request和test script中。因为这些部分是通过JavaScript来写的。你可以以不同的方式初始化和检索这些变量。可以在脚本中初始化变量,并将它们放在特定的范围内
1、定义一个变量在脚本中
在脚本中设置一个变量可以根据变量预定的范围通过pm.environment.set("variable_key", "variable_value");方法或者pm.globals.set("variable_key", "variable_value");方法,这方法要求提供变量的key和value去设置变量。当你发送请求的时候,这脚本将会执行,值将会保存在变量中
2、取一个预定义的变量
一旦一个变量被设置,你可以使用pm.environment.get("variable_key");或者pm.globals.get("variable_key"); 根据适合的范围去获取变量值。这方法要求提供一个变量名作为参数去检索储存的值
3、设置一个变量在作用域中
可以访问环境变量在相应的环境模板。全局变量可以广泛的访问,不管选择的作用域
4、打印变量 --- Logging variables
经常在脚本中使用变量时,你可能需要看到变量获取到的值,你可以使用Postman Console去实现的。应用菜单,选择View然后在选择Show Postman Console,去打印变量的值。你可以在脚本中使用console.log("domain)";`当你发送请求时,这脚本将会执行,参数对应的值也会打印在Postman Console