вторник, 27 марта 2018 г.

Поле добавили, а оно не заполняется

Пример из жизни о том, как важно проводить интеграционные тесты. Взять бизнес-смысл задачи и проверить, что он работает. Весь сценарий целиком, а не только отдельные кусочки.

Поставлена задача — добавить новое поле в карточку. Это простая задача, ее даже тестровщики у нас умеют делать. Добавил в java-класс, в модель, указал правила... Есть отдельный чек-лист проверки: что вручную глянуть, что по коду, а что в автотест добавить. Все просто.

Но фишка в том, что поле не простое. Мы добавляем «ФИО руководителя», которое будет заполняться по данным из ЕГРЮЛ. Тут хитрая штука: чтобы обогатить карточку, нужно объединить ее с карточкой из егрюл. Но объединять можно только карточки одного типа (ЮЛ с ЮЛ, ЕГРЮЛ с ЕГРЮЛ итд). Поэтому по данным ЕГРЮЛ создается его зеркальная копия:
И вот это зеркало уже объединяется с нашей карточкой → профит, данные получили и свои, и «официальные».
Так вот, процесс создания зеркала и обогащение карточки по нему уже проверены, автотесты написаны. Все работает. Значит, нет смысла дублировать проверки. Достаточно выполнить стандартный чек-лист добавления поля, и все.

Однако можно не трогать автотесты, а вот вручную пройтись по сценарию — надо. Если прошлись и убедились, что все окнорм, то тогда да, автотесты делаем «как будто просто добавили поле». Если что-то пошло не так, ищем причины, разбираемся, каких тестов не хватает.

Собственно, я могла бы быстро закрыть задачу, но закопалась в ручное воспроизведение. Это ж надо вспомнить, как «честный» ЕГРЮЛ загрузить, найти там карточку, где заполнено ФИО руководителя, сделать похожую на нее, запустить задачу создания зеркала, проверить получившийся результат...

В итоге карточки объединились, но «ФИО руководителя» пустое. Ха-ха! Все-таки не работает. Может, проблема при объединении, данные ЕГРЮЛ проигрывают? Хм, нет. Информация не попала в зеркало. А почему? А потому что это поле не зеркалилось раньше, вот и все...

Если бы я просто проверила добавление нового поля, то сделала бы вывод, что все работает. Поле есть, оно заполняется, если мы сами прислали значение. Все правила настроены по ТЗ. Вот только в реале поле не будут заполнять (по крайней мере, пока), будут ждать обогащения. А обогащения нет, так как поле не заполняется в зеркальной копии егрюл.

Нашли, поправили. Самое главное здесь — сделать правильный вывод. Пополнить чек-лист проверки, чтобы в следующий раз помнить о подводных камнях функционала.

И, конечно, всегда надо не тупо тестировать по ТЗ, «Добавили новое поле? Ок, вот чек-лист, все работает», а читать, ради чего оно добавляется, в каких сценариях участвует — эти сценарии и проверять. Так можно найти баг в смежном функционале или просто обнаружить, что по отдельности все работает, а вот вместе — увы...

Комментариев нет:

Отправить комментарий