将标签从 CLI 传递到 Pytest-bdd 并执行特定场景

Y52*_*288 4 fixtures pytest python-3.x python-requests

标签(烟雾/回归)从 CLI 传递并在 conftest.py 中解释以执行满足标签的场景。

我在这里查看了 pytest-bdd 文档 ,但未能找到连接。

场景大纲有:(因为Python装饰器可以堆叠)

@pytest.mark.smoke
Scenario Outline: "VALID" Test

@pytest.mark.smoke
@pytest.mark.regression
  Scenario Outline: "INVALID" Test

@pytest.mark.regression
  Scenario Outline: "MIXED" Test
Run Code Online (Sandbox Code Playgroud)

测试.py

def pytest_bdd_apply_tag(tag, function):    
    if 'smoke' not in tag:  #what should I use to take values from CLI and execute those
        marker = pytest.mark.skip # skips scenario where 'smoke' is not marked
        marker(function)
        return True
    return None
Run Code Online (Sandbox Code Playgroud)

conftest.py 中的上述代码会跳过所有场景。CLI 输入:

pytest --env='qa' -m 'smoke'

其中pytest_addoption用于--env='qa'pytest_bdd_apply_tagfor -m

当我通过烟雾时,我们只想执行标记有烟雾(有效和无效)的场景;当我通过回归时标记回归(无效和混合)的场景以及当我不通过 -m 选项在 CLI 中传递任何参数时默认冒烟的场景。

Y52*_*288 5

不好的是,我想知道我是如何被文档中提到的带有场景标记行的 pytest 标记误导的。

我对功能文件所做的更改是

@smoke
Scenario Outline: "VALID" Test

@smoke @regression
  Scenario Outline: "INVALID" Test

@regression
  Scenario Outline: "MIXED" Test
Run Code Online (Sandbox Code Playgroud)

我已经pytest_bdd_apply_tag从conftest.py 中删除了该方法。

在命令行中给出这个对我有用

pytest -m "regression" --env="uat"
Run Code Online (Sandbox Code Playgroud)