Когда я запускаю pytest --collect-only
, чтобы получить список моих тестов, я получаю их в формате, таком как <Function: test_whatever>
. Однако, когда я использую pytest -k ...
для запуска определенного теста, мне нужно ввести "адрес" теста в формате foo::test_whatever
. Можно ли получить список всех адресов всех тестов в том же формате, что и -k
?
Pytest: получение адресов всех тестов
Ответ 1
В conftest.py вы можете переопределить крючки коллекции, чтобы распечатать информацию о собранных тестовых "элементах".
Вы можете ввести свой собственный вариант командной строки (например, --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 hooks см. ниже:
http://doc.pytest.org/en/latest/_modules/_pytest/hookspec.html
Ответ 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::"
Ответ 3
Если вы используете переключатель -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
чуть выше тестовых имен файла.