如何在自动模式下获取 pytest 夹具返回值?

jie*_*jie 6 python pytest python-3.x

在下面的示例代码中,当灯具处于模式时,如何在函数A()中获取对象?test_oneautouse

import pytest
import time

class A:
    def __init__(self):
        self.abc = 12
        

@pytest.fixture(autouse=True)
def test_foo():
    print('connecting')
    yield A()
    print('disconnect')
    
    
def test_one():
    #how can i get A() object?
    print([locals()])
    assert 1 == 1
Run Code Online (Sandbox Code Playgroud)

MrB*_*men 10

尽管存在以下情况,您始终可以添加夹具作为参数autouse

def test_one(test_foo):
    print(test_foo)
    assert 1 == 1
Run Code Online (Sandbox Code Playgroud)

如果您出于某种原因不想使用固定参数,则必须将对象保存在其他位置才能从测试中访问它:

a = None 

@pytest.fixture(autouse=True)
def test_foo():
    global a
    a = A() 
    yield
    a = None
    
def test_one():
    print(a)
    assert 1 == 1
Run Code Online (Sandbox Code Playgroud)

a如果使用测试类并放入类变量以避免使用全局 var,这可能会好一点,但第一个变体仍然是首选,因为它本地化了对象的定义。

除此之外,生成一个您无权访问的对象没有任何实际意义。您可以考虑这是否autouse是适合您的用例的正确选项。自动使用通常用于无状态设置/拆卸。

如果您的用例是无论如何都要进行一些设置/拆卸(如连接/断开注释所建议的),并提供对对象的可选访问权限,当然这是可以的。