Рубрика: "Находки из Python"
Как вы думаете, что делает команда:
Ответ не очевиден (для меня): выводит 20 наиболее медленных тестов.
Вот так бы было более очевидно:
Второй вопрос: что меня в этом больше всего расстраивает?)
Ответ: то, что ни в Maven, ни в Gradle тестовых плагинах ничего такого нет. Хотя можно легко завайбкодить с помощью AI.
Если быть точным: в Gradle легко, в Maven придется плагин или внешний скрипт писать.
P.S. Еще такой же паттерн использует PostgreSQL -
#python #junit #unit_tests #python_gems
Как вы думаете, что делает команда:
uv run pytest --durations=20 ?Ответ не очевиден (для меня): выводит 20 наиболее медленных тестов.
Вот так бы было более очевидно:
uv run pytest --durations-min=1.0Второй вопрос: что меня в этом больше всего расстраивает?)
Ответ: то, что ни в Maven, ни в Gradle тестовых плагинах ничего такого нет. Хотя можно легко завайбкодить с помощью AI.
Если быть точным: в Gradle легко, в Maven придется плагин или внешний скрипт писать.
P.S. Еще такой же паттерн использует PostgreSQL -
FROM pg_stat_statements
ORDER BY total_exec_time DESC, а еще есть slow query log с фильтрацией по предельной длительности#python #junit #unit_tests #python_gems
И снова рубрика "Находки из Python".
Как вы думаете, что делает вот такая конструкция?
Она "фэйлит" прогон, если тест пройден)
Зачем это нужно - если из-за частичного рефакторинга некий код перестал работать. И нужно отследить момент починки в следующих релизах.
Т.е. как только чиним код - тест начинает падать, мы снимаем xfail.
Если тест просто "скипнуть" - это можно забыть сделать. Плюс если упала группа тестов - то ее можно пометить одинаковым описанием и убедится, что починились все. Стандартного функционала для этого нет, но можно поиском по проекту.
Видится, что полезно в плане контроля тестов.
Есть конечно радикальный вариант - вообще избегать отключения тестов, но жизнь - сложная штука).
Отдельно про параметр strict.
Если его поставить в false - получаем тест, который не ломает запуск ни при успешном прогоне, ни при падении.
Зачем это может быть нужно?
Для flaky тестов, которые невозможно починить здесь и сейчас.
Тут конечно у меня вопросики, т.к. такое действие - прямой путь к тому, что про flaky тест мы просто забудем.
А в итоге контроль над тестовым набором, наоборот, ухудшится.
Я сразу стал искать - есть ли аналог в Java?
В JUnit из коробки нет, иначе бы этого поста не было)
Но есть в JUnit Pioneer:
Это аналог strict режима. Не strict режима нет, что IMHO к лучшему.
Обе аннотации позволяют задать исключения, с которыми тест должен упасть.
Python вариант также позволяет задать condition:
В Python интерпретатор есть в runtime, в отличие от Java (там в runtime только компилятор из байт-кода в нативный), поэтому это проще сделать.
Мой вердикт - штука полезная.
#python #java #python_gems #unit_tests #junit
Как вы думаете, что делает вот такая конструкция?
@pytest.mark.xfail(strict=True, reason = "будет исправлено в задаче TASK-100")
def test_function():
Она "фэйлит" прогон, если тест пройден)
Зачем это нужно - если из-за частичного рефакторинга некий код перестал работать. И нужно отследить момент починки в следующих релизах.
Т.е. как только чиним код - тест начинает падать, мы снимаем xfail.
Если тест просто "скипнуть" - это можно забыть сделать. Плюс если упала группа тестов - то ее можно пометить одинаковым описанием и убедится, что починились все. Стандартного функционала для этого нет, но можно поиском по проекту.
Видится, что полезно в плане контроля тестов.
Есть конечно радикальный вариант - вообще избегать отключения тестов, но жизнь - сложная штука).
Отдельно про параметр strict.
Если его поставить в false - получаем тест, который не ломает запуск ни при успешном прогоне, ни при падении.
Зачем это может быть нужно?
Для flaky тестов, которые невозможно починить здесь и сейчас.
Тут конечно у меня вопросики, т.к. такое действие - прямой путь к тому, что про flaky тест мы просто забудем.
А в итоге контроль над тестовым набором, наоборот, ухудшится.
Я сразу стал искать - есть ли аналог в Java?
В JUnit из коробки нет, иначе бы этого поста не было)
Но есть в JUnit Pioneer:
@Test
@ExpectedToFail("будет исправлено в задаче TASK-100")
void testFunction() {
Это аналог strict режима. Не strict режима нет, что IMHO к лучшему.
Обе аннотации позволяют задать исключения, с которыми тест должен упасть.
Python вариант также позволяет задать condition:
@pytest.mark.xfail(condition="not config.getvalue('db')")
def test_function(): ...В Python интерпретатор есть в runtime, в отличие от Java (там в runtime только компилятор из байт-кода в нативный), поэтому это проще сделать.
Мой вердикт - штука полезная.
#python #java #python_gems #unit_tests #junit
🤩1