为pythoncli程序编写测试的有用助手。

cli-test-helpers的Python项目详细描述


cli测试助手Latest version on PyPI

Build statusPython versionsSoftware license

为pythoncli程序编写测试的有用助手。在

当您从单元测试的角度考虑时,为命令行接口(CLI)工具may not seem strictly straight-forward编写测试。尤其是当你 使用argparse模块或click包控制应用程序 切入点有点偏离你。在

但也没那么糟。这个包裹是来帮忙的。这些例子给了你 一些关于如何开始的指导,帮助者允许您处理 常见情况,例如模拟CLI参数和环境变量值。在

安装

pip install cli-test-helpers

不过,最好添加cli-test-helpers作为Tox的依赖项 环境(见example)。在

使用

假设您使用pytest来运行测试,这肯定是一个 好主意。您的CLI程序名为foobar。你已经准备好了 setup.py,具有CLI入口点。对于你准备的测试 tests/文件夹(在foobar/之外),因为您不想测试 与应用程序代码一起打包)。然后你的目录布局 看起来有点像our example。在

功能测试

从一组简单的功能测试开始:

  • 是否安装了入口点脚本?(在设置.py)在
  • 这个包可以作为Python模块运行吗?(即无需安装)
  • 命令XYZ可用吗?等等,请在此介绍您的整个CLI使用情况!在

这几乎是一个愚蠢的练习:将命令作为shell命令运行 并检查退出进程的状态代码(参见example)。 诀窍是运行一个非破坏性命令,例如使用 ^每个命令的{tt6}$选项。这应该涵盖整个CLI用户 接口定义。在

单元测试

那你就可以利用我们的帮手了。在

ArgvContext允许您模拟特定CLI参数的使用:

^{pr2}$

EnvironContext允许您模拟环境值的存在:

deftest_fail_without_secret():"""Must fail without a ``SECRET`` environment variable specified"""message_regex="Environment value SECRET not set."withEnvironContext(SECRET=None):withpytest.raises(SystemExit,match=message_regex):foobar.command.baz()pytest.fail("CLI doesn't abort with missing SECRET")

example。在

TDD

记住要坚持测试驱动的咒语:

  1. 写一行测试代码。让测试失败。在
  2. 写一行应用程序代码。通过测试。在
  3. 转到1。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么Camel Spring 2.20.2会导致NIST漏洞CVE20169878和CVE20175929   javascript如何在Lodash中获取数组索引。每个   如何在java中欺骗ip   选择的java DropdownChoice与模型值不同,在ajax更新时更改   用于Java库ant构建的GnuPG问题/错误   java Atlas Mapper:使用Atlas Mapping文档为给定负载执行映射   java Paypal Broadleaf集成   java Meteor客户端函数,然后是服务器端响应   JavaJPA2在JavaSE中使用EntityManager有几个问题   java是否将时间戳格式的值更改为其他时间戳格式?   java为什么IF语句不能处理四舍五入的浮点和双精度浮点?   java无法访问handle事件中的按钮/文本区域   java Eclipse将数据插入MySQL时出现while循环未指定值错误   调试是java类库的启用调试/编译版本仍然可用   异步java。lang.ClassCastException:无法强制转换为组织。springframework。util。同时发生的可听未来   打印总是选择默认打印机,而不是指定的JAVA打印机   在Java中实现多重继承的对象   java如何从具有特定联系人的其他应用程序打开Whatsapp?   unicode字符串的java gson序列化不起作用   java如何从Android向flask服务器发送带有参数的post请求?