py.test和fixtures-如何只选择params的一个变体



假设我有以下固定装置:

@pytest.fixture(params=['google.com','other-provider.com')
def smtp_server(request):
    .... some initialisation ....
    return SmtpServer(request.param)

@pytest.fixture(params=['plain_text','html')
def message(request):
    .... some initialisation according to email type....
    return msg_obj

因此,如果我在一个测试函数中使用它们,我就有了组合:google+plain、provider+plain,google+html、provider+html。

但是,如果我想重用固定装置,但只在特定的组合中使用,该怎么办。我注意到,当我向谷歌发送html电子邮件时,在某些情况下会失败。我如何在不测试发送到other-provider.com的情况下重用固定装置并测试这种情况,这是毫无意义的?

换句话说,如何跳过特定测试功能中的某些固定装置组合?

首先,我想指出这实际上是一个相当奇怪的情况。你真的确定这些测试对你想跳过的组合毫无意义吗?

已经说过,我自己解决这个问题的方法是简单地使用

if snmtp_server == 'other-provider.com' and message == 'html':
    pytest.skip('impossible combination')

在测试函数内部。它是初级的,但对于这种不寻常和罕见的情况来说已经足够好了。

最新更新