使用命令行参数和pytest --pyargs

时间:2016-12-21 19:34:35

标签: python pytest

我已经为一个我用以下结构编写的包写了pytest单元测试:

  • packagedir
    • setup.py
    • mypackage的
      • __初始化__。PY
      • functionpackage
        • __初始化__。PY
        • functionmodule.py
      • 测试
        • __初始化__。PY
        • conftest.py
        • unit_tests
          • __初始化__。PY
          • functionmodule_test.py

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

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

运行所有测试并正确读取命令行参数。但是,当我pip安装包(正确安装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命令行参数的解释,但这只是猜测。我想知道是否有一种实际的方法可以解决这个问题。

最重要的目标是允许某人点击安装mypackage然后能够轻松测试它而无需导航到安装的站点包位置。

1 个答案:

答案 0 :(得分:4)

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

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构建查看此操作: