1、pytest-fixture
fixture功能:其实就是自定义前面的前置和后置操作
全局设置
conftest.py可以实现配置里面的数据共享,不需要手动的去导入这个配置里面的配置。
Scope=”module”可以实现多个py文件的前置和后置共享,但是一个py文件只会调用一次。
Scope=“session”以实现多个py跨文件使用一个session来完成多个用例
?
传入多个前置条件:在参数里面写入多个fixtrue前置即可
?
后置功能:
在@pytest.fixture函数里加上yield,yield下面的就是后置处理的内容
前置加后置结合功能:
fixture 函数根据关键字 yield 作为前置和后置的分割线,并且 yield 也可以接收返回值,返回元祖,作用相当于return
import pytest
- import?pytest??
- ??
- #?@pytest.fixture(scope="function")??#?默认??
- @pytest.fixture()??
- def?init_demo():??
- ????print("这是测试用例的前置")??
- ????a?=?1??
- ????yield?a??#?分割线(yield?+?返回值)?,这样一来就可以把这个init_demo的return值确定了?
- ????print("这是测试用例的后置")??#yield下一行的是后置处理
全局测试用例自动使用fixture:
用 autouse 调用 fixture
在定义 fixture 时,有一个参数 autouse,默认设置的为 False
当默认为 False,就可以选择用上面两种方式来使用 fixture
当设置为 Ture 时,在一个session内的所有的 test 都会自动调用这个fixture,建议该开关谨慎使用
- import pytest
- @pytest.fixture(autouse=Ture)
- def init_demo():
- ????print("这是测试用例的前置")
- ????yield
- ????print("这是测试用例的后置")
- import?pytest
- def?test_add_02():
- ????b = 1 + 2
- ????assert?3 == b
fixture的继承(前置的前置,后置的后置):
- 作用域(scope关键字):function/函数级(测试用例)、class/类级(测试类)、module/模块级(测试模块—py文件)、session/会话级(整个测试执行会话)
- 形象比喻:夹心饼干
- 继承条件:作用域由里向外继承作用域,也可以继承同级的作用域
- 执行顺序:前置由外层到内层执行,后置由内层到外层执行,先执行最里层的作用域,在执行它的上一层作用域,直到再向外找不到作用域为止
- 继承方法:直接将继承的?fixture 的函数名称作为入参传入即可
- 返回值:继承父类的同时,也继承了父类的返回值
- import?pytest??
- ?
- ?
- @pytest.fixture(scope='session')??
- def?init_session():??
- ????print("这是测试会话的前置")??
- ????yield??
- ????print("这是测试会话的后置")??
- ?
- ?
- @pytest.fixture(scope='module')??
- def?init_module(init_session):??
- ????print("这是测试模块的前置")??
- ????yield??
- ????print("这是测试模块的后置")??
- ?
- ?
- @pytest.fixture(scope='class')??
- def?init_class(init_module):??
- ????print("这是测试类的前置")??
- ????yield??
- ????print("这是测试类的后置")??
- ?
- ?
- @pytest.fixture??#?相当于@pytest.fixture(scope='function')??
- def?init_function(init_class):??
- ????print("这是测试用例的前置")??
- ????yield??
- ????print("这是测试用例的后置")?
fixture的层级作用域:
使用 fixture 的顺序-- 子目录当中,也可以拥有自己的 conftest
先用自己的,再去找同级目录下的 conftest.py 再去找上一级目录 下的 conftest.py
2、mark标记
2.1设置skip装饰器可以执行用例的时候自动跳过标记用例
2.2使用mark标记用例分类,如果不想执行该标记的用例
如果不想执行标记webtest的用例,那就用"not webtest“
$ pytest -v ?-m "not webtest"