用于集成测试的shell命令mocker

shmock的Python项目详细描述


目的

系统管理工具通常在命令行上调用许多程序。这使得自动化测试相当棘手,因为您可能需要

  • 运行“sudo….”,即使生成系统不允许使用sudo
  • 让“uname”或“ifconfig”之类的工具生成特定的测试输出

shmock通过创建mock命令来帮助您,该命令由于临时操纵的$path而取代系统自己的命令。根据命令行参数,模拟命令可以有不同的

  • stdout和stderr上的输出
  • 出口代码

不可能在第二次调用时模拟慢度或行为不同的命令。命令行解析非常有限,但对于自动生成的调用来说这不是问题。然而,这些限制使得实现非常简单。

配置

要配置哪些命令应该模拟(以及如何模拟),请使用如下字典:

commands_to_mock={'saynay':'Nay sayers say nay.''jonny':{():"walker","foo":"bar",("b","goode"):"Go, Jonny, go!",("be","bad"):{"stderr":"yup","returncode":255},None:{"stdout":"You called me with some unknown parameters.","stderr":"And I don't like that.","returncode":1}}}

第一部分使用最简单的方法来定义一个嘲弄的命令:定义一个“ayayne”命令,它总是打印“Nay-塞耶斯Nay.”,并成功退出,不管命令行选项如何。

之后,定义了一个“jonny”命令,该命令演示shmock模块的完整功能集。命令定义为

  • 在没有参数的情况下调用时,打印“walker”。
  • 当使用单个参数“foo”调用时,打印“bar”。
  • 当用两个参数“b”和“goode”调用时,打印“go,jonny,go!”“。
  • 当调用“坏”时,打印“YUP”到标准错误,然后用255退出。
  • 当调用任何其他参数时,打印“you…”到标准输出,打印“和…”到标准错误,然后用1退出。

用法

shellcommandmock用于“with”上下文,如下所示:

importosfromshmockimportShellCommandMockwithShellCommandMock(commands_to_mock):os.system("echo $PATH")os.system("jonny")os.system("jonny b goode")os.system("jonny be bad")os.system("jonny foobar")os.system("echo $PATH")

高级用法

有时您希望保留模拟的shell命令,以便进一步测试/调试。您可以告诉shmock不要使用

fromshmockimportShellCommandMockwithShellCommandMock(commands_to_mock,keep_temp_dir=True):pass

shmock将打印模拟环境的位置,以便将其添加到$path中。

打印输出时,shmock调用print(),print()自动向输出追加换行符。因此,目前不可能产生不以换行结尾的输出。一旦成为问题,这个问题就会得到解决。

许可证

版权所有2015 Immobilienscout24 GmbH

根据apache许可证2.0版(以下简称“许可证”)授权; 除非符合许可证,否则您不能使用此文件。 您可以在

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。

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

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面