参数化数据驱动
在自动化测试中,经常会遇到如下场景:
测试搜索功能,只有一个搜索输入框,但有 10 种不同类型的搜索关键字;
测试账号登录功能,需要输入用户名和密码,按照等价类划分后有 20 种组合情况。
这里只是随意找了两个典型的例子,相信大家都有遇到过很多类似的场景。总结下来,就是在我们的自动化测试脚本中存在参数,并且我们需要采用不同的参数去运行。
经过概括,参数基本上分为两种类型:
单个独立参数:例如前面的第一种场景,我们只需要变换搜索关键字这一个参数
多个具有关联性的参数:例如前面的第二种场景,我们需要变换用户名和密码两个参数,并且这两个参数需要关联组合
然后,对于参数而言,我们可能具有一个参数列表,在脚本运行时需要按照不同的规则去取值,例如顺序取值、随机取值、循环取值等等。
这就是典型的参数化和数据驱动。
从 2.0.0 版本开始,HttpRunner 不再支持在测试用例文件中进行参数化配置;参数化的功能需要在 testsuite 中实现。如需实现数据驱动机制,需要创建一个 testsuite,在 testsuite 中引用测试用例,并定义参数化配置。
参数配置
如需对某测试用例(testcase)实现参数化数据驱动,需要使用 parameters
关键字,定义参数名称并指定数据源取值方式。
参数名称的定义分为两种情况:
- 独立参数单独进行定义;
- 多个参数具有关联性的参数需要将其定义在一起,采用短横线(
-
)进行连接。
数据源指定支持三种方式:
- 在 YAML/JSON 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
- 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
- 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式
三种方式可根据实际项目需求进行灵活选择,同时支持多种方式的组合使用。假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。
定义独立参数
-
login_api.yml,需要传入两个参数,这里以参数化phone为例:
-
login_case.yml引用login_api.yml
-
login_testsuite.yml 定义参数化phone并指定传入的参数值
定义多个参数
-
login_testsuite.yml 定义参数化phone、securitycode并指定传入的参数值