使用 Fixtures 与传递方法作为参数

Car*_*rla 6 python pytest


我只是在学习 Python 和 Pytest,并遇到了 Fixtures。请原谅这个基本问题,但我有点想知道在 Python 中使用夹具有什么好处,因为您已经可以将方法作为参数传递,例如:

def method1():
    return 'hello world'

def method2(methodToRun):
    result = methodToRun()
    return result

method2(method1)
Run Code Online (Sandbox Code Playgroud)

@pytest.fixture对象作为参数传递有什么好处?

Arn*_*rne 5

一个区别是固定装置传递调用函数的结果,而不是函数本身。但这并不能回答您的问题,尽管您为什么要使用它pytest.fixture而不是手动调用它,所以我只列出一些内容。

原因之一是全球可用性。在 中编写固定装置后conftest.py,您只需引用其名称即可在整个测试套件中使用它,并且避免重复它,这很好。

如果您的固定装置返回可变对象,pytest还会为您处理新的调用,以便您可以确保使用相同固定装置的其他测试不会改变彼此之间的行为。如果pytest默认情况下不这样做,则必须手动完成。

一大问题是插件系统pytest使用固定装置来使其功能可用。因此,如果您是一名 Web 开发人员,并且想要为您的测试提供一个模拟服务器,您只需安装,pytest-localserver然后将httpserverhttpsserver、 和smtpserver参数添加到您的测试函数中,即可从您刚刚安装的库中注入固定装置。这是非常方便和直观的,特别是与其他语言的注入机制相比。

最重要的是,使用单一方法将依赖项包含在测试套件中,并pytest选择一种将自身神奇地绑定到函数签名的固定机制是有用的。因此,虽然这实际上与手动插入参数没有什么不同,但通过它增加的生活质量pytest使其值得。