简介
在 HttpRunner 中,
变量定义:
- 在variables
定义变量
- extract
中提取返回数据,作为变量。
变量引用:
- $变量名
- ${变量名}
定义变量区别在于:
- 在
config
中定义的变量为全局的,整个测试用例(testcase)
的所有地方均可以引用; - 在
test
中定义的变量作用域仅局限于当前测试步骤(teststep)
案例:
# 测试名称(必须的),String
name: 获取 城市 的天气
# 变量(可选的), List,被上级(testcases,testsuite)覆盖
variables:
# 设置变量,城市
city: 上
baseUrl: https://www.apiopen.top
path: /weatherApi
msg: "成功!"
# 默认域名(可选的).String
base_url: $baseUrl
# 请求参数(必须的), dict, 与request中的参数相同
request:
method: GET
url: $path
params:
# 通过 $+参数名称 的形式,应用变量
city: ${city}海
# 提取器(可选的), dict,提取返回参数
extract:
code: content.code
# 验证(可选的), list
validate:
- eq: [$code , 200]
- eq: [content.msg, $msg]
# 前置处理(可选的),list
setup_hooks:
# 后置处理(可选的),list
teardown_hooks:
局部变量
在登录案例中,账号和密码是写死的,一般写用例的时候,我们最好把这种可能会变的参数单独写个变量。做到测试数据和代码的分离,以便后续维护。
在test
中定义局部变量:
- test:
name: login case1
variables:
username: wwwj111
password: '123456'
引用username
和password
变量
$username $password
登录完整脚本如下:
- config:
name: 登录接口
variables: {}
- test:
name: /user/login/
variables:
username: wwj111
password: '123456'
request:
headers:
Content-Type: application/json
json:
password: $password
username: $username
method: POST
url: http://127.0.0.1:8009/user/login/
extract:
- token: content.token # 提取token
validate:
- eq:
- status_code
- 200
- eq:
- content.user_id
- 2
- eq:
- content.username
- wwj111
局部变量只在当前的test
用例生效,在其它的test用例不会生效
全局变量:
如果要设置一个全局变量,需把变量声明(variables
)放到config
下,这样就在整个.yml文件生效了
- config:
name: 登录接口
variables:
username: wwj111
password: '123456'
- test:
name: /user/login/
request:
headers:
Content-Type: application/json
json:
password: $password
username: $username
method: POST
url: http://127.0.0.1:8009/user/login/
extract:
- token: content.token # 提取token
validate:
- eq:
- status_code
- 200
- eq:
- content.user_id
- 2
- eq:
- content.username
- wwj111
环境变量
定义变量
默认情况下,在自动化测试项目的根目录中,有.env
文件,并将敏感数据信息放置到其中,存储采用 name=value
的格式
USERNAME=wwj111
PASSWORD=123456
引用环境变量:
variable_name为变量名称
${environ(variable_name)}
${ENV(variable_name)}
运行测试时,指定加载的环境变量文件--dot-env-path
+ 环境文件路径
hrun api/天气.yml --log-level DEBUG --dot-env-path dev.env