前言
- 本篇来学习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"] # 使用相同变量名user, parameters优先级> variables优先级 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)} # 通过内置的 parameterize(可简写为 P)函数引用 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()} # ${函数名} 方式引用debugtalk.py中的函数 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)} # 生成10组数据 testcase: /path/to/testcase1
参数化运行
- 完成以上参数定义和数据源准备工作之后,参数化运行与普通测试用例的运行完全一致。 采用hrun命令运行自动化测试:
hrun tests/data/demo_parameters.yml