我试图在同一个测试中,首先在机器 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 主机并返回到第一个。这正是我的问题。这就是我想要做的,但我无法为我的生活弄清楚如何去做。任何帮助将不胜感激。