Pytest-fixture

221 阅读3分钟

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

  1. import pytest
    1. @pytest.fixture(scope="function") # 默认

  2. @pytest.fixture()
  3. def init_demo():
  4. print ("这是测试用例的前置")
  5. a = 1
  6. yield a # 分割线(yield + 返回值) ,这样一来就可以把这个init_demo的return值确定了
  7. print ("这是测试用例的后置") #yield下一行的是后置处理

全局测试用例自动使用fixture:

用 autouse 调用 fixture

在定义 fixture 时,有一个参数 autouse,默认设置的为 False

当默认为 False,就可以选择用上面两种方式来使用 fixture

当设置为 Ture 时,在一个session内的所有的 test 都会自动调用这个fixture,建议该开关谨慎使用

  1. import pytest
    1. @pytest.fixture(autouse=Ture)
  2. def init_demo():
  3. print("这是测试用例的前置")
  4. yield
  5. print("这是测试用例的后置")
  6. import pytest
      1. def test_add_02():
  7. b = 1 + 2
  8. 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"