前言
在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现。variables 可以在 config 和 test 中使用。
本人环境:HttpRunner V1.5.8
测试场景
我们将继续以之前的登录接口来学习,之前的用例是这样的:
- config:
name: extract test
request:
base_url: http://api.nnzhp.cn
- test:
name: login case
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test1010
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
在上面的用例中,我们的 username和 passwd 是在 data 中写死的,但在实际测试中,我们的数据可能会经常变化,因此,我们最好把一个变量传入到 username和 passwd 中,这样可以便于对用例进行维护。
config中使用variables
在 config 中声明变量,相当于定义的全局变量,作用域为整个用例,可以在各个 test 中使用。
- config:
name: variables test
request:
base_url: http://api.nnzhp.cn
variables:
username: test1010
passwd: aA123456
我们先在 config 中声明了变量 username 和 passwd,变量名可随意定义,然后在 test 中进行引用。
注意:引用的时候, $ 后的变量名,必须与声明的变量名一致。
data:
username: $username
passwd: $passwd
在 config 中定义的变量,可以在当前整个YAML脚本中生效,比如可以在多个 test 使用:
- test:
省略部分内容
data:
username: $username
passwd: $passwd
- test:
省略部分内容
data:
username: $username
passwd: $passwd
test中使用variables
在 test 中声明变量,相当于定义的局部变量,作用域为当前测试步骤,即只作用于一个 test 。test 中声明和引用变量的方法,和在 config 中是一样的,如下:
- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd
很明显,在 config 和 test 中使用 variables 是有区别的,如果只在 test 中定义变量,那么存在多个 test 时,我们需要这样写:
- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd
- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd
config和test中同时使用variables
有时候,我们可能想同时定义全局变量和局部变量,那么可以同时在 config 和 test 中使用 variables 。如果 config 和 test 中定义了相同的变量名,那么在 test 执行时会优先使用当前 test 测试步骤中定义的局部变量。
完整的YAML格式用例如下:
- config:
name: variables test
request:
base_url: http://api.nnzhp.cn
variables:
username: test101011111
passwd: aA123456
- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: $username
passwd: $passwd
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
上面这个用例中,config 中的用户名密码是错误的,test 中的用户名密码是正确的。该用例在执行时,使用的时 test 中定义的局部变量,因此它是能够登录成功。