这是我的第一个问题,请耐心等待
我正在实现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 *。
我尝试了import ui_shared.py
和from ui_shared.py import common_step
,其中common_step
是我要导入的步进函数,但出现错误:
StepDefinitionNotFoundError: Step definition is not found: Given "common function".
我发现了一个相关的问题:
Behave: How to import steps from another file?
以及其他一些命令,其中大多数命令是将步骤导入到我已经完成的通用步骤文件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
上面的命令应该可以正常工作,但是如果import方法被更改,则pytest失败,并显示E StepDefinitionNotFoundError
。
我认为我正在寻找的是一种导入ui_shared.py
中定义的所有名称的方法,除了我不使用的方法。
基本上,如何使用不带*的from file import
进行导入,并允许我的ui_file.py
使用ui_shared.py
中的常用步骤?
答案 0 :(得分:1)
在您的 conftest.py
pytest_plugins = [
"lib.ui_shared"
]
这样一来,ui_shared.py
中的所有装置或 pytest-bdd 步骤都可用于其他所有文件,就像它在 conftest.py
中一样
注意
lib 必须是一个包,这意味着 lib 文件夹内应该有一个 __init__.py
文件
答案 1 :(得分:0)
您可以尝试以下操作:
from .ui_file import *
那是我为我的项目写的:
from .devices_steps import *