整理几点pytest常用知识点:

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

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

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、参数化 (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(<value>,id="something")

8、fixture 手脚架 (1)conftest.py文件:共享fixture:作用域为其所在目录以及子目录,conftest.py是模块,但是不能被导入,不允许import conftest,它被视为一个本地插件库 (2)--setup-show可以看到测试过程中fixture的执行过程 (3)使用fixture传递数据 (4)fixture的作用范围:scope=<function,class,module,session> 默认为function,fixture只能使用与自己同级或者高级的fixture (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语句,否则报错