Selenium实战(八)——pytest单元测试(3)
一、pytest的参数化
在一组测试用例有固定的的测试数据,可以通过参数化的方式简化测试用例的编写。pytest本身支持参数化,不需要额外安装插件。创建test_parameterize.py文件:
1 import pytest 2 import math 3 # pytest参数化 4 5 @pytest.mark.parametrize( 6 "base, exponent, expected", 7 [(2, 2, 4), 8 (2, 3, 8), 9 (1, 9, 1), 10 (0, 9, 0)], 11 ids=["case1", "case2", "case3", "case4"] 12 ) 13 def test_pow(base, exponent, expected): 14 assert math.pow(base, exponent) == expected
用法与unittest的参数化插件类似,通过pytest.mark.parameterize()方法设置参数。
"base,exponent,expected"用来定义参数的名称。通过数组定义参数时,每一个元组都是一条测试用例的测试数据。ids默认为None,用于定义测试用例的名称。
“-v”参数增加测试用例冗长。
二、运行测试
参数用法:
- -s 关闭捕捉,从而输出打印信息
- -v 增加测试用例冗长
可以通过'pytest --help'查看帮助
1.运行名称中包含某字符串的测试用例 -k
在test_assert.py文件中共有11个测试用例,其中有四条是关于add()功能的,并且在测试用例的名称上包含了“add”字符串,So可以通过“-k”来指定在名称中包含“add”的测试用例。
2.减少测试运行的冗长 -q
也可以使用“--quiet”代替。
3.如果出现一条测试用例失败,则退出测试 -x
这在测试用例的调试阶段是有用的,当出现一条失败的测试用例时,应该先通过调试让这条测试用例运行通过,而不是继续执行后面的测试用例。
4.运行测试目录
测试目录既可以指定相对路径,也可以是绝对路径。
5.指定特定类或方法执行
这里指定运行test_fixture_02.py文件中TestMultiply类下的test_numbers_5_6()方法,文件名、类名和方法名之间用::符号分隔。
6.通过main()方法运行测试
创建run_tests.py文件,在文件中通过数组指定参数,每个参数为数组中的一个元素。
1 import pytest 2 3 if __name__ == '__main__': 4 pytest.main(['-s', '.'])