在pytest测试中动态添加CLI参数

时间:2018-07-11 09:08:57

标签: pytest

我想在pytest中使用动态添加的CLI参数(即

)运行特定的测试
class TestHyperML:
    def some_test(self):
        # Setup some CLI argument such as --some_arg 3 -- some_other_arg 12
        my_class = SomeClass()

class SomeClass:
    def parse_cli_arguments(self):
        # here I want to fetch my arguments in sys.argv.
        parameters = {}
        name = None
        for x in sys.argv[1:]:
            if name:
                parameters[name] = {'default': ast.literal_eval(x)}
                name = None

            elif x.startswith('-'):
                name = x.lstrip('-')

        return parameters

我知道可以通过运行pytest test_something.py --somearg以编程方式执行此操作,但是我想从测试内部以编程方式执行该操作。

有可能吗?谢谢!

1 个答案:

答案 0 :(得分:0)

感谢上面发布的答案以及类似的SO问题,这是我使用的解决方案:

import mock

def test_parsing_cli_arguments(self):
    args = 'main.py --my_param 1e-07 --my_other_param 2'.split()
    with mock.patch('sys.argv', args):
        parser = ConfigParser("config.yaml")
        # Inside parser, sys.argv will contain the arguments set here.