Вредные советы: как превратить автоматизацию UI-тестов в кошмар |
16.08.2018 00:00 |
Оригинальная публикация: http://habr.com/company/badoo/blog/359238/ Оригинал статьи: http://www.inflectra.com/Ideas/Entry/558.aspx Перевод: Артём, Senior QA Engineer, Badoo Привет! Меня зовут Артём, и я занимаюсь автоматизацией тестирования. Антипаттерны в разработке — довольно популярная тема. Но ведь в тестировании тоже есть свои "плохие советы", и они довольно забавно пересекаются с разработкой. Недавно мне на глаза попалась ироничная статья про антипаттерны в тестировании. Вашему вниманию! Мы стараемся как можно скорее доказать, что неправы, потому что только таким образом можем развиваться. Есть много способов усложнить жизнь командам автоматизации тестирования. Если вы разработчик или системный архитектор, и недолюбливаете кого-то из тестировщиков, то эта статья — для вас. Вы найдете в ней сокровенное знание, вдохновившись которым, вы научитесь делать интерфейс любого приложения практически непригодным для тестирования. Ну, а если вы добрая душа и уважительно относитесь к чужому труду, то можете рассматривать эту статью как набор антипаттернов. Итак, поехали. Сборник проклятийИдентификацияСамая первая ваша задача — сделать идентификацию элементов интерфейса чересчур трудной или совершенно невозможной. Эмпирическое правило: никаких ID. Никогда не присваивайте элементам интерфейса какие-либо ID. C их помощью инструментам автоматизированного тестирования проще всего находить элементы. Кроме того, даже при изменении макета интерфейса ID сохраняются и позволяют находить элементы. А вот без ID тестирование наверняка провалится. Динамические IDЕсли вы не можете избавиться от ID, то хотя бы сделайте их динамическими. Генерируйте новое значение при каждом отображении представления (view) пользователю. И тогда все тесты, использующие фиксированные значения ID, будут автоматически сломаны сразу же после записи. Динамический заголовок приложенияЭто прекрасная идея — добавлять время в главный заголовок окна приложения. Например:
Эта методика может усложнить не только определение элементов интерфейса, но и процесс записи теста. Представьте, что объекты внутри инструмента автоматизированного тестирования группируются по заголовку окна — тогда каждый объект превратится в отдельную группу. Время выполненияПри обновлении данных длительность открытия диалога или загрузки страницы может быть непредсказуемой. Это заставит инженеров по автоматизации использовать в тестах много выражений синхронизации. Подождите! Есть и другие способы сделать время выполнения совершенно случайным. Неэффективная реализация обработки данныхЭто очень просто. При реализации ПО не думайте об объеме данных, проверяйте код с помощью маленьких баз данных и в одном-единственном окружении. Гарантирую, что при реальной нагрузке ваша программа будет отвечать медленно. Развёртывание во враждебной средеРазверните серверную часть своего решения в виртуальной машине, которая хостится на сервере с кучей других ВМ. Есть большая вероятность, что эти соседние ВМ заберут ресурсы процессора/памяти/диска, когда они вам больше всего нужны. Вспомогательные APIНикогда не реализуйте в своём приложении интерфейсы доступа вроде UI Automation и ARIA, иначе у тестировщиков будет эффективный способ автоматизации взаимодействия с приложением. Вы просто не имеете права давать им такую власть. Почаще обновляйте макет интерфейсаМеняйте макет каждую неделю. Вместе с вышеприведёнными советами это просто убьёт тестировщиков. Возможно, они даже начнут фантазировать о ручном тестировании, потому что в этом случае они не будут видеть результаты своей работы лежащими в руинах. Не давайте им шансовСостояние приложенияВаше приложение не должно никак показывать своё текущее состояние и что оно делает. Не разглашайте ничего, что можно использовать для понимания происходящего или проверки корректности поведения приложения. Никаких панелей состояния, никаких навигационных цепочек. Не давайте возможности понять, что приложение сейчас чем-то занято. Навигация с помощью клавиатурыПриложение не должно поддерживать альтернативные способы навигации или взаимодействия, вроде сочетаний клавиш. Хотите перемещаться по меню? Мышь и только мышь. Хотите перейти к другой ячейке? Только мышь, стрелки на клавиатуре работать не должны. Короче, вы поняли суть. ЛогиНе пишите никаких логов. Они могут дать информацию о проблемах и содержать подсказки к их исправлению. Кнопки с иконкамиИспользуйте кнопки с иконками и ни при каких обстоятельствах не делайте подписи или текстовые подсказки для кнопок. В сочетании с отсутствием ID это сделает идентификацию почти невозможной или очень ненадёжной. В заключениеПомните! Чтобы превратить тестирование интерфейса в кошмар, нужно следовать базовым принципам:
И наконец, если тестировщики попросят сделать что-то, противоречащее этим советам, просто игнорируйте. Удачи! |