在正式文档中,在有关参数化夹具的示例中:
参数化夹具 扩展前面的示例,我们可以标记该夹具以创建两个smtp_connection夹具实例,这将导致使用该夹具的所有测试运行两次。 @pytest.fixture(scope=“模块”、params="smtp.gmail.com“、"mail.python.org") def smtp_connection(请求):
我编写了一个参数化的夹具,就像上面的例子一样,但是现在我的问题是,我想在一个不同的测试函数中使用这个夹具,这个函数应该只对其中一个parameters...Like执行一次,所以:
def my_test_function(smtp_connection)
# I want this function to execute only once for the first or the second parameter...因此,我的问题是:测试函数是否可以使用夹具,只对使用pytest API的某些参数执行?或者这个用例已经是一个错误了,在这种情况下,应该以不同的方式实现夹具或测试功能吗?如果是这样的话,在概念上什么才是正确的设计方案?
我正在寻找一种编程解决方案,在运行pytest时不需要使用命令行标志。
发布于 2020-11-16 16:24:37
您可以使用间接夹具参数化 -在本例中,您将定义要在测试中使用的参数,而不是夹具:
@pytest.fixture(scope="module")
def smtp_connection(request):
url = request.param
...
pytest.mark.parametrize("smtp_connection", ["smtp.gmail.com", "mail.python.org"], indirect=True)
def def my_test_function(smtp_connection):
...
pytest.mark.parametrize("smtp_connection", ["smtp.gmail.com"], indirect=True)
def def my_other_test_function(smtp_connection):
...这将用列表中为特定测试提供的每个参数将夹具参数化。您可以从request.param读取参数,如上面所示。
当然,如果您有许多使用相同参数的测试,那么使用特定的固定装置可能更好。
https://stackoverflow.com/questions/64859837
复制相似问题