ШБР 2023 — Тестирование (Python)

preview_player
Показать описание
На лекции поговорим о том, зачем нужны тесты и как их писать. Рассмотрим способы улучшения качества кода и избавления его от багов с помощью различных инструментов: от линтеров до E2E-тестов. Вы узнаете или вспомните, как использовать flake8, mypy, pytest, fixture, coverage, mock, factory boy, faker и многое другое. В конце посмотрим на примере, как добавить фичу в готовое API и отловить баги с помощью тестов.
Лектор: Сергей Бочкарев, Тимлид бэкенд-разработки Лицея Академии Яндекса
Рекомендации по теме
Комментарии
Автор

00:02:48 Начало
00:05:06 О чем сегодня поговорим

Первая часть
00:05:59 Зачем писать тесты
00:09:54 Типы тестов E2E, Integration, Unit, Static Analysis
00:10:40 Статические анализаторы - линтеры
00:11:50 pep8 aka pycodestyle
00:13:32 flake8
00:13:46 Плагины для flake8
00:15:12 pylint
00:16:27 Форматтеры
00:17:00 Black форматтер
00:19:12 yapf форматтер
00:19:45 Аннотации типов
00:24:08 pyannotate - авто Аннотации
00:25:29 Вопросы от зрителей
00:25:53 Вопрос 1: В Яндексе пользуются какие-то конкретными IDE или каждый выбирает под себя?
00:27:16 Впорос 2: А стоит ли указывать аннотацию для переменных?

Вторая часть
00:28:55 Unit-тесты
00:30:09 Как написать unit-тест?
00:33:41 Как проверять код через assert?
00:37:20 Почему pytest?
00:38:23 Пример вывода ошибки в pytest
00:39:34 Как работает pytest под капотом?
00:40:47 Декораторы pytest: raises, xfail, skipif
00:41:06 Когда использовать raises?
00:42:05 Когда использовать xfail?
00:42:51 Когда использовать skip и skipif?
00:43:51 Полезные опции в pytest.
00:46:23 Что такое fixture?
00:48:37 Уровни фикстуры, scope: function, class, module, package, session
00:49:53 Наследование фикстур
00:51:29 Как не надо писать фикстуры
00:52:34 Где располагаются фикстуры? conftest.py
00:53:06 Плагины для pytest
00:56:52 Покрытие тестов
00:57:37 Нужно ли добиваться 100% покрытия тестов?
00:58:29 Вопросы от зрителей

Третяя часть
00:59:12 Параметризация тестов
01:00:28 Плохой пример параметризации тестов
01:01:49 Параметризация для ленивых - hypothesis
01:04:50 Как тестировать асинхронный код? pytest-asyncio
01:10:06 Unit-тесты
01:11:03 API-тесты
01:12:50 Автоматизация асинхронного тестирования. Бибилотека asynctest.
01:13:48 Про интеграционные тесты
01:14:09 Первый способ тестирования: честный
01:15:42 Второй способ тестирования: mock - объекты-пустышки
01:17:10 Положительные и отрицательные примеры применения Mock
01:19:51 Mock: Патчим методы
01:21:57 Mock: Патчим библиотеки
01:22:44 Тесты завязанные на времени: freezegun
01:23:21 Как мокать сложные api? vcr
01:26:49 Вопросы от зрителей
01:27:10 Вопрос 1: Начиная с какого грейда в Яндексе бэкенд разработчик должен уметь покрывать код тестами?
01:29:16 Вопрос 2: Как корректно делить асинхронный и синхронные тесты?
01:30:30 Вопрос 3: Нормально ли прогонять тесты на предзаполненной бд тестовыми данными или бд желательно заполннять фикстурой?
01:33:12 Вопрос 4: Часто ли приходится переписывать тесты?

Четвёртая часть
01:36:25 Генерируем данные для тестов: faker, factory_boy
01:39:43 Как заполнить БД данными для тестов?
01:40:30 factory boy
01:42:31 Что рассмотерли в этом видео?
01:42:54 Какие ещё бывают тысты?
01:43:09 Что такое smoke тесты?
01:44:01 Что такое регрессионные тесты?
01:44:11 Про остальные тесты

Советы
01:44:45 Полезные мысли
01:44:55 Совет 1: Не мокайте весь сервис
01:45:43 Совет 2: Не пишите теста завязанные на сеть или рандом
01:47:08 Совет 3: Не старайтесь писать тесты на 100%-ное покрытие
01:48:08 Совет 4: Не нужно бросаться писать тесты для всего
01:50:00 Совет 5: Ловите лишние запросы
01:51:51 Совет 6: Используйте параметризацию где много условий
01:52:21 Совет 7: Разбивайте тесты по группам
01:54:11 Совет 8: Пишите простые тесты

Вопросы от зрителей
01:57:11 Вопрос 1: Как понять что тест написан плохо или несоответствует проекту?
02:01:19 Вопрос 2: Можно ли писать тесты с помощью нейросетей?

exynil