我有一个类BaseTest,所有测试都是从它扩展而来的。 测试位于不同的模块和包中。 setUpClass和tearDownClass方法在每个unittest.TestCase类之前执行。 如何只执行一次setUp和tearDown。在所有测试之前和之后。
这是代码示例:
import unittest
class BaseTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
if __name__ == '__main__':
unittest.main()
module2.py:
class TestOne(BaseTest):
def test_one(self):
print("Test One")
class TestTwo(BaseTest):
def test_two(self):
print("Test Two")
if __name__ == '__main__':
unittest.main()
module3.py
class TestThree(BaseTest):
def test_three(self):
print("Test Three")
class TestFour(BaseTest):
def test_four(self):
print("Test Four")
if __name__ == '__main__':
unittest.main()
module4.py
class TestFive(BaseTest):
def test_five(self):
print("Test Five")
if __name__ == '__main__':
unittest.main()
答案 0 :(得分:1)
我认为unittest不具备通用设置和拆卸功能。你应该看看pytest,它的灯具更强大。
答案 1 :(得分:0)
可能与unittest
有关,请在此处复制https://stackoverflow.com/a/64892396/2679740的答案
您可以通过定义startTestRun
类的stopTestRun
,unittest.TestResult
来做到这一点。
通过向我的tests/__init__.py
添加以下代码,我设法实现了它。该代码对于所有测试仅运行一次(无论测试类和测试文件的数量如何)。
def startTestRun(self):
"""
https://docs.python.org/3/library/unittest.html#unittest.TestResult.startTestRun
Called once before any tests are executed.
:return:
"""
DockerCompose().start()
setattr(unittest.TestResult, 'startTestRun', startTestRun)
def stopTestRun(self):
"""
https://docs.python.org/3/library/unittest.html#unittest.TestResult.stopTestRun
Called once after all tests are executed.
:return:
"""
DockerCompose().compose.stop()
setattr(unittest.TestResult, 'stopTestRun', stopTestRun)