前言
- 上一篇学习了变量的优先级,本篇来学习变量的具体使用
variables变量
- 在 HttpRunner 中,支持变量声明(variables)和引用(var)的机制。
在 config 和 step 中均可以通过 variables 关键字定义变量,然后在测试步骤中可以通过 $变量名称 的方式引用变量。
区别在于:
- 在 config 中定义的变量为全局的,整个测试用例(testcase)的所有地方均可以引用;
- 在 step 中定义的变量作用域仅局限于当前测试步骤(teststep)
step 局部变量
- yaml
config: name: "request methods testcase with functions" base_url: "https://postman-echo.com" verify: False export: ["foo3"] teststeps: - name: get with params variables: foo1: bar11 # 声明局部变量,仅在当前步骤可用 foo2: bar21 request: method: GET url: /get params: foo1: $foo1 # 引用变量 foo2: $foo2 headers: User-Agent: HttpRunner/${get_httprunner_version()} extract: foo3: "body.args.foo2" validate: - eq: ["status_code", 200] - eq: ["content.args.foo1", "bar11"] - eq: ["content.args.foo2", "bar21"]
- pytest
RunRequest("get with params") .with_variables( **{"foo1": "bar11", "foo2": "bar21"} )
config 全局变量
- yaml
config: name: "request methods testcase with functions" variables: foo1: config_bar1 foo2: config_bar2 base_url: "https://postman-echo.com" verify: False export: ["foo3"] teststeps: - name: get with params variables: foo1: bar11 # 定义全局变量,在所有步骤(整个yaml文件)都可用 foo2: bar21 request: method: GET url: /get params: foo1: $foo1 # 引用全局变量 foo2: $foo2 headers: User-Agent: HttpRunner/${get_httprunner_version()} extract: foo3: "body.args.foo2" validate: - eq: ["status_code", 200] - eq: ["content.args.foo1", "bar11"] - eq: ["content.args.foo2", "bar21"]
- pytes
config = ( Config("request methods testcase with functions") .variables( **{ "foo1": "config_bar1", "foo2": "config_bar2" } )
.env环境变量
- 在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括
- 切换环境
- 全局性公共配置(如:用户名、密码等)
使用
- 格式: name=value
- 引用环境变量使用ENV函数 ${ENV(name)
teststeps: - name: login request: url: http://host/api/login method: POST headers: Content-Type: application/json json: username: ${ENV(USERNAME)} # 引用环境变量 password: ${ENV(PASSWORD)} validate: - eq: [status_code, 200]
说明
- 环境变量文件名固定为 .env
- .env不允许有空行,可以注释掉不需要的变量
- .env 文件必须放到项目根目录(debugtalk.py同一层级)