Уровень 16
Автоматизированное тестирование
Что такое автоматизация? Наверное, когда робот работает, а человек отдыхает


VS
Робот запускает тест
Робот анализирует результат
Робот документирует ошибки
Человек отдыхает!

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

Цели автоматизации
Основными задачами автоматизации тестов является:
-
Значительное сокращение времени выполнения повторяющихся тестовых операций (regression testing)
-
Качественное тестирование производительности, Web приложений. Степень надежности автотестов намного превышает ручные проверки и полностью исключает эффект пестицида.
-
Единственно возможный способ тестирования нагрузки.
-
Оптимизация тестирования: перераспределение ресурсов отдела тестирования (автоматизация позволят значительно увеличить объемы тестирования силами той же команды).
Критерии успешности автоматизации на проекте
Наличие данных критериев, указывает на степень полезности авто тестов на вашем проекте:
-
Долгосрочный проект. Вы знаете, что проект будет развиваться год и более, а значит будет много регрессионного тестирования.
-
Формализованный проект (наличие тест плана, наборов тест кейсов)
-
Необходимость большого числа итераций (повторений кейсов от релиза к релизу)
Тестовый скрипт
Тестовый скрипт – это логически законченная часть кода, сохраненная в отдельном файле и являющаяся программной реализацией конкретного тест-кейcа. Важно понять, что тестовый скрипт это воплощение тестового сценария в какой-либо среде программирования/автоматизации.
Способы создания тестового скрипта:
1) Работа «тестового драйвера» - с помощью Playback/Record тулзовин как: Selenium IDE, Katalon Studio, Testim IO и другие
2) Создание сценариев с нуля с помощью языка программирования высокого уровня и тестовго фреймворка

Роботы всегда готовы тебе помочь, главное обучи нас, запрограммируй мы сделаем, все то попросишь!
Основные трудности автоматизации тестирования ПО:
-
Необходимость постоянного обновления тестовых скриптов
Применимо к веб тестированию, каждый раз, когда программисты будут изменять селекторы (имена классы элементов в DOM), тесты необходимо исправлять, даже если изменения не видимы на интерфейсе. В отличии от ручных сценариев.
-
Интерпретация и анализ результатов тестов
Как вы уже поняли из предыдущего практического задания, анализ результатов тестов, также отдельная работа, которая обычно занимает до 1 дня для команды при выполнении регрессионного цикла проверок.
-
Автоматизация применима только в хорошо формализованной среде.
У вас на проекте должна быть качетсвенная документация для поддержки автотетстов.
Основные свойства, которыми должна авто-тестирования
-
Наличие специального хранилища тестов, позволяющего работать в многопользовательском режиме, и проводить версионный контроль сделанных изменений, так как тесты подвержены частым изменениям (Система контроля версий как Git или SVN)
-
Наличие центрального хранилища тестовых ресурсов.
-
Наличие системы управления тестовыми ресурсами.
-
Наличие системы функционального автономного тестирования
-
Наличие средств построения отчетов и количественной оценки качества текущей версии продукта.
-
Наличие системы распределения процесса тестирования.
Лаборатория автоматизированного тестирования
Под лабораторией автоматизации имеется в виду настроенная система по запуску и анализу результатов тестов. Над ее созданием должны потрудится: системный администратор, архитектор автоматизированных систем, проектировщики тестов, авто-тестировщики (разработчики автоматизированных сценариев). И сегодня вы выступите в роли проектировщиков автоматизированных сценариев. Давайте рассмотрим принцип работы системы по непрерывной интеграции и запуска тестов.


Давайте рассмотрим процесс запуска и получения результатов автоматизированного тестирования. Данная схема отображает классический подход к процессу автоматизации. Уточним сразу, что внедрять и управлять системой такого рода могут только архитекторы автоматизированного тестирования, мы же с вами только ознакомимся с принципами ее работы. Порядок описание компонентов будет соответствовать порядку создания лаборатории.
1. Webdriwer - фреймворк для веб автомтаизации, он предоставляет методы взаимодействия с веб страницей на популярных языках программирования как Java/Python/Java/C# ... которые позволяют выполнять действия аналогично пользователям: выбор элемента, нажатие на него, выбор свойств и прочее.
2. Тестовые скрипты. Это небольшие программы которые являются реализацией авто тест-кейса на высокоуровневом языке программирования. Они используют методы фреймворка webdriwer, и реализуют шаги теста в виде команд. При этом структура тестируемого сайта описывается отдельно в формате pageObject и подключается к тесту.
Пример реализации шага тест кейса:

Данный пример приведен на языке python, driver - это экземпляр вебдрайвера имплементированного в конкретном драйвере, например ChromeDriver, PlaylistPage это pageObject, a команда assert выполняет проверку.
3. В данной архитектуре хаб представлен Selenium Grid, который является кластером, состоящим из нескольких Selenium-серверов. Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин. На данный момент Selenium Grid начинает устаревать, и паралелизация, может выполнятся средствами системы непрерывной интеграции.
Selenium Grid имеет топологию «звезда», то есть в его составе имеется выделенный сервер, который носит название «хаб» или «коммутатор», а остальные сервера называются «ноды» или «узлы». Сеть может быть гетерогенной, то есть коммутатор и узлы могут работать под управлением разных операционных систем, на них могут быть установлены разные браузеры. Одна из задач Selenium Grid заключается в том, чтобы «подбирать» подходящий узел, когда во время старта браузера указываются требования к нему – тип браузера, версия, операционная система, архитектура процессора и ряд других атрибутов.

Ранее Selenium Grid был самостоятельным продуктом. Сейчас физически продукт один – Selenium Server, но у него есть несколько режимов запуска: он может работать как самостоятельный сервер, как коммутатор кластера, либо как узел кластера, это определяется параметрами запуска.
4. Что касается конкретных реализаций фреймворка webdriwer то они есть для всех основных браузеров. Драйвер представляет собой программный код который умеет управлять своим браузером с помощью его родных JavaScript команд. Причем некоторые разрабатывает команда Selenium, а некоторые разработчики браузера как Google и Opera (Она еще жива! Хоть ее время и прошло).

5. Репозиторий и система контроля версий. Является универсальным хранилищем кода которые сейчас используются для всех проектов по разработке ПО. По мимо обеспечения множественного доступа, система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. Самая популярная СКВ сейчас GIT
6. Последним и ключевым элементом лаборатории автоматизации является система непрерывной интеграции, которая и объединяет все предыдущие компоненты и обеспечивает удаленны, непрерывный запуск тестов. Она позволяет автоматизировать часть процесса разработки любого программного обеспечения, в котором не обязательно участие человека, обеспечивая функции непрерывной интеграции. Работает внутри в сервлет-контейнере, например, Apache Tomcat. Поддерживает инструменты системы управления версиями, включая CVS, Git, и прочие. Может собирать проекты с использованием Apache Ant и Apache Maven, а также выполнять произвольные сценарии оболочки и пакетные файлы Windows. Сборка и запуск тестов может быть запущена разными способами, например, после заливки версии, по расписанию, по запросу на определенный URL, после завершения другой сборки в очереди.
Лаборатория для тестирования производительности
Важно понимать, что нагрузочное тестирование (Мы изучим его только в следующем уровне) относится исключительно к автомтаизирвоанному тестированию как отдельный самостоятельный подвид. Ведь даже сложно представить о возможности нагружать сервер, отправляя сотни запросов в минуту вручную. Для такого удовольствия приходилось бы нанимать тысячу-другую статистов которые бы использовали целевой ресурс. Вместо этого, один тестировщик эмулирует поведение одного пользователя (записывает тестовый скрипт), а затем использует этот автотест для имитирования нагрузки. Этот скрипт будет использован машинами генераторами нагрузки для тестирование поведения сервера в заданном режиме. Лаборатория нагрузочного тестирования будет выглядеть вот так:


