pytest:重构重复的测试用例

问题描述 投票:0回答:1

我有如下测试用例:

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()

看起来不太好。是否有更好的方法可以达到相同的目的,而无需更改原始的现有测试用例?

pytest automated-refactoring
1个回答
1
投票

您可以从您的第一个测试类中派生并添加一个设置方法(我使用了一次调用的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 ===========================

您可以看到,执行更改的设置后,将再次运行每个测试。

© www.soinside.com 2019 - 2024. All rights reserved.