【问题标题】:Using Command Line Parameters with pytest --pyargs将命令行参数与 pytest --pyargs 一起使用
【发布时间】:2017-05-07 08:08:08
【问题描述】:

我已经为我编写的包编写了 pytest 单元测试,其结构如下:

  • 包目录
    • setup.py
    • 我的包裹
      • __init__.py
      • 功能包
        • __init__.py
        • functionmodule.py
      • 测试
        • __init__.py
        • conftest.py
        • unit_tests
          • __init__.py
          • functionmodule_test.py

现在 packagedir/mypackage/test/conftest.py 建立了两个必需的命令行参数,以作为测试的固定装置。当我运行类似的东西时:

pytest packagedir/mypackage/ --var1 foo --var2 bar

所有测试都运行并且命令行参数被正确读入。但是,当我 pip install 包(它会正确安装 test 和 unit_tests 包)然后尝试这样的事情:

pytest --pyargs mypackage --var1 foo --var2 bar

我收到这样的错误:

usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --var1 foo --var2 bar

如果我跑:

pytest --pyargs mypackage

测试运行但失败,因为命令行参数不存在。

有人可以向我解释这里可能出了什么问题吗?我可以猜测并说这是因为 --pyargs 参数改变了 pytest 命令行参数的解释,但这只是一个猜测。我想知道是否有一种实际的方法可以解决这个问题。

首要目标是允许某人 pip install mypackage 然后能够轻松地对其进行测试,而无需导航到安装的 site-packages 位置。

【问题讨论】:

标签: python pytest


【解决方案1】:

我在mypackage/test目录中添加了__main__.py并写了

import os
import sys

HERE = os.path.dirname(__file__)

if __name__ == "__main__":
    import pytest
    errcode = pytest.main([HERE] + sys.argv[1:])
    sys.exit(errcode)

现在,我可以执行测试了

python -m mypackage.test --myoption=works

这在安装包时有效。

您可以使用 travis 构建查看此操作:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多