【问题标题】:Testing python package bin scripts best practice测试python包bin脚本最佳实践
【发布时间】:2013-07-17 23:00:19
【问题描述】:
myproject/
    bin/
        myscript
    mypackage/
        __init__.py
        core.py
        tests/
            __init__.py
            test_mypackage.py
    setup.py

测试脚本 myscript 的最佳方法是什么?

从 SO 研究看来,我发现的唯一答案是在名为 test_myscript 的测试中编写一个测试并使用类似

import subprocess

process = subprocess.Popen('myscript arg1 arg2')
print process.communicate()

在我的测试用例中运行脚本然后测试结果。有没有更好的办法?或者对不同方式的任何其他建议?我应该将测试套件放在 bin/tests 还是 mypackage/tests 中?

【问题讨论】:

  • 脚本来自的项目是否应该对其进行测试?
  • 如果不是脚本来自的项目,那么应该对脚本进行什么测试?

标签: python testing


【解决方案1】:

我不认为有任何关于将tests 放在哪里的“最佳实践”。看看有多少不同的意见:Where do the Python unit tests go?

我个人会在您的 binmypackage 目录附近的顶层拥有一个也是唯一的 tests 目录 - 例如,django 就有。

为了运行您的 bin 脚本并获得结果,您可以使用:

  • 子进程(正如你提到的),但使用check_output

    import subprocess
    output = subprocess.check_output("cat /etc/services", shell=True)
    
  • scripttest module

    • 被设计为 test command-line scripts - 看起来像是工作的工具
    • 另见article
  • clicli.test 模块(个人从未使用过)

希望对您有所帮助。

【讨论】:

  • 如果脚本不产生输出,而是修改了一个数据库,那怎么办?通常,我使用依赖注入将数据库更改为在 setUp 中创建的测试数据库。有没有办法可以使用相对导入来导入脚本,然后进行依赖注入,然后运行 ​​main(args)?假设它在测试数据库上运行,测试输出是很容易的部分。理想情况下,我想继续使用依赖注入。
猜你喜欢
  • 1970-01-01
  • 2021-03-15
  • 2018-10-15
  • 2011-06-29
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多