每个夹具进行py.test多次测试

时间:2015-01-12 05:33:40

标签: python unit-testing pytest

我有以下内容。

@pytest.fixture
def patch_socket(monkeypatch):
    def gethostname():
        return 'web01-east.domain.com'

    monkeypatch.setattr(socket, 'gethostname', gethostname)


def test__get_pod(patch_socket):
    assert __get_pod() == 'east'

如果我想测试以下主机名

,那么正确的方法是什么?
  1. web01-east.domain.com
  2. redis01-master-east.domain.com
  3. web01.domain.com
  4. 我是否应该为每个装置设置一个新装置,或者是否有办法在测试中传递一个主机名?

1 个答案:

答案 0 :(得分:4)

使用此代码

@pytest.fixture(params=['web01-east.domain.com', 'redis01-master-east.domain.com', 'web01.domain.com'])
def patch_socket(request, monkeypatch):
    def gethostname():
        return request.param
    monkeypatch.setattr(socket, 'gethostname', gethostname)

def test__get_pod(patch_socket):
    assert __get_pod() == 'east'

这将动态创建3个测试。如果您使用-vv运行,您会看到类似的内容:

<FILE>::test__get_pod[web01-east.domain.comm PASSED
<FILE>::test__get_pod[redis01-master-east.domain.com] PASSED
<FILE>::test__get_pod[web01.domain.com PASSED