1. 如果你想查询在你的环境下有哪些pytest的active plugin可以使用:
py.test --traceconfig会得到一个扩展的头文件名显示激活的插件和他们的名字。同时也会打印出当前的plugin,也就是被加载时conftest.py文件。
2. pytest.ini文件有什么作用
3. pytest的fixture究竟是怎么工作的,在pytest中它有怎样的作用。
Dealing with fixtures is one of the areas where pytest really shines.
It's to think of fixtures as a set of resources that need to be set up before a test starts, and cleaned up after.
有四种作用域的fixture,分别为function,class,module和session作用域。简单理解function scope,就是每一个函数都会调用;class scope,就是每一个类调用一次,一个类可以有多个函数;module scope,应该是一个文件调用一次,该文件内又有多个function;session scope范围更大,是多个文件调用一次,每个文件有对应着一个module。
function | Run once per test |
class | Run once per class of tests |
module | Run once per module |
session | Run once per session |
fixture又有autouse的和非autouse的。什么是autouse的呢?就是在定义fixture时autouse为True的,如下:
@pytest.fixture(scope="session", autouse=True)
在调用时pytest的test函数不需要在参数中指定它也会被调用,如下所示
def test_alpha_1(): print('\nIn test_alpha_1()')非autouse的fixture时没有指定autouse为True的。它在调用时需要显示地写出fixture的名字在pytest函数的参数中,如下:
@pytest.fixture(scope="session") def some_resource(request): print('\nIn some_resource()') def some_resource_fin(): print('\nIn some_resource_fin()') request.addfinalizer(some_resource_fin)在调用时需要这么调用
def test_alpha_2(some_resource): print('\nIn test_alpha_2()')这两者在调用顺序上,在setup阶段,是先调用autouse的,然后再调用非autouse的。在tear down阶段则是反过来,先调用非autouse的,然后再调用autouse的。他们的调用顺序应该是类似于栈的进出栈顺序,先进栈的后出栈,后进栈的先出栈。
查看pytest自带的内在的fixture的方法。
py.test -q --fixture
pytest中有三种方法去使用一个fixture
4. pytest fixture的一些优势
5.pytest fixture的一些特性
6. conftest.py的作用
conftest.py文件是一个单独的存放fixtures的文件。
对于function,class和module来说,把fixture代码放到和test代码同样的文件中完全合理的。但是,对于session,就不再make senese了。
这样的话我们就可以把他们放在conftest.py文件中。这是一个pytest会寻找的一个有特定名字的文件。
7. ini文件查找顺序
pytest默认的ini文件查找顺序为:pytest.ini, tox.ini, setup.cfg
例如当我们执行:py.test path/to/testdir时,查找的顺序如下:
path/to/testdir/pytest.ini path/to/testdir/tox.ini path/to/testdir/setup.cfg
本文参考了这篇文章