Авто-тесты интерфейсов. Best practices 16.03.2016

Частой распространённой ошибкой при автоматизированном тестировании интерфейсов приложений независимо от используемого инструмента является практически полное отсутствие повторного использования кода. Каждый тест представляет из себя гигантский листинг последовательных действий, результатом которых становится не только проверка определённого тестового кейса, но и ряд вспомогательных операций для перевода приложения в состояние, в котором возможно выполнение этого кейса.

Рассмотрим простой пример. Допустим, нам нужно протестировать цепочку оформления заказа в интернет магазине. Чаще всего Приложение нельзя привести в нужное состояние вот так из коробки, поэтому тестировщик сначала добавит несколько товаров в корзину и оформит заказ. Авто-тест, воспроизводящий подобный сценарий должен повторить все эти операции. Очевидно, что ценным непосредственно для теста будет только код, описывающий действия пользователя в корзине. Остальной код носит исключительно вспомогательный характер. Допустим теперь, что оформить заказ можно как зарегистрированным, так и незарегистрированным пользователем. Т.е. Теперь у нас есть кейс, в котором мы добавляем товар в корзину, авторизуемся, и оформляем заказ, а тест, его реализующий, теперь содержит уже два вспомогательных сценария — добавления в корзину и авторизации. Именно эти сценарии — отличные кандидаты на переиспользование, ведь добавлять товары и авторизовываться нам может потребоваться и для реализации других тестовых кейсов. Теперь в случае изменения последовательности действий, необходимых, например, для того, чтобы авторизоваться, нам потребуется поправить только наш сценарий авторизации.

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

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

by 16.03.2016