python - 如何确保只有在 pytest 中明确要求时才运行带有标记的测试?

标签 python pytest

我用适当的标记标记了一些测试。如果我运行 pytest,默认情况下它们会运行,但我想默认跳过它们。我知道的唯一选择是在调用 pytest 时明确说“不是标记”,但我希望它们不会默认运行,除非在命令行明确询问标记。

最佳答案

Control skipping of tests according to command line option 中的示例稍作修改:

# conftest.py

import pytest


def pytest_collection_modifyitems(config, items):
    keywordexpr = config.option.keyword
    markexpr = config.option.markexpr
    if keywordexpr or markexpr:
        return  # let pytest handle this

    skip_mymarker = pytest.mark.skip(reason='mymarker not selected')
    for item in items:
        if 'mymarker' in item.keywords:
            item.add_marker(skip_mymarker)

示例测试:

import pytest


def test_not_marked():
    pass


@pytest.mark.mymarker
def test_marked():
    pass

使用标记运行测试:

$ pytest -v -k mymarker
...
collected 2 items / 1 deselected / 1 selected
test_spam.py::test_marked PASSED
...

或者:

$ pytest -v -m mymarker
...
collected 2 items / 1 deselected / 1 selected
test_spam.py::test_marked PASSED
...

没有标记:

$ pytest -v
...
collected 2 items

test_spam.py::test_not_marked PASSED
test_spam.py::test_marked SKIPPED
...

关于python - 如何确保只有在 pytest 中明确要求时才运行带有标记的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374588/

相关文章:

从目录在 SQL 中以 Pythonic 方式上传 CSV 文件,路径错误

python - 是否可以使用 pytest 测试 while True 循环(我尝试超时)?

Python Mock - return_value - 获取 "real"返回值

python - pytest 发现错过了装饰方法

python - 计算由长度不等的二维索引列表给出的 DataFrame 行组的平均值

python - 如何使用 Pymongo 将两个字段的值传递到函数中?

python - 使用 matplotlib 和 python 以非常低的分辨率存储图像的解决方法

python - 如何在 Windows 上使用 python -c?

python - 创建可重用的 py.text 装置

python - 使用不同版本的 fixture 运行一项测试