整理几点pytest常用知识点:

1、断言
pytest的亮点之一就是:重写assert关键字,assert关键字后可以接任何表达式,表达式通过布尔转换后为False则意味着测试失败

2、预期异常
异常的发生在预期中,实际发生了指定异常则意味着测试通过,使用 with pytest.raises()来声明

3、函数标记marker
一个函数可以有多个marker,一个marker也可以标记多个函数,使用@pytest.mark.somthing来进行标记,其作用是筛选

4、yield
yield之后的代码会在测试后运行,用于清场,yield还可以返回结果,如

yield driver //返回driver对象
driver.quit()

5、跳过测试
(1)pytest.mark.skip(),可以添加reason对跳过原因进行注明
(2)pytest.mark.skipif(vsersion>1.2,reason="version too latest") ,给跳过的测试添加理由和条件,其判定条件可以是任何表达式

6、标记预期会失败的用例
pytest.mark.xfail(条件,理由) 可以添加条件和理由,但不是必须的

7、参数化br/>(1)@pytest.mark.parametrize(argnames,argvaluses)来传递数据,可以用在函数以及类中,如果用在类中,则被所有类方法所用
(2)@pytest.mark.parametrize('x,y',[pytest.param(2,2,id='test 1+2')])
def test_add(x,y):
z = x+y
assert z > 3
添加一个id,其实就是更加能看出来该组数据是个啥,起到一个提示作用,格式是pytest.param(,id="something")

8、fixture 手脚架
(1)conftest.py文件:共享fixture:作用域为其所在目录以及子目录,conftest.py是模块,但是不能被导入,不允许import conftest,它被视为一个本地插件库
(2)--setup-show可以看到测试过程中fixture的执行过程
(3)使用fixture传递数据
(4)fixture的作用范围:scope= 默认为function,fixture只能使用与自己同级或者高级的fixturebr/>(5)@pytest.mark.usefixtures('fix1','fix2'),除了使用fixture名来引用,还可以使用mark方式来指定
(6)autouse 在fixture可指定该值,用于是否自动引用
(7)fixture重命名,即指定name属性

9、fixture参数化
使用params参数指定,使用request.param来引用,每个使用参数化fixture的测试函数都可以被运行多次
(1)假设被测函数同时使用两个参数化的fixture作为参数的话,其执行次数将会是两个fixture的参数个数的乘机,是一个组合的结果
(2)当使用fixture作为参数时,且fixture具有返回值,此时无法使用yield语句,否则报错