Оновные аспекты
-
Автоматизация всегда тесно связана с тестированием вручную
-
Целесообразно автоматизировать только хорошо оттестированный вручную функционал, так как ручной тест является более интеллектуальным
-
В идеале каждый скрипт должен базироваться на ручном тест-кейсе с должным уровнем детализации
-
Всё, что видится целесообразным автоматизировать, нужно автоматизировать. В первую очередь это касается регрессионных тестов
Уровни автоматизированных тестов
-
Unit тесты - пишутся программистами для покрытия тестами своего же кода. Позволяют убедится что выбраные функции (юниты) возвращают правильные результаты
-
Integration тесты - пишутся программистам или тестировщиками. Тестируют взаимосвязь юнитов между собой. Могут использовать БД и интерфейсы.
-
E2E тесты (End to End - от начала до конца) - тестируют весь функционал комплексно, так как его видит пользователь. Использую GUI для выполнения операций.
Unit test VS E2E TESTs
1. Хотя End to End тесты делают лучшую работу по имитации реальных пользовательских сценариев, это преимущество становится менее очевидно если просмотреть на все минусы возникающие при при обратной связи после прохождения тестов.
2. Юнит тесты также имеют один существенный недостаток: даже если Юниты хорошо работают в изоляции, вы не знаете, как они взаимодействуют и хорошо ли работают вместе.
3. Но даже когда необходимо протестировать взаимодействие модулей программы, не обязательно применять E2E тесты. Для этого вы можете использовать интеграционный тест. Интеграционный тест охватывает небольшую группу Юнитов, часто два блока, и проверяет их поведение в целом, проверяя, что они последовательно и правильно работают вместе.


Тестовая пирамида

Это как МММ, только круче. Тестовая пирамида от Google, ее они часто советуют применять, как первое приближение для распределения тестов в формате: 70/20/10 а именно: 70% юнит-тестов, 20% интеграционных тестов, и только 10% из всех тестов E2E.
За время прочтения этой полезнейшей информации про автотетсты, у меня возникли вопросы. Помоги мне пожалуйста разобраться. Как всгда магистр даст подсказку через минуту.


Практика создания автотестов
Сегодня ты научишься писать автотесты! Да это правда, веришь или нет но после прохождения этого уровня, роботы будут тебе подчиняться! А осваивать мы будет инструмент по автоматизации под названием Selenium IDE.
Selenium IDE это помощник в выполнении тест-кейсов. Он отностится к web скрипт-рекодерам с возможными елементами программирования. Этот инструмент прдествляет собой плагин для FireFox, который умеет записывать действия тестировщика на web странице. Selenium IDE это самая базовая программа из семейства фреймворков по тестированию web систем. Его старший брат чистый Selenium является самой популярной библиотекой для создания web автотестов на множестве языков программирования. При этом, Selenium IDE не требует ни капельки знаний прогарммирования - ведь тестирование выполняется с помощью зарезервированных команд приложения. Это конечно ограничивает свободу действия тестировщика, но для большинства рутинных тестов этого вполне достаточно. Selenium IDE это:
-
Простейший инструмент записи/воспроизведения авто-тестов;
-
Легко усваиваемый за небольшой срок;
-
Не требует особых навыков в программировании
-
Первый шаг в освоении автоматизированного тестирования.

Как установить Selenium IDE
1) Открыть/Установить последнюю версию браузера Mozilla FireFox
2) Через FF открыть страницу загрузки http://www.seleniumhq.org/download/ и найти ссылку для загрузки плагина IDE, либо по прямой ссылке
4) Кликнуть на иконку, и начать работать!

