est 的实用个性,接下来讲 Pytest 参数化用例的构建。如果待测试的输出与输入是一组数据,能够把测试数据组织起来用不同的测试数据调用雷同的测试方法。参数化顾名思义就是把不同的参数,写到一个汇合里,而后程序会主动取值运行用例,直到汇合为空便完结。pytest 中能够应用 @pytest.mark.parametrize 来参数化。parametrize() 办法源码:
主要参数阐明
argsnames:参数名,是个字符串,如两头用逗号分隔则示意为多个参数名
argsvalues:参数值,参数组成的列表,列表中有几个元素,就会生成几条用例
应用办法
应用 @pytest.mark.paramtrize() 装璜测试方法
parametrize(‘data’, param) 中的“data”是自定义的参数名,param 是引入的参数列表
将自定义的参数名 data 作为参数传给测试用例 test_func
而后就能够在测试用例外部应用 data 的参数了创立测试用例,传入三组参数,每组两个元素,判断每组参数外面表达式和值是否相等,代码如下:运行后果:整个执行过程中,pytest 将参数列表 [(“3+5”,8),(“2+5”,7),(“75”,30)] 中的三组数据取出来,每组数据生成一条测试用例,并且将每组数据中的两个元素别离赋值到办法中,作为测试方法的参数由测试用例应用。同一个测试用例还能够同时增加多个 @pytest.mark.parametrize 装璜器, 多个 parametrize 的所有元素相互组合(相似笛卡儿乘积),生成大量测试用例。场景:比方登录场景,用户名输出状况有 n 种,明码的输出状况有 m 种,心愿验证用户名和明码,就会波及到 nm 种组合的测试用例,如果把这些数据一一的列出来,工作量也是十分大的。pytest 提供了一种参数化的形式,将多组测试数据主动组合,生成大量的测试用例。示例代码如下:运行后果:剖析如上运行后果,测试方法 test_foo() 增加了两个 @pytest.mark.parametrize() 装璜器,两个装璜器别离提供两个参数值的列表,2 * 3 = 6 种联合,pytest 便会生成 6 条测试用例。在测试中通常应用这种办法是所有变量、所有取值的齐全组合,能够实现全面的测试。上面讲联合 @pytest.fixture 与 @pytest.mark.parametrize 实现参数化。如果测试数据须要在 fixture 办法中应用,同时也须要在测试用例中应用,能够在应用 parametrize 的时候增加一个参数 indirect=True,pytest 能够实现将参数传入到 fixture 办法中,也能够在以后的测试用例中应用。parametrize 源码:indirect 参数设置为 True,pytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里。创立“test_param.py”文件,代码如下:运行后果:下面的后果能够看出,当 indirect=True 时,会将 login_r 作为参数,test_user_data 被当作参数传入到 login_r 办法中,生成多条测试用例。通过 return 将后果返回,当调用 login_r 能够获取到 login_r 这个办法的返回数据。