将命令行参数与 pytest --pyargs 一起使用
Using Command Line Parameters with pytest --pyargs
我已经为我用如下结构编写的包编写了 pytest 单元测试:
- packagedir
- 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 安装包(正确安装测试和 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 构建查看此操作:
我已经为我用如下结构编写的包编写了 pytest 单元测试:
- packagedir
- 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 安装包(正确安装测试和 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 构建查看此操作: