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"