我确实有一组使用python的unittest模块编写的单元测试 . 他们使用setUpModule()函数加载一个全局变量,其中包含运行测试所需的共享“stuff”(包括一些http sesions) .
使用 unittest
运行我的测试时,它们运行正常 py.test
它们失败了 .
我修补了一下它使用旧的pytest fixture函数运行(它没有与unittest函数相同的名字) . 工作但只有当没有在多个线程上执行时,这是我想要使用的功能 .
在我的案例中,文档示例是无用的,因为我确实有20个类(unittest.TestCase),每个类中有10个测试 . 显然,我不想为每个测试添加新参数 .
到目前为止,我使用类setUp()方法在self中加载共享dictionare,并在每个测试中使用它 .
#!/usr/bin/env python
# conftest.py
@pytest.fixture(scope="session")
def manager():
return { "a": "b"}
现在测试:
#!/usr/bin/env python
# tests.py
class VersionTests(unittest.TestCase):
def setUp(self):
self.manager = manager
def test_create_version(self):
# do something with self.manager
pass
请记住,我需要一个适用于多个线程的解决方案,一次调用夹具 .
1 回答
pytest
可以运行unittest
测试,如Support for unittest.TestCase / Integration of fixtures中所述 . 棘手的部分是不鼓励直接使用pytest funcargs fixtures:假设我们有一个这样的测试模块,使用标准的
unittest
初始化工具:使用
unittest
运行时,它会产生以下输出:test_a_in_manager
按预期失败,manager
目录中没有'a'
键 .我们设置了一个conftest.py来为这些测试提供范围的
pytest
灯具 . 例如,在不破坏标准unittest
行为的情况下,无需使用pytest autouse完全触摸它们的测试:使用
pytest
(使用pytest-xdist
)进行测试以进行并行化,产生以下输出:现在
test_1_in_manager
失败了,pytest
提供的经理字典中没有1
键 .