【问题标题】:How to pass command line parameters in a python test如何在 python 测试中传递命令行参数
【发布时间】:2019-07-16 08:33:02
【问题描述】:

我有一个微服务类 MsActionDetector。它从命令行获取一个参数,因为 ms 在本地和容器内的 .sh 脚本中启动。

class MsActionDetector(BaseMicroservice):

    def __init__(self):
        self.config = safe_load(open(sys.argv[1]))
        ....

我想执行集成测试,从而在测试中实例化我的微服务,但这不起作用,因为该类除了命令行参数。我怎样才能做到这一点? python Decorator 是一个解决方案吗?我应该修改我的构造函数吗?

【问题讨论】:

  • 为什么不让您的测试脚本使用 os.system('<command goes here>') 从 shell 启动应用程序?
  • 我不确定我是否理解,os.system() 是做什么的?
  • 您如何进行集成测试?
  • 如果您导入 os 模块,您可以使用常规的 shell 命令(例如“python myService.py args”)来启动其他东西,例如服务助手守护程序或其他用于测试的应用程序。
  • 调用 os.system 似乎是同步的,我在测试中不能做任何其他事情

标签: python oop testing decorator python-decorators


【解决方案1】:

sys.argv 是一个没有什么魔力的列表。它是从命令行初始化的,但您可以随意更改它。所以在实例化MsActionDetector之前很容易在测试类中设置成你想要的值:

sys.argv = ['cmd', 'path/to/file']
msad = MsActionDetector()     # will open path/to/file
...

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2018-12-27
    • 2020-08-27
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多