Посетил интересный митап про тестирование от ЭФКО. На митапе было 2 доклада, один из них был про тестирование in general от Александра Макарова. Поскольку, недавно я сам выступал с подобной темой, не могу не отметить гениальности и простоты формулировок.
Вот так просто сформулировано то, на что я потратил минут 10 своего предыдущего доклада. Тесты нужны тогда - когда они экономят деньги.
Поднимались вопросы, которые мы активно обсуждаем у себя в команде.
- 1 тест метод = 1 assert, уж точно для Unit тестов
Вопрос дискуссионный в интернетах, но я тоже придерживаюсь именно такого мнения.
Что это дает?
- Простоту чтения результатов теста
- Возможность эффективно параллелить тесты
- Снижение хрупкости тестов
- Стремление писать более простой код
Например: у вас в корзине товаров есть объект айтем, у которого есть стоимость и размер скидки и объект, который применяет скидочные правила к айтемам. Рассчитывает новую стоимость со скидкой и записывает размер скидки в объект.
Вы тестируете объект, который применяет скидочные правила к айтемам. У вас есть соблазн написать тест, который проверит за один раз и правильность рассчета суммы скидки и то, что размер скидки записался верно в айтем.
$this->assertEquals($item->amount, 550);
$this->assertEquals($item->discount, 10)
Не делайте так. Напишите 2 теста.
- Важность Continius Integration
Команды часто надеются на дисциплину и верят, что тесты будут запускаться руками избегая настраивать CI. Это огромная ошибка. Такого не будет(горьки многолетний опыт).
Докладчик сказал, что лучше написать 1 тест и настроить пайплайн чем 100 и надеяться не продалбывать ручной запуск этих тестов.
Поднимались в докладе и другие темы, например - можно ли жить без тестов и насколько бесчеловечно тестировать софт руками операторов, которые с ним работают.
Второй доклад был про нагрузочное тестирование при помощи Apache Jmeter. Я когда-то пытался запуститьэто все на нашем проекте. Не прижилось, это достаточно дорогая история. Кроме написания тестовых сценариев и настройки ci - тесты должны запускаться на полном зеркале вашей боевой инфраструктуры. Для Ветменеджер это безумно дорого.
Еще у нас есть проблема огромного количества критически важных сценариев в программе и проблемы производительности редко попадают дважды в одну и ту же воронку.
Для проектов, которые могут резко привлекать достаточно много рекламного трафика - это то, что очень нужно. Сначала нужно договориться с заказчиками с требованиями по нагрузке и потом приступать к JMeter.