pytest
可以肯定地运行unittest
测试,如Support for unittest.TestCase / Integration of fixtures 中所述。棘手的部分是不鼓励直接使用pytest
funcargs 固定装置:
虽然 pytest 支持通过非 unittest 测试方法的测试函数参数接收夹具,但 unittest.TestCase 方法不能直接接收夹具函数参数作为实现,这可能会影响运行通用 unittest.TestCase 测试套件的能力。
假设我们有一个像这样的测试模块,使用标准的unittest
初始化工具:
# test_unittest_tests.py (for the sake of clarity!)
import unittest
manager = None
def setUpModule():
global manager
manager = {1: 2}
class UnittestTests(unittest.TestCase):
def setUp(self):
self.manager = manager
def test_1_in_manager(self):
assert 1 in self.manager
def test_a_in_manager(self):
assert 'a' in self.manager
运行时会产生以下输出unittest
:
$ python -m unittest -v test_unittest_tests
...
test_1_in_manager (test_unittest_tests.UnittestTests) ... ok
test_a_in_manager (test_unittest_tests.UnittestTests) ... FAIL
...
正如预期的test_a_in_manager
那样失败。目录中没有任何'a'
键manager
。
我们设置了一个 conftest.py 来pytest
为这些测试提供作用域的固定装置。例如,像这样,在不破坏标准unittest
行为并且完全不需要使用pytest
autouse进行测试的情况下:
# conftest.py
import pytest
@pytest.fixture(scope='session', autouse=True)
def manager_session(request):
# create a session-scoped manager
request.session.manager = {'a': 'b'}
@pytest.fixture(scope='module', autouse=True)
def manager_module(request):
# set the sessions-scoped manager to the tests module at hand
request.module.manager = request.session.manager
pytest
使用(using )运行测试pytest-xdist
进行并行化,会产生以下输出:
$ py.test -v -n2
...
[gw1] PASSED test_unittest_tests.py:17: UnittestTests.test_a_in_manager
[gw0] FAILED test_unittest_tests.py:14: UnittestTests.test_1_in_manager
...
现在test_1_in_manager
失败了;-provided manager 字典中没有任何1
键。pytest