如何在远程运行测试时获取Testinfra中的目标操作系统类型?

时间:2016-07-13 00:36:58

标签: python automated-tests pytest

Testinfra内,如何为目标操作系统创建测试条件(如果有的话)?

我想通过以下方式在target主机上运行测试:

$ testinfra -v --host=target test.py

我试过了:

def test_passwd_file(File):
    passwd = File("/etc/passwd")
    if SystemInfo.type == "darwin"
        assert passwd.group == "wheel"

我试过了:

if SystemInfo.type == "darwin"
    def test_passwd_file(File):
        passwd = File("/etc/passwd")
        assert passwd.group == "wheel"

但由于缺乏示例和文档,这些基本上是在黑暗中拍摄,并且无效。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但是当我更好地了解这一部分时,我就这样解决了这个问题:http://testinfra.readthedocs.io/en/latest/examples.html#test-docker-images

我在我的测试文件中: <击>     import testinfra

os = testinfra.get_backend(
  "local://"
).get_module("SystemInfo").distribution

def test_zabbix_package(Package):
    zabbixagent = Package('zabbix-agent')
    assert zabbixagent.is_installed

    if os == 'centos':
        assert zabbixagent.version.startswith("3.0")
    elif os == 'debian':
        assert zabbixagent.version.startswith("1:3.0")

首先导入'testinfra'模块。 通过执行testinfra_get_backend模块创建os变量。在我的情况下,我必须使用SystemInfo函数运行distribution模块。

在测试中,我可以使用os变量并在if语句中使用它。

对于您的问题,我想建议如下:     import testinfra

os = testinfra.get_backend(
  "local://"
).get_module("SystemInfo").type

def test_passwd_file(File):
    passwd = File("/etc/passwd")
    if os == "darwin":
        assert passwd.group == "wheel"

<击>

编辑: 我已经重新编辑了我的答案,因为SO想要这个。

我现在正在为Zabbix Agent的角色工作:

def test_zabbix_package(Package, SystemInfo):
    zabbixagent = Package('zabbix-agent')
    assert zabbixagent.is_installed

    if SystemInfo.distribution == 'debian':
        assert zabbixagent.version.startswith("1:3.0")
    if SystemInfo.distribution == 'centos':
        assert zabbixagent.version.startswith("3.0")

这适用于Debian和CentOS容器。

def test_passwd_file(File, SystemInfo):
    passwd = File("/etc/passwd")
    if SystemInfo.type == "darwin":
        assert passwd.group == "wheel"
祝你好运!