Главная » Хабрахабр » [Перевод] Вредные советы: как превратить автоматизацию UI-тестов в кошмар

[Перевод] Вредные советы: как превратить автоматизацию UI-тестов в кошмар

Меня зовут Артём, и я занимаюсь автоматизацией тестирования. Привет! Но ведь в тестировании тоже есть свои "плохие советы", и они довольно забавно пересекаются с разработкой. Антипаттерны в разработке — довольно популярная тема. Вашему вниманию! Недавно мне на глаза попалась ироничная статья про антипаттерны в тестировании.

Мы стараемся как можно скорее доказать, что неправы, потому что только таким образом можем развиваться.
Ричард Фейнман

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

Ну, а если вы добрая душа и уважительно относитесь к чужому труду, то можете рассматривать эту статью как набор антипаттернов.

Итак, поехали.

Сборник проклятий

Идентификация

Самая первая ваша задача — сделать идентификацию элементов интерфейса чересчур трудной или совершенно невозможной.

Эмпирическое правило: никаких ID.

C их помощью инструментам автоматизированного тестирования проще всего находить элементы. Никогда не присваивайте элементам интерфейса какие-либо ID. А вот без ID тестирование наверняка провалится. Кроме того, даже при изменении макета интерфейса ID сохраняются и позволяют находить элементы.

Динамические ID

Генерируйте новое значение при каждом отображении представления (view) пользователю. Если вы не можете избавиться от ID, то хотя бы сделайте их динамическими. И тогда все тесты, использующие фиксированные значения ID, будут автоматически сломаны сразу же после записи.

Динамический заголовок приложения

Например: Это прекрасная идея — добавлять время в главный заголовок окна приложения.

Platinum CRM - ACME - December 19, 02:46:23 pm

Представьте, что объекты внутри инструмента автоматизированного тестирования группируются по заголовку окна — тогда каждый объект превратится в отдельную группу. Эта методика может усложнить не только определение элементов интерфейса, но и процесс записи теста.

Время выполнения

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

Есть и другие способы сделать время выполнения совершенно случайным. Подождите!

Неэффективная реализация обработки данных

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

Развёртывание во враждебной среде

Есть большая вероятность, что эти соседние ВМ заберут ресурсы процессора/памяти/диска, когда они вам больше всего нужны. Разверните серверную часть своего решения в виртуальной машине, которая хостится на сервере с кучей других ВМ.

Вспомогательные API

Вы просто не имеете права давать им такую власть. Никогда не реализуйте в своём приложении интерфейсы доступа вроде UI Automation и ARIA, иначе у тестировщиков будет эффективный способ автоматизации взаимодействия с приложением.

Почаще обновляйте макет интерфейса

Вместе с вышеприведёнными советами это просто убьёт тестировщиков. Меняйте макет каждую неделю. Возможно, они даже начнут фантазировать о ручном тестировании, потому что в этом случае они не будут видеть результаты своей работы лежащими в руинах.

Не давайте им шансов

Состояние приложения

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

Хотите перемещаться по меню? Приложение не должно поддерживать альтернативные способы навигации или взаимодействия, вроде сочетаний клавиш. Хотите перейти к другой ячейке? Мышь и только мышь. Короче, вы поняли суть. Только мышь, стрелки на клавиатуре работать не должны.

Логи

Они могут дать информацию о проблемах и содержать подсказки к их исправлению. Не пишите никаких логов.

Кнопки с иконками

В сочетании с отсутствием ID это сделает идентификацию почти невозможной или очень ненадёжной. Используйте кнопки с иконками и ни при каких обстоятельствах не делайте подписи или текстовые подсказки для кнопок.

В заключение

Помните! Чтобы превратить тестирование интерфейса в кошмар, нужно следовать базовым принципам:

  • Сделать ненадёжной идентификацию объектов.
  • Сделать непредсказуемым поведение приложения.
  • Изменять интерфейс так, чтобы это ломало тесты и превращало их в мусор.
  • Приложение должно быть чёрным ящиком для инструментов автоматизированного тестирования.
  • Эффективно пресекайте любые попытки обходов, вроде сочетаний клавиш или анализа логов.

И наконец, если тестировщики попросят сделать что-то, противоречащее этим советам, просто игнорируйте.

Удачи!


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

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] Микросервисы на Go с помощью Go kit: Введение

Эта статья — введение в Go kit. В этой статье я опишу использование Go kit, набора инструментов и библиотек для создания микросервисов на Go. Первая часть в моем блоге, исходный код примеров доступен здесь. Когда вы разрабатываете облачно-ориентированную распределенную систему, ...

Собери свой танк

Мужик собирает танки из кусочков, как лего. Уже собрал 20 штук. («Шейте красное с красным, жёлтое с жёлтым, белое с белым»). Сергей Чибинеев — реаниматолог, он знает как пришить человеку пару оторванных кусочков. В лучших традициях Jagged Alliance и Fallout. ...