繁体   English   中英

如何在 pytest.parametrize 中传递方法名称以在测试中执行它们?

[英]How to pass name of method in pytest.parametrize for executing them in test?

我需要根据id执行特定的fixture方法。 我需要这样的smt。

@pytest.fixture(autouse=True)
def create_instance_of_class():
test_instance_of_class = TestClass()
yield test_instance_of_class


@pytest.mark.paramethize('id, name_of_method', [
    pytest.param('1', test_instace_of_class.do_smt_1()),
    pytest.param('2', test_instace_of_class.do_smt_2()),
    pytest.param('3', test_instace_of_class.do_smt_3()),
    ])
def test_some_test(id, name_of_method, test_instance_of_class)
    assert name_of_method == test_instance_of_class.SUCCESSFUL_EXIT_CODE, 'Unsuccessful'

我看到的,接下来可以完成:

@pytest.mark.paramethize('id', [
    pytest.param('1'),
    pytest.param('2'),
    pytest.param('3'),
    ])
    def test_some_test(id, test_instance_of_class)
         if id == 1:
            assert test_instace_of_class.do_smt_1() == test_instance_of_class.SUCCESSFUL_EXIT_CODE, 'Unsuccessful'
         elif id == 2:
            assert test_instace_of_class.do_smt_2() == test_instance_of_class.SUCCESSFUL_EXIT_CODE, 'Unsuccessful'

找到解决方案:

assert getattr(test_instance_of_class, name_of_method) == test_instance_of_class.SUCCESSFUL_EXIT_CODE

但需要将参数化选项更改为:

pytest.param('1', 'do_smt_1')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM