用于集成测试的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为什么整数构造函数方法不再需要属性?   java单函数从广播接收器检索数据   Java类中的Scala设置器和获取器   JAVA MVC表选择的行ID和mysql db ID不同   java在Multimaps Guava中获取值   jakarta ee Intellij IDEA Java类在保存时不自动编译   java在另一个Spring实体中使用Spring实体   JTwitter库的安卓类一直在给我java。朗朗:温特韦尔。杰特维特。啁啾   java停止启动应用程序   java Jersey测试NoSuchMethodError   java如何处理合成元素上的注释   java崩溃shell无法通过ssh连接   java计算两个日期之间的天数后(取自edittext)如何在新的edittext中显示天数