如何使用常见的pytest夹具作为上下文管理器?

时间:2018-09-20 17:43:14

标签: python pytest fixtures

我将数百个测试脚本添加到正在创建的pytest框架中。每个脚本都需要打开与我们正在测试的设备的连接,运行许多任务并关闭。正在通过固定装置创建和关闭连接。还想补充一点,需要为每个运行的脚本(即模块级别,而不是作用域或功能级别)建立新的连接。

我在与任务相同的文件中使用固定装置。像这样的东西。

my_test.py

...
@pytest.fixture(scope='module')
def setup(request):
    global connection
    with target.Connect() as connection:
        yield connection

    def teardown():
        connection.close
    request.addfinalizer(teardown)

@pytest.mark.usefixtures("setup")
def test_query_device_info():
    global connection
    connection.write('echo $PATH')
    connection.write('echo $HOME')
    ...

由于我有数百个测试,所以我不想为每个文件复制相同的代码,因此我需要一个可以用于每个测试的通用夹具。我尝试将这个灯具添加到conftest.py中,并且正在创建连接,但是当它到达connection.write命令时失败。

conftest.py

...
@pytest.fixture
def setup(request):
    global connection
    with target.Connect() as connection:
        yield connection

    def teardown():
        connection.close
    request.addfinalizer(teardown)

my_test.py

...
@pytest.mark.usefixtures("setup")
def test_query_device_info():
    global connection
    connection.write('echo $PATH')

如何在所有测试均可访问的公共位置安装此灯具,并正确创建可在脚本中使用的连接?

请注意,这些是通过pyCharm IDE执行的,而不是直接在命令行上执行的。

1 个答案:

答案 0 :(得分:0)

该框架经过重新设计,以使连接是通过使用__enter____exit__方法的类来完成的,这些方法自动控制上下文。