测试平台开发 - HR 参数化与前置

一、 httprunner 用例变量

1. 配置变量(config variables)

  • 用于数据解耦 —- 字典类型
  • 定义在 config 或者 teststep
  • 变量在引用时,不使用函数引用,可以不加大括号 {}

用例级别(config 中 配置)

方式1直接 指定 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
variables: # 用例变量 --- 字典类型
user: auto # 方式 1:直接指定参数的方式
pw: sdfsdfsdf

export: # 返回测试步骤中提取的变量 --- 列表类型
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: ${user}
password: ${pw}
extract: # 将 sessionid 赋值给 cookie --- 字典类型
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq: ['body.retcode', 0]

方式 2:在项目根目录中创建一个名为 debugtalk.py 的文件

debugtalk.py 文件

1
2
def login_variables():
return {'user': 'auto', 'pw': 'sdfsdfsdf'}

login.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
variables: # 用例变量 --- 字典类型
${login_variables()} # 方式 2:在项目根目录中创建一个名为 debugtalk.py 的文件

export: # 返回测试步骤中提取的变量 --- 列表类型
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: ${user}
password: ${pw}
extract: # 将 sessionid 赋值给 cookie --- 字典类型
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq: ['body.retcode', 0]

步骤级别(teststeps 中 配置)

  • 不支持 使用 函数返回值的方式 配置变量
  • 当 用例级别 函数名 和 步骤级别 函数名相同时, 步骤级别的 优先级大于 用例级别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
variables: # 用例变量 --- 字典类型
user: auto # 方式 1:直接指定参数的方式
pw: sdfsdfsdf
export: # 返回测试步骤中提取的变量 --- 列表类型
- cookie

teststeps:
- name: 登录
variables:
# 当 用例级别 函数名 和 步骤级别 函数名相同时, 步骤级别的 优先级大于 用例级别
user: auto
pw: sdfsdfsdf
request:
method: POST
url: /api/mgr/loginReq
data:
username: ${user}
password: ${pw}
extract: # 将 sessionid 赋值给 cookie --- 字典类型
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq: ['body.retcode', 0]

2. 环境变量(env variables)

  • 在 项目 根目录 创建一个名为 .env.txt 文件
  • .env 文件中的内容不能有空行

.env.txt 文件

1
2
username=auto
password=sdfsdfsdf

login.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
variables: # 用例变量 --- 字典类型
user: ${ENV(username)}
pw: ${ENV(password)}

export: # 返回测试步骤中提取的变量 --- 列表类型
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: ${user}
password: ${pw}
extract: # 将 sessionid 赋值给 cookie --- 字典类型
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq: ['body.retcode', 0]

二. 参数化(parameter variables)

  • 用于参数化 —- 列表类型
  • 定义在 config

1. 独立参数

运行用例数 = 独立参数的 笛卡尔积

可以运行 八次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
parameters:
user:
- auto
- auto1
pw:
- sdfsdfsdf
- sdfsdf
code:
- 0
- 1
export:
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: $user
password: $pw
extract:
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200] # 写法 1
- eq: # 写法 2
- body.retcode
- $code

image-20210607162937694

2. 关联参数

运行用例数 = 关联参数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
parameters:
user-pw-code:
- ['auto', 'sdfsdfsdf', 0] # 写法 1
- ['auto1', 'sdfsdf', 1]
- # 写法 2
- aout2
- sdfsdf
- 1
export:
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: $user
password: $pw
extract:
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq:
- body.retcode
- $code

3. 关联参数 和 独立参数 混合使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
parameters:
user-pw:
- ['auto', 'sdfsdfsdf'] # 写法 1
- ['auto1', 'sdfsdf']
- # 写法 2
- aout2
- sdfsdf
code:
- 1
- 0
export:
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: $user
password: $pw
extract:
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq:
- body.retcode
- $code

4. 使用 函数 调用参数

debugtalk.py 文件

1
2
3
4
5
6
def login_parameters():
return [
{'user': 'auto', 'pw': 'sdfsdfsdf', 'code': 0},
{'user': 'auto1', 'pw': 'sdfsdfsdf', 'code': 1},
{'user': 'auto', 'pw': 'sdfsdfsdf1', 'code': 1},
]

login_parameters.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
config:
name: 登录
base_url: http://120.55.190.222:7080
verify: false
parameters:
user-pw-code: ${login_parameters()}
export:
- cookie

teststeps:
- name: 登录
request:
method: POST
url: /api/mgr/loginReq
data:
username: $user
password: $pw
extract:
cookie: cookies.sessionid
validate:
- eq: ['status_code', 200]
- eq:
- body.retcode
- $code

三、 httprunner 前置与后置