Testing 如果任何参数化测试通过,如何使pytest通过测试?

Testing 如果任何参数化测试通过,如何使pytest通过测试?,testing,pytest,fixtures,testinfra,Testing,Pytest,Fixtures,Testinfra,我们有一个集群,其中只有一个服务器(主服务器)可以返回有意义的结果。主机是自动选择的,在测试时我不知道谁是主机,谁不是主机。在我们的测试中,我们使用testinfra,它为集群中的每个主机提供了一个fixture“host” 我们有一个测试,如下所示: def test_cluster(host): assert host.run_command('cluster --is_ok').stdout == 'OK' test_cluster[host1] .... FAIL test_c

我们有一个集群,其中只有一个服务器(主服务器)可以返回有意义的结果。主机是自动选择的,在测试时我不知道谁是主机,谁不是主机。在我们的测试中,我们使用testinfra,它为集群中的每个主机提供了一个fixture“host”

我们有一个测试,如下所示:

def test_cluster(host):
    assert host.run_command('cluster --is_ok').stdout == 'OK'
test_cluster[host1] .... FAIL
test_cluster[host2] .... OK
test_cluster[host3] .... FAIL
test_cluster[host4] .... FAIL
问题是有N个主机,其中只有一个可以返回OK,其他主机说“我不是高手”

正常输出如下所示:

def test_cluster(host):
    assert host.run_command('cluster --is_ok').stdout == 'OK'
test_cluster[host1] .... FAIL
test_cluster[host2] .... OK
test_cluster[host3] .... FAIL
test_cluster[host4] .... FAIL
我想找到一种方法,如果任何测试通过(如果所有测试都失败),则将测试
test\u集群
标记为通过

如果testinfra对于测试来说太多了,这里有一个仅使用pytest的更简洁的示例:

@pytest.fixture.parametrize("num", [0, 0, 1, 0])
def test_example(num):
     asssert num > 0

如果“num”fixture中至少有一个
1
,我需要pytest通过。

如果某些测试预计会失败,请使用
@pytest.mark.xfail
@pytest.mark.xfail
标记测试的所有实例,如果所有实例都失败,我需要失败。我明白了。如果任何
test_cluster
测试通过,您希望自定义行为是什么?如果测试的所有实例都失败->测试失败,则以零退出。如果参数化中至少有一个通过,则测试通过。(这不是关于一般的“所有测试”,而是关于参数化组中参数化后的测试)。这不是参数化应该如何使用,这些不是具有相同预期结果的单独测试用例;第二个示例的正确测试类似于断言any(num>0表示[0,0,1,0]中的num)。如果某个测试预计会失败,请使用
@pytest.mark.xfail
@pytest.mark.xfail
标记该测试的所有实例,如果所有实例都失败,我需要失败。我明白了。如果任何
test_cluster
测试通过,您希望自定义行为是什么?如果测试的所有实例都失败->测试失败,则以零退出。如果参数化中至少有一个通过,则测试通过。(这不是关于一般的“所有测试”,而是关于参数化组中参数化后的测试)。这不是参数化应该如何使用,这些不是具有相同预期结果的单独测试用例;第二个示例的正确测试类似于
assertany(num>0表示[0,0,1,0]中的num])