как переопределить прибор pytest, но по-прежнему иметь к нему доступ? - PullRequest
3 голосов
/ 27 мая 2020

У меня есть conftest.py и плагин, оба определяют одно и то же приспособление с разными реализациями:

conftest.py

import pytest
@pytest.fixture
def f():
    yield 1

plugin

import pytest
@pytest.fixture
def f():
    yield 2

при установке плагина conftest все еще переопределяет плагин, поэтому тестовый файл будет видеть только conftest fixture, т.е.

test_.py

def test(f):
    assert f == 1 # True

Я хочу иметь возможность что-то делать вот так:

  1. Если плагин не установлен, продолжить
  2. В противном случае, из конфтестного плагина выведите значение фикстуры плагина

I удалось пройти половину пути:

conftest.py

import pytest
@pytest.fixture
def f(pytestconfig):
    if pytestconfig.pluginmanager.has_plugin(plugin_name):
        # now what? I have get_plugin and import_plugin, but I'm not able to get the fixture from there...

1 Ответ

3 голосов
/ 27 мая 2020

Самый простой способ, который я вижу, - это попытаться получить значение фикстуры плагина. Если поиск фикстуры завершился неудачно, значит, плагин не определил его, и вы можете делать свои собственные вещи. Пример:

import pytest
from _pytest.fixtures import FixtureLookupError

@pytest.fixture
def f(request):
    try:  # try finding an already declared fixture with that name
        yield request.getfixturevalue('f')
    except FixtureLookupError:
        # fixture not found, we are the only fixture named 'f'
        yield 1
...