Как уже отмечалось многими, HTML не является обычным языком, который может затруднить его синтаксический анализ. Мое решение состоит в том, чтобы превратить его в обычный язык, используя аккуратную программу, а затем использовать синтаксический анализатор XML для использования результатов. Для этого есть много хороших вариантов. Моя программа написана с использованием Java с библиотекой jtidy , чтобы превратить HTML в XML, а затем Jaxen в xpath в результат.
На данный момент мое единственное решение - создать прибор, который возвращает словарь приборов.
import pytest
import my_package
@pytest.fixture
def dir1_fixture():
return '/dir1'
@pytest.fixture
def dir2_fixture():
return '/dir2'
@pytest.fixture
def dir_fixtures(
dir1_fixture,
dir2_fixture
):
return {
'dir1_fixture': dir1_fixture,
'dir2_fixture': dir2_fixture
}
@pytest.mark.parametrize('fixture_name, expected', [('dir1_fixture', 'expected1'), ('dir2_fixture', 'expected2')]
def test_directory_command(dir_fixtures, fixture_name, expected):
dirname = dir_fixtures[fixture_name]
result = my_package.directory_command(dirname)
assert result == expected
Не лучший, поскольку он не использует решение, встроенное в pytest, но оно работает для я.
В настоящее время это не поддерживается pytest. Для этого есть открытый запрос функции: https://github.com/pytest-dev/pytest/issues/349 .
Если вы используете pytest 3.0 или более позднюю версию, я думаю, что вы сможете решить этот конкретный сценарий, написав инструмент по строкам:
@pytest.fixture(params=['dir1_fixture', 'dir2_fixture'])
def dirname(request):
return request.getfixturevalue(request.param)
Документы здесь: http : //doc.pytest.org/en/latest/builtin.html#_pytest.fixtures.FixtureRequest.getfixturevalue
Однако вы не можете использовать этот подход, если устройство, которое вы попытка динамической загрузки параметризована.
В качестве альтернативы вы можете найти что-то с помощью pytest_generate_tests. Я не смог заставить себя заглянуть в это многое.