【问题标题】:Dynamically add CLI arguments in pytest tests在 pytest 测试中动态添加 CLI 参数
【发布时间】:2021-05-29 01:10:21
【问题描述】:

我想使用动态添加的 CLI 参数在 pytest 中运行特定测试,即:

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 以编程方式执行此操作,但我想从测试内部以编程方式执行此操作。

有可能吗?谢谢!

【问题讨论】:

  • 我不确定您的测试是否与参数有关。你能举一个更具体、更实际的例子吗?
  • @NilsWerner 刚刚将示例修改为更具体。
  • 但是你的代码没有解释你为什么要访问参数
  • 希望这次能更清楚:)

标签: pytest


【解决方案1】:

感谢上面发布的答案以及类似的 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.

【讨论】:

  • 如果它解决了您的问题,请随时接受您自己的答案!这让其他人知道问题已解决,因此他们不会遇到它(例如在链接部分)并认为仍然需要帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多