用于集成测试的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!”“。
- 当调用任何其他参数时,打印“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
除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。