我有如下测试用例:
class TestSomething():
def test_a(self):
...
def test_b(self):
...
效果很好。但是现在我必须更改一些设置,重新启动计算机以使其生效,然后再次重新测试这些情况。
我唯一能想到的是:
class TestSomething():
def test_a(self):
...
def test_b(self):
...
def test_change_setting_and_reboot(self):
some_env_var = get_env_var()
if not some_env_var:
set_env_var()
reboot()
def test_a1(self):
self.test_a()
def test_b1(self):
self.test_b()
看起来不太好。是否有更好的方法可以达到相同的目的,而无需更改原始的现有测试用例?
您可以从您的第一个测试类中派生并添加一个设置方法(我使用了一次调用的setup_class
,如果需要,您可以使用在每个测试之前调用的setup_method
)。如果您使用此文件运行pytest:
class TestSomething:
def test_a(self):
pass
def test_b(self):
pass
class TestSomethingElse(TestSomething):
@classmethod
def setup_class(cls):
print('Changing configuration...')
您得到:
collecting ... collected 4 items
test_setup.py::TestSomething::test_a PASSED [ 25%]
test_setup.py::TestSomething::test_b PASSED [ 50%]
test_setup.py::TestSomethingElse::test_a Changing configuration...
PASSED [ 75%]
test_setup.py::TestSomethingElse::test_b PASSED [100%]
========================== 4 passed in 0.07 seconds ===========================
您可以看到,执行更改的设置后,将再次运行每个测试。