Pytest:获取所有测试的地址

时间:2016-10-28 22:35:21

标签: python pytest

当我运行pytest --collect-only以获取我的测试列表时,我会以<Function: test_whatever>之类的格式获取它们。但是,当我使用pytest -k ...运行特定测试时,我需要输入&#34;地址&#34;测试的格式为foo::test_whatever。是否有可能以-k采用的相同格式获取所有测试的所有地址列表?

3 个答案:

答案 0 :(得分:2)

用法不是您指定的用法。从文档: http://doc.pytest.org/en/latest/usage.html

pytest -k stringexpr  # only run tests with names that match the
                      # "string expression", e.g. "MyClass and not method"
                      # will select TestMyClass.test_something
                      # but not TestMyClass.test_method_simple

所以你需要传递给'-k'的是你要检查的所有可调用函数中包含的字符串(你可以在这些字符串之间使用逻辑运算符)。对于您的示例(假设所有defs都以foo::为前缀:

pytest -k "foo::"

答案 1 :(得分:2)

在conftest.py中,您可以覆盖&#39;集合&#39;钩子打印有关收集的测试项目的信息&#39;。

您可以引入自己的命令行选项(如--collect-only)。如果指定了此选项,则打印测试项目(以您喜欢的任何方式)并退出。

下面的示例conftest.py(在本地测试):

import pytest

def pytest_addoption(parser):
    parser.addoption("--my_test_dump", action="store", default=None,
        help="Print test items in my custom format")

def pytest_collection_finish(session):
    if session.config.option.my_test_dump is not None:
        for item in session.items:
            print('{}::{}'.format(item.fspath, item.name))
        pytest.exit('Done!')

有关pytest钩子的更多信息,请参阅:

http://doc.pytest.org/en/latest/_modules/_pytest/hookspec.html

答案 2 :(得分:0)

如果使用-k开关,则无需指定用冒号分隔的完整路径。如果路径是唯一的,则可以仅使用路径的一部分。仅当不使用-k开关时,才需要完整的测试路径。

例如

pytest -k "unique_part_of_path_name"

对于pytest tests/a/b/c.py::test_x,您可以使用pytest -k "a and b and c and x"

您可以对-k开关使用布尔逻辑。

顺便说一句,pytest --collect-only确实在文件的测试名称上方的<Module行中给出了测试的文件名。