将命令行参数与 pytest --pyargs 一起使用

Using Command Line Parameters with pytest --pyargs

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

现在 packagedir/mypackage/test/conftest.py 建立了两个必需的命令行参数,这些参数将被创建为测试的固定装置。当我 运行 这样的事情时:

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

所有测试运行和命令行参数都被正确读入。但是,当我 pip 安装包(正确安装测试和 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 然后能够轻松测试它而无需导航到安装的站点包位置。

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