1

我试图在同一个测试中,首先在机器 A(又名主机)上执行代码,做出断言,然后在机器 B(又名 SNIC)上执行代码,在那里做出断言,然后执行代码再次在机器 A 上。

这是我使用 Testinfra 和 Ansible 的 PyTest 测试文件:

import pytest
import basic_io

testinfra_hosts = ["ansible://host"]


###################################################
# test_virtio_blk_exposed is executed on The Host #
###################################################

@pytest.mark.dependency(name="virtio_blk_exposed")
def test_virtio_blk_exposed(configure_virtio_blk_zero_copy_fixture, host, load_virtio_modules,
                            get_virtio_blk_devices):
    """
    Verify that at least one virtio device is exposed on host
    """
    print(get_virtio_blk_devices)
    assert len(get_virtio_blk_devices) > 0


###########################################################
# The commented out code below should execute on The SNIC #
###########################################################

# cmd = host.run("/path/to/binary --parameter=value")
#    assert cmd.rc == 0


################################################
# test_test_fio_verify is executed on The Host #
################################################

@pytest.mark.dependency(depends=["virtio_blk_exposed"])
@pytest.mark.parametrize("rw", ["randrw"])
def test_fio_verify(configure_virtio_blk_zero_copy_fixture,
                    host, load_virtio_modules,
                    get_virtio_blk_devices, rw):
    """
    Test fio with verify option on every virtio device
    """
    target_dev = get_virtio_blk_devices[-1]
    basic_io.run_fio_verify_test(host, "/dev/{}".format(target_dev), rw)

这是我的 Ansible 清单的相关部分:

all:
  children:
    snic_grp:
      hosts: { hostname-snic.domain.zone }
    host:
      hosts: { hostname.domain.zone }

现在,Testinfra 文档含糊地提到我可以一次使用多个主机。因此,我可以替换这一行:

testinfra_hosts = ["ansible://host"]

有了这个:

testinfra_hosts = ["ansible://host", "ansible://snic_grp"]

但是,它并没有说明如何在测试过程中切换到第二个 testinfra 主机并返回到第一个。这正是我的问题。这就是我想要做的,但我无法为我的生活弄清楚如何去做。任何帮助将不胜感激。

4

0 回答 0