前言
- 本篇来学习Httprunner中参数化–parameters关键字的使用
参数化
- 在 YAML/JSON/py 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
- 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
- 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式
直接指定参数列表
独立参数
示例
config:
name: login case
base_url: "https://postman-echo.com"
variables:
user: test
password: 123456
parameters:
user: ["test1", "test2", "test3", "test4"]
teststeps:
-
name: step login
variables:
password: 123456
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $password
validate:
- eq: [status_code, 200]
关联参数
- 对于具有关联性的多个参数,比如username和password,那么可以按照如下方式进行配置
config:
name: test suite demo
base_url: "https://postman-echo.com"
testcases:
-
name: test case 1
parameters:
username-password:
- [ "user1", "111111" ]
- [ "user2", "222222" ]
- [ "user3", "333333" ]
testcase: /path/to/testcase1
- 进行该配置后,测试用例在运行时就会对username和password实现数据驱动,即分别使用 {“username”: “user1”, “password”: “111111”}、{“username”: “user2”, “password”: “222222”}、{“username”: “user3”, “password”: “333333”} 运行 3 次测试,并且保证参数值总是成对使用。
笛卡尔积组合
- 测试账号有四种[“test1”, “test2”, “test3”, “test4”],密码也有四种[“123456”, “1234567”, “12345678”, “123456789”],用笛卡尔积组合的话,就是4*4=16种组合
config:
name: login case
base_url: "https://postman-echo.com"
variables:
user: test
password: 123456
parameters:
user: ["test1", "test2", "test3", "test4"]
passwprd : ["123456", "1234567", "12345678", "123456789"]
teststeps:
-
name: step login
variables:
password: 123456
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $password
validate:
- eq: [status_code, 200]
CSV文件实现参数化
独立参数
- 假设项目的根目录下有 data 文件夹,user.csv 位于其中,那么 user.csv 的引用描述如下
user.csv
user
test1
test2
test3
test4
yaml
config:
name: test suite demo
base_url: "https://postman-echo.com"
testcases:
-
name: test case 1
parameters:
user: ${P(data/user.csv)}
testcase: /path/to/testcase1
关联参数
- 对于具有关联性的多个参数,例如 username 和 password,那么就可以创建 account.csv
account.csv
username,password
test1,111111
test2,222222
test3,333333
yaml
config:
name: test suite demo
base_url: "https://postman-echo.com"
testcases:
-
name: test case 1
parameters:
username-password: ${P(data/account.csv)}
testcase: /path/to/testcase1
debugtalk函数实现参数化
独立参数
- 在 debugtalk.py 中定义一个函数,返回参数列表
** debugtalk.py**
def get_user_id():
return [
{"user_id": 1001},
{"user_id": 1002},
{"user_id": 1003},
{"user_id": 1004}
]
yaml
config:
name: test suite demo
base_url: "https://postman-echo.com"
testcases:
-
name: test case 1
parameters:
user_id: ${get_user_id()}
testcase: /path/to/testcase1
关联参数
** debugtalk.py**
def get_account(num):
accounts = []
for index in range(1, num+1):
accounts.append(
{"username": "user%s" % index, "password": str(index) * 6},
)
return accounts
yaml
config:
name: test suite demo
base_url: "https://postman-echo.com"
testcases:
-
name: test case 1
parameters:
username-password: ${get_account(10)}
testcase: /path/to/testcase1
参数化运行
- 完成以上参数定义和数据源准备工作之后,参数化运行与普通测试用例的运行完全一致。 采用hrun命令运行自动化测试:
hrun tests/data/demo_parameters.yml
|