通过重放记录的调用模拟命令行实用程序
cli-mock的Python项目详细描述
此包提供两个命令行实用程序:crecord和creplay。 前者记录输出(stdout和stderr)和 命令,后者通过复制命令的输出来重放命令调用 返回代码:
$ crecord echo foo foo $ creplay echo foo foo $ crecord ls foo ls: foo: No such file or directory $ creplay ls foo ls: foo: No such file or directory $ echo $? 1
这可以用来模拟慢的和依赖于环境的命令调用 用于测试目的。
Pytest插件
cli_mock包中还包含一个pytest插件。它暴露了 popen_controller可用于重播crecord登录的fixture 响应subprocess.Popen调用(以及调用它的api 引擎盖):
def test_foo(popen_controller): popen_controller.set_replay_log(my_log) output = subprocess.check_output(['foo']) assert output == b'bar\n'
重播日志激活后,呼叫subprocess.Popen和朋友 日志中包含的命令将从日志中重播。 不在日志中的命令将触发AssertionError。
非严格模式
允许通过 激活非严格模式:
popen_controller.set_strict(False)
或:
popen_controller.set_replay_log(my_log, strict=False)
在非严格模式下,任何不在日志中的命令都将传递给 subprocess.Popen无需修改,将在通常的 时尚。