Как это работает
1) Запустить приложение;
2) Открыть страницу тестирования;
3) Нажать кнопку записи ;
4) Выполнить необходимые действия на странице(пошагово из тест-кейса);
5) Воспроизвести полученный тест ;
6) Сохранить тест кейс.


Пример простого автотест-кейса


Результат

Расширение функционала - добавление логики
1) Для расширения функционала IDE можно подключить дополнительный пользовательский модуль, или создать свой.
2) В тестах можно использовать javascript;
Это дает возможность:
-
использовать в тестах условные операторы (if).
-
безусловные переходы (go to).
-
циклы.
-
создавать и работать с переменными внутри теста.
-
использование мощи языка javascript.
Для использования логики в Selenium IDE нужно знать Javascript

Итог по Selenium IDE

Достоинства
1) Open-source project;
2) Скорость создания тестов;
3) Легкость работы с IDE;
4) Не требует знаний программирования;
5) Обладает минимально необходимым для создание авто-тестов функционалом;
6) IDE сам составляет локаторы (почти всегда правильно);
7) экспорт готового сценария в Selenium RC или WebDriver на "настоящем" языке программир.;
8) Не требует фокусировки на окне браузера;

Недостатки
1) Только FireFox;
2) Только "простые" тесты;
3) Не умеет работать с нативными окнами;
4) Не умеет работать с загрузкой файлов;
5) Корректно работает только на средней и низкой скорости;
6) Для логики требуется javascript
7) Тесты недолгосрочные (например валятся при изменении баланса на карте)
8) Проблемы при работе с iframe и pop-up

Почему Webdriver, или обзор другого ПО для автотестов
Для перехода на Selenium WebDriver необходимо:
1) Знания основ программирования на одном из языков: Java, C#, Ruby, Python, Perl, PHP.
2) Знания основных возможностей и команд в Selenium WebDriver
3) Необходимо иметь готовые наборы тест-кейсов и их приоритетов.
4) Определить что автоматизировать в первую очередь.
5) Время (много времени) на разработку автоматизированных тестов.
6) Можно экспортировать уже готовые тест-кейсы из IDE(лучше написать заново)
-
Webdriver бесплатный проект с широкой поддержкой и полным описанием на русском. Поддерживается на 5 языках программирования + возможность подключения различных фреймворков, например Thucydides.
-
SilkTest 8.5 Платный проект, есть crack. Вся документация на английском, поддержка платная, язык только С++.
-
IBM Ratioanal. Платный проект. Большинство документации на английском, поддержка платная, язык только Java. Цена 2,600.00$.
-
TestComplete. Платный проект. Кроссбраузерность + тестирование приложенией. (IE, Firefox, Chrome, Flash, Flex, AIR, Silverlight, Java, .NET compilers (Visual C#)) Цена 2,000.00$
Selenium WebDriver

Итог по Selenium WebDriver
Достоинства
WebDriver имеет все возможности доступные в Selenium IDE.
1. Open-source project;
2. Всю мощь и возможности языка Java.
3. Сложность тестов - любая (ограничивается фантазией автора).
4. Умеет загружать файлы, средствами Java анализировать их.
5. Умеет делать скриншоты.
6. Имеет возможность исполнять в браузере JavaScript (Полезно для сложных проектов с Ajax)
7. Проект развивается и имеет поддержку.
8. Полноценное тестирвоание в:
a. Internet Exoplorer (любая версия)
b. Mozilla Firefox (любая версия)
c. Google Chrome (любая версия)
d. Opera (любая версия)
Недостатки
1. Библиотека для браузера Safari в разработке.
2. Поддержка профилей есть только в браузере Firefox.
3. WebDriver по прежнему не поддерживает нативные окна (Basic HTTP autentification).
4. WebDriver не умеет проверять дизайн (верстку), техника ScreenShot based test не считается :)
5. Нужно знать один из языков Java, C#, Ruby, Python, Perl, PHP
Проблема локаторов и специфика работы разных браузерах
1) Локаторы написанные для Firefox могут не подходить для Chrome и Internet Explorer (могут меняться как id элементов, так и общий xpath)
2) Фокусировка на поле ввода в разных браузерах по-умолчанию происходит по-разному.
3) Firefox вставляет текст в конце, другие браузеры - в начале.
4) Если у Элемента не прописан id или name, Авто-тест сыпется после малейшего изменения, иногда даже в другом функционале.
5) Если у Элемента не прописан id или name, в разных браузерах могут быть разные xpath и cssid, в результате кроссбраузерность пропадает, нужно писать отдельные авто-тесты под все браузеры


Сложность работы с фреймами и окнами
При работе с Selenium Webdriver, если страничка сайта очень сложная, имеет вложенную структуру фреймов или сайт открывает новые окна, необходимо быть очень внимательным. В таких случаях чаще всего возникают ошибки Element not found, не потому что у вас неправильный локатор, а потому что вы ищите не в том фрейме, или окне.
// Сброс фреймов, переключение фокуса на страницу
driver.SwitchTo().DefaultContent();
// Переключение на нужный фрейм
driver.SwitchTo().Frame("main");
Обучнающее видео по работе с SELENIUM IDE
Локаторы Selenium или как находятся элементы, к которым применяются команды
Локаторы используются для нахождения элементов, к которым относятся команды. Список локаторов Selenium достаточно большой:
-
id – используется атрибут id (идентификатор) элемента
-
name – используется атрибут name элемента
-
identifier – используется атрибут id элемента, если по id-у элемент не найден, то поиск будет вестись по атрибуту name
-
dom – используется для поиска элемента по DOM выражению, которое должно начинаться с document.
-
xpath – используется для поиска элемента по XPath выражению, которые должно начинаться с //
-
link – используется для нахождения ссылок с указанным текстом.

Боевые советы от магистра
-
Дам в помощь тебе основные комманды Selenium IDE.
-
Если ваш автотест проходит в пошаговом режиме, но падает при запуске, то скорее всего тест пытается произвести дейсвтие над елементом который еще не доступен на странице. В таком случае нужно добавить комманду waitForElementPresent + локатор елемента. Она заставит ждать елемент столько милисекунд, сколько вы укажете в поле Value.
-
Если ожидать нечего или это не помогает можно просто добавить паузу - комманда pause, но учтите что эти команды сильно удлиняют тест.
-
Не забывайте о проверках! Тест не только должен прокликать весь путь тест кейса, но и проверить ожидаемые результаты с помощью команд verify и assert.
-
Оставльяйте комментарии между каждый блоками тестов, чтобы было опнятны ваши намерения.
-
Критерии приемки задания:
- тесты содержат проверки и верификации шагов
- тесты содержат комментарии с описанием действий
- тесты всегда проходят если нет багов

Домашнее задание и практика
Практическое задание, это создать автотест с помощью Selenium IDE. Готовый тест нужно сохранить как html файл, выгрузить его на сетевой диск и отправить через форму. Это
Создать автотест нужно не просто так, а по мануальному тест кейсу - покупка печенек. Для этого преобразуйте мануальный тест кейс в автоматический, а именно упростите его и разбейте не независимые друг от друга модули. Не забывайте добавлять комментарии и проверки в своем тесте по мимо шагов
Как ты думаешь, какие вопросы будут в тесте по теории?

Пссссс ... Иди скорей сюда, я помогу тебе с автоматизированным тест-кейсом. Задание это не простое, и требует особых навыков автоматизаци. Чтобы писать роботов нужно думать как робот, кратко и четко. Возьми этот пример автотеста загрузи его себе и запусти его. Запусти тест и ты поймешь, что делает какая команда, и тебе будет уже легче написать свой тест.
Для перехода на уровень 18, необходимо набрать минимум 15 баллов (60%) за задания уровня 17.
