首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只对某些参数执行参数化夹具?

如何只对某些参数执行参数化夹具?
EN

Stack Overflow用户
提问于 2020-11-16 14:28:46
回答 1查看 872关注 0票数 1

在正式文档中,在有关参数化夹具的示例中:

参数化夹具 扩展前面的示例,我们可以标记该夹具以创建两个smtp_connection夹具实例,这将导致使用该夹具的所有测试运行两次。 @pytest.fixture(scope=“模块”、params="smtp.gmail.com“、"mail.python.org") def smtp_connection(请求):

我编写了一个参数化的夹具,就像上面的例子一样,但是现在我的问题是,我想在一个不同的测试函数中使用这个夹具,这个函数应该只对其中一个parameters...Like执行一次,所以:

代码语言:javascript
复制
def my_test_function(smtp_connection)
    # I want this function to execute only once for the first or the second parameter...

因此,我的问题是:测试函数是否可以使用夹具,只对使用pytest API的某些参数执行?或者这个用例已经是一个错误了,在这种情况下,应该以不同的方式实现夹具或测试功能吗?如果是这样的话,在概念上什么才是正确的设计方案?

我正在寻找一种编程解决方案,在运行pytest时不需要使用命令行标志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-16 16:24:37

您可以使用间接夹具参数化 -在本例中,您将定义要在测试中使用的参数,而不是夹具:

代码语言:javascript
复制
@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读取参数,如上面所示。

当然,如果您有许多使用相同参数的测试,那么使用特定的固定装置可能更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64859837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档