Использование Скриншотов Для Тестирования

Написано по просьбе соседней темы - Как мы тестируем поиск в Яндекс.

Тестирование блоков результатов на основе снимков экрана

Использование скриншотов для тестирования



История о глубоком рефакторинге.

В нашем приложении был один модуль, реализованный еще на заре бизнеса.

Модуль был реализован с использованием шаблонов, отличных от других модулей, полностью использовал глобальные переменные и состоял из более чем сотни файлов JavaScript, тесно связанных друг с другом.

Малоизвестный фреймворк, на котором основан модуль, больше нигде не использовался.

В результате исправление ошибок или добавление нового функционала заняло у команды в 2-3 раза больше времени по сравнению с другими модулями.

В связи с предстоящими изменениями функционала возникла острая необходимость рефакторинга этого достаточно большого модуля.

Юнит-тестирование в данном случае не подходило, потому что.

Модуль изменился чуть менее чем полностью.

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

Чтобы отслеживать визуальные изменения, во время тестов было решено делать скриншоты.

Хороший фантомы позволяет это легко сделать :

  
   

page.render('test0001-after-login.png');

Было написано достаточное количество тестов, покрывающих функционал в известном нам объеме.

Как выяснилось позже, мы недостаточно глубоко разбирались :) В ходе этих тестов было сгенерировано несколько сотен скриншотов.

Очевидно, что сравнивать картинки между собой – занятие совершенно неблагодарное.

Это необходимо сделать автоматически.

В одном из своих предыдущих проектов я реализовал на Python ряд скриптов, манипулирующих картинками (вырезание, склеивание, поиск областей, наложение картинок друг на друга и т. д.) и был готов использовать его и для этой задачи.

Все произошло без изобретения велосипедов.

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

Пример вызова:

compare.exe -metric AE shots/test-002_opentree.png reference/test-002_opentree.png diff-002.png 2>&1

Делаем свежий скриншот, сравниваем его с эталонным, выводим на экран текстовую информацию, а графическую информацию сохраняем в файл для ручного просмотра деталей.

Трудно отличить эти два скриншота:

Использование скриншотов для тестирования



Использование скриншотов для тестирования

А вот когда разница выделена, то все совершенно очевидно — у одного блока граница сплошная, а не пунктирная:

Использование скриншотов для тестирования

Первые две фотографии сделаны с помощью теста.

phatomjs , а последнее - результат работы сравнивать .

Часть информации размыта, потому что.

У меня нет официального разрешения на публикацию интерфейса нашей программы, даже если он устарел.

Последний штрих пера — скрипт poweshell, который сравнивает папку со свежими скриншотами и папку с эталонными изображениями, а после сравнения убивает те, которые не представляют интереса.

Сценарий можно легко преобразовать в более независимый от платформы язык.

Не забудьте просмотреть скрипт перед его запуском из командной строки.

Windows по умолчанию не разрешает запуск неподписанных скриптов.

Что с этим делать написано в шапке.

Скрипт здесь - обнаружитьChanges.ps1 ПС.

прошу прощения за дезинформация об использовании Python для решения этой проблемы.

Теги: #тестирование приложений #разработка приложений #рефакторинг #разработка веб-сайтов #тестирование ИТ-систем

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.