- Сообщения
- 502
- Реакции
- 152
В этой статье я хочу обратить внимание на необходимость автоматизированного тестирования ваших приложений...
Конечно я уверен что для большей части посетителей форума эта тема не то что не интересна а попросту не нужна.
В общем если у тебя до сих пор php 5.4 и mysql (не mysqli или PDO), тесты тебе точно не нужны... Все остальные могут читать дальше))
Что же такое автоматизированное тестирование? Тут все просто, это набор методов которые автоматом тестируют твой код.
Ведь мы все сталкивались с проблемой когда меняешь маленькую часть кода, а через день тебе приходят посетители твоего ресурса и говорят что перестала работать например регистрация... Так вот что бы держать все в актуальном и проверенном состоянии и нужны тесты.
Допустим у тебя есть метод который возвращает форму отправки письма. Для проверки нам достаточно написать код ниже:
И все.. Ничего сложного так ведь?
Теперь разберемся что тут вообще происходит:
Теперьминусы сложности:
Но все это с лихвой компенсируется уверенностью что у тебя все всегда работает так как тебе нужно!
Это не гайд как и что делать, просто делюсь опытом как делать хорошо и правильно.
Что в последствии избавит тебя от кучи головной боли...
Главное тут не переусердствовать и соблюдать баланс, тестируя то что нужно тестить, а не гоняя вообще все подряд и тратя годы на разработку))
Конечно я уверен что для большей части посетителей форума эта тема не то что не интересна а попросту не нужна.
В общем если у тебя до сих пор php 5.4 и mysql (не mysqli или PDO), тесты тебе точно не нужны... Все остальные могут читать дальше))
Что же такое автоматизированное тестирование? Тут все просто, это набор методов которые автоматом тестируют твой код.
Ведь мы все сталкивались с проблемой когда меняешь маленькую часть кода, а через день тебе приходят посетители твоего ресурса и говорят что перестала работать например регистрация... Так вот что бы держать все в актуальном и проверенном состоянии и нужны тесты.
Допустим у тебя есть метод который возвращает форму отправки письма. Для проверки нам достаточно написать код ниже:
PHP:
class MailFormTest extends TestCase
{
public function testMailForm()
{
$client = new GuzzleHttp\Client(); // Просто клиент делающий запросы, хочешь юзай Curl
$response = $client->get('http://your_route');
$this->assertSame(200, $response->getStatusCode()); // Сами тесты
$this->assertStringContainsString('form id="mail-form"', $response->getBody());
}
}
И все.. Ничего сложного так ведь?
Теперь разберемся что тут вообще происходит:
- Первым делом мы делаем запрос к своему проекту
- Дальше сравниваем статус ответа (Ведь если ты сломал где то подключение к БД то при правильной настройке у тебя система должна отдать что угодно, но не 200й ответ).
- Но даже если ты дятел и не настроил все как нужно, вторым сравнением мы ищем на странице форму с ID mail-form и точно уверенны что она показывается пользователю...
Теперь
- Тестов у тебя будет очень много... Порой на один метод тестируемого класса нужно писать 5-10 тестов (Может ли авторизированный юзер сделать это, может незалогиненный юзер получить результат, что если передать не правильные параметры в форму и т.д.)
- За счет написания тестов увеличивается код и время на его разработку. Ведь раньше ты писал 1 метод и радовался жизни, а теперь нужно написать его и пачку разных тестов к нему (впрочем тут поможет наследование и некая шаблонизация, в итоге ты просто передашь массив из нужных урлов, статусов ответа и контента который должен отобразиться на странице)
- Изменив что то на странице (например форма теперь называется как то по другому), тебе нужно править и тесты под это дело
- Нужно подключать composer и его autoloader
Но все это с лихвой компенсируется уверенностью что у тебя все всегда работает так как тебе нужно!
- Ты можешь тестировать классы и сервисы а не только роуты (Но тут немного сложнее и возможно потребуется моккинг)
- Совсем не обязательно покрывать тестами весь свой код, можно покрыть самую важную часть
- Ты всегда знаешь что у тебя отвалилось и при добавленнии новой фичи ты всегда уверен что она работает так как ты хотел и никак иначе
- Безопасность. Да да, тебе ничего не мешает написать тест на SQL инекцию или какой другой хак
- Ты даже можешь замерять время выполнения и сказать что оно должно быть меньше N секунд. Если это не так, ты сразу узнаешь что в коде что то не так...
- Можно тестировать фронт, есть куча либ типа Selenium позволяющих убедиться что каждый элемент на странице на своем месте и ничего не съехало
- Можно использовать фейкеры, когда у тебя автоматом создается модель с уже заполненными, нужными тебе параметрами
Это не гайд как и что делать, просто делюсь опытом как делать хорошо и правильно.
Что в последствии избавит тебя от кучи головной боли...
Главное тут не переусердствовать и соблюдать баланс, тестируя то что нужно тестить, а не гоняя вообще все подряд и тратя годы на разработку))