首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在每个方法上运行范围为"class“的Pytest夹具

在每个方法上运行范围为"class“的Pytest夹具
EN

Stack Overflow用户
提问于 2017-11-15 16:41:09
回答 2查看 11.7K关注 0票数 8

我正在尝试用Pytest创建一个测试环境。其思想是将测试方法分组到类中。

对于每一个类/组,我都希望附加一个将要参数化的config夹具。这样我就可以使用“配置A”运行所有测试,然后使用“配置B”运行所有测试,等等。

而且,我还想要一个reset夹具,它可以在特定方法或类的所有方法之前执行。

我遇到的问题是,一旦我将我的reset config 治具应用于方法或整个类,config夹具似乎在函数作用域中工作,而不是在类作用域中工作。因此,一旦我应用了reset config 工具,就会在类中的每个方法之前/之后调用。

下面的代码重复了这个问题:

代码语言:javascript
复制
import pytest
from pytest import *

@fixture(scope='class')
def config(request):
    print("\nconfiguring with %s" % request.param)
    yield
    print("\ncleaning up config")

@fixture(scope='function')
def reset():
    print("\nreseting")

@mark.parametrize("config", ["config-A", "config-B"], indirect=True)
#@mark.usefixtures("reset")
class TestMoreStuff(object):

    def test_a(self, config):
        pass

    def test_b(self, config):
        pass

    def test_c(self, config):
        pass

测试显示了config夹具应该如何工作,只对整个类执行一次。如果取消对usefixtures装饰的注释,您可以注意到config夹具将在每个测试方法中执行。reset 是否可以在不触发这种行为的情况下使用夹具?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-23 08:35:30

正如我在评论中提到的,这似乎是Pytest 3.2.5中的一个bug。

有一个解决办法,那就是“强制”参数化的范围。因此,在本例中,如果将scope="class"包含在parametrize装饰器中,则会得到所需的行为。

代码语言:javascript
复制
import pytest
from pytest import *

@fixture(scope='class')
def config(request):
    print("\nconfiguring with %s" % request.param)
    yield
    print("\ncleaning up config")

@fixture(scope='function')
def reset():
    print("\nreseting")

@mark.parametrize("config", ["config-A", "config-B"], indirect=True, scope="class")
@mark.usefixtures("reset")
class TestMoreStuff(object):

    def test_a(self, config):
        pass

    def test_b(self, config):
        pass

    def test_c(self, config):
        pass
票数 8
EN

Stack Overflow用户

发布于 2017-11-16 06:56:40

这取决于您使用的是哪种版本的pytest。

在较早版本的pytest中实现这一点存在一些语义问题。因此,这个想法还没有在旧的pytest中实现。有人已经提出了实施同样的建议。您可以参考

“当参数化测试使用参数化夹具时,夹具范围不起作用”。这是虫子。您可以参考

这一问题已在最新版本的pytest中得到解决。以下是与提交相同的pytest 3.2.5

希望它能帮到你。

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

https://stackoverflow.com/questions/47312835

复制
相关文章

相似问题

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