httprunner 2.x学习7-参数化(引用外部csv数据)
前言
httprunner 参数化数据源指定支持三种方式:
- 在 YAML/JSON 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
- 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
- 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式
环境:httprunner==2.5.7
本篇讲解内置的 parameterize(可简写为P)函数引用 CSV 文件
独立参数
对于已有参数列表,并且数据量比较大的情况,比较适合的方式是将参数列表值存储在 CSV 数据文件中。
对于 CSV 数据文件,需要遵循如下几项约定的规则:
- CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
- 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;
- 在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。
例如,user_id 的参数取值范围为 1001~2000,那么我们就可以创建 user_id.csv,并且在文件中按照如下形式进行描述。
user_id
1001
1002
...
1999
2000
然后在 YAML/JSON 测试用例文件中,就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件。
config:
name: "demo"
testcases:
testcase1_name:
testcase: /path/to/testcase1
parameters:
user_id: ${P(data/user_id.csv)}
即 P 函数的参数(CSV 文件路径)是相对于项目根目录的相对路径。
当然,这里也可以使用 CSV 文件在系统中的绝对路径,不过这样的话在项目路径变动时就会出现问题,因此推荐使用相对路径的形式。
csv文件存放user数据
先准备测试数据,准备四组登录用的账号和密码,账号为test1,test2,test3,test4,密码统一设置为123456。
data/user_name.csv文件测试数据
user
test1
test2
test3
test4
testsuites/test_param_csv.yml 文件引用 data/user_name.csv 文件语法${P(user_name.csv)}
# testsuites/test_param_csv.yml
# 上海-悠悠,httprunner QQ交流群:717225969
config:
name: "test login parameters"
testcases:
login-参数化:
testcase: case/test_login.yml
parameters:
user: ${P(data/user_name.csv)}
csv存放user和psw数据
data/user_password.csv 文件测试数据
user,password
test1,123456
test2,123456
test3,123456
test4,123456
testsuites/test_param_csv.yml文件引用 data/user_password.csv 文件
# testsuites/test_param_csv.yml
# 上海-悠悠,httprunner QQ交流群:717225969
config:
name: "test login parameters"
testcases:
login-参数化:
testcase: case/test_login.yml
parameters:
user-password: ${P(data/user_password.csv)}
运行结果
cmd执行hrun testsuites/test_param_csv.yml
(venv_hrun) D:\soft\venu_hrun>hrun testsuites/test_param_csv.yml
INFO HttpRunner version: 2.5.7
INFO Start to run testcase: login-参参数数化化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 338.0 ms, response_length: 110 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.354s
OK
INFO Start to run testcase: login-参参数数化化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 331.52 ms, response_length: 110 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.332s
OK
INFO Start to run testcase: login-参参数数化化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 316.43 ms, response_length: 110 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.316s
OK
INFO Start to run testcase: login-参参数数化化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 300.28 ms, response_length: 110 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.300s
OK
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\venu_hrun\reports\20200613T022146.605872.html
V1.x版本测试数据csv文件只能与测试用例文件放在同一目录,V2.x版本支持相对路径,以文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。如:data/user_id.csv