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