Pytest-BDD: импорт общих шагов - PullRequest
       8

Pytest-BDD: импорт общих шагов

0 голосов
/ 11 сентября 2018

Это мой первый вопрос о ТАК, поэтому, пожалуйста, потерпите меня,

Я работаю над реализацией pytest-bdd и пытаюсь импортировать шаги использования из другого файла с именем ui_shared.py.

В настоящее время мой каталог структурирован:

proj/lib/ui_file.py
proj/lib/ui_shared.py
proj/tests/test_file.py
proj/features/file.feature

Pytest-bdd может распознавать шаги из ui_shared.py и выполнять тест до тех пор, пока ui_file.py импортирует с:

from ui_shared import *

но я бы хотел не использовать импорт *.

Я пробовал import ui_shared.py и from ui_shared.py import common_step, где common_step - это функция шага, которую я хотел бы импортировать, и я получаю ошибку:

StepDefinitionNotFoundError: Step definition is not found: Given "common function".

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

Вот код для ui_shared.py:

#!/usr/bin/python

import pytest
from pytest_bdd import (
    scenario,
    given,
    when,
    then
)

@pytest.fixture(scope="function")
def context():
    return{}

@given('common step')
def common_step(input):
    #some method

Вот другой соответствующий код:

В file.feature:

Scenario Outline: ui_file
    Given common step
    And another given step
    When some step
    Then last step

В test_file.py:

#!/usr/bin/python

@pytest.fixture
def pytestbdd_strict_gherkin():
    return False

@scenario('proj/features/file.feature', 'ui_file')
def test_ui_file():
    """ui_file"""

А в ui_file.py:

import pytest
from pytest_bdd import (
    scenario,
    given,
    when,
    then
)

from ui_shared import * #This is what I am trying to change

@given('another given step')
def another_given_step(input)
    #some method

@when('some step')
def some_step(input)
    #some method

@then('last step')
def last_step(input)
    #some method

Вышеуказанное должно работать как есть, но если метод импорта будет изменен, произойдет сбой pytest с E StepDefinitionNotFoundError.

Я думаю, что я ищу способ импортировать все имена, определенные в ui_shared.py, за исключением методов, которые я не использую.

В основном, как мне импортировать с помощью from file import без * и разрешить моему ui_file.py использовать общие шаги с ui_shared.py?

...