python - 如何测试独立脚本文件

标签 python python-3.x python-2.7 pytest

我已经编写了一个模块,可以通过 pip 安装,其目录结构如下:

bin/myapp
src/mymodule
src/mymodule/__init__.py
src/mymodule/config.py
src/mymodule/file1.py
src/mymodule/file2.py
tests/func/
tests/unit/file1/test_func1.py
tests/unit/file1/test_func2.py
tests/unit/file2/test_func1.py
setup.py
setup.cfg

setup.py 包含:

scripts=['bin/myapp'],

myapp 导入 mymodule,是根据需要执行模块代码的“包装器”脚本。例如我的应用包含:

import mymodule

def main(config_file):
    mymodule.read_config(config_file)
    ...
    mymodule.do_something_else
    ...

if __name__ == '__main__':
    ...
    main(config_file)

我想在“func/”(func/test_myapp.py)下编写一个测试,它将设置一个目录结构,然后执行“myapp”,它调用我的模块进行端到端测试(我需要模拟一些功能,因为它们确实调用了测试机器上不存在的真实可执行文件)。

但我似乎找不到一篇好文章告诉我如何导入 'bin/myapp' 以便对其进行测试。

感谢任何帮助。

附言代码示例必须与 2.7 和 3.x 兼容,因此两者都被标记。

最佳答案

不要将逻辑放在 bin/myapp 中,而是将一个或多个函数放在 mymodule/cli.py 中并使用一个入口点:https://packaging.python.org/specifications/entry-points/

您将最大限度地减少您编写的样板文件,并且逻辑将可导入您的测试以及安装该包的任何其他人 - 如果您需要更多,您可能会发现在某些情况下直接调用函数比 shell out 更方便对其他客户端的明确控制。

您的确切测试问题也在这里得到解决:http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point

关于python - 如何测试独立脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139975/

相关文章:

Python 捕获所有打印输出

python - 无法导入数据类模块

python - 如何将列表拆分为 Python 3 中的嵌套列表?

python - 如何使用python读取文件?

python-2.7 - GAE - 无法从 BigQuery API 获取 URL

python - 如果其值为 None,则隐藏表单上的只读字段

python - 连接 Python 2.6.1 和 MySQLdb

python - MNIST : get confusion matrix

python-3.x - 无法使用 Pypdf 读取 pdf 文件。它以字节码显示输出

python - 如何确保在子项在装饰器中覆盖它之前始终调用父方法?