Блок по автоматизации

Блок по автоматизации

Что такое фреймворки


Фреймворк (framework «остов, каркас, рама; структура») — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.

Отличия фреймворка от библиотеки:

  • Библиотеки могут быть использованы в программном продукте просто как набор подпрограмм похожей функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. Фреймворк диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям.

  • Библиотеки имеют одну или близкие функциональности. Фреймворки содержать в себе большое число разных по тематике библиотек.

  • Инверсия управления. В библиотеке пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во фреймворке пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом фреймворк вызывает функции пользовательского кода.

Что такое Selenoid


Selenoid – это реализация Selenium Hub, использующая контейнеры Docker для запуска браузеров.

Основные плюсы:
  • Простота установки
  • Кросс-браузерность
  • Удобство интерфейса
  • Логирование
  • Оптимизация. Потребляет в 10 раз меньше памяти, чем сервер Selenium на основе Java при той же нагрузке
  • Поддержка и документация

Ссылка на Git
Ссылка на установку

Что такое Moon


Moon это решение для автоматизации браузера, совместимое с Selenium, Cypress, Playwright и Puppeteer, использующее Kubernetes или Openshift для запуска браузеров.


Основные плюсы:
  • Простота установки
  • Кросс-браузерность. Большой набор браузеров, в том числе поддержка различных инструментов автоматизации браузеров (не только selenium)
  • Удобство интерфейса
  • Логирование
  • Оптимизация

Основные минусы:
  • Поддержка и документация

Ссылка на работу с Moon

Что такое Selenide


Selenide это фреймворк для автоматизированного тестирования веб-приложений на основе Selenium WebDriver.

Основные плюсы:
  • Удобный Api
  • Стабильность
  • Селекторы
  • Простая конфигурация
  • Поддержка различных платформ. В том числе мобильного тестирования (selenide-appium)

Основные минусы:
  • Поддержка и документация – так как это само документируемый фреймворк, то документации не особо много.

Ссылка на Javadoc (описание классов и методов)

TestDouble
Виды

Стабы (stub) помогают имитировать входящие (incoming) взаимодействия. Работа с данными.

Stubs помогают имитировать входящие (incoming) взаимодействия. То есть вызовы, совершаемые тестируемой системой к ее зависимостям для получения входных данных. В данном случае мы управляем состоянием. stub – это функция, которая всегда выводит один и тот же результат, вне зависимости от того, что было подано на вход.

Моки (mock) помогают имитировать и изучать исходящие (outcoming) взаимодействия. Работа с поведением.

Mocks помогают имитировать и изучать исходящие (outcoming) взаимодействия. То есть вызовы, совершаемые тестируемой системой к ее зависимостям для изменения их состояния. В данном случае мы управляем поведением.

Типы

Объект-заглушка (Dummy Object) – это простое, жестко закодированное значение, например, null или выдуманная строка. Он используется для корректной передачи параметров в метод и не участвует в получении конечного результата. Т.е. это объекты, которые передаются в методы, но на самом деле не используются.

Тестовая заглушка (Test Stub)Тестовая заглушка (Test Stub) – объект, который независимо от переданных на вход значения данных всегда (или чаще всего) предоставляет один и тот же жёстко фиксированный ответ (без логики ветвления). Может применяться для эмуляции ошибок или проверки поведения тестируемой системы на полученный конкретный ответ.

Поддельный объект (Fake Object) – используется для замещения функциональности настоящего вызываемого компонента в ситуациях, не предполагающих проверку опосредованного ввода или вывода.

Обычно Fake Object содержит реализацию той же функциональности, что и настоящий вызываемый компонент, но основанную на значительно более простых средствах.

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

Можно сказать, что Fake – это то же самое, что и Stub для большинства целей. Разница заключается в причинах его создания: Fake обычно используется для замены еще не существующей зависимости. Это фактическая реализация контракта, но она не подходит для производства.

Тестовый агент (Test Spy) – это более сложная версия Stub и Mock объекта. Используется для наблюдения или записей вызовов внутри вызываемого метода. Он перехватывает опосредованный вывод и сохраняет его для последующей проверки тестом.

Как и в случае Stub-ов, Spy может передавать в тестируемую систему значения в ответ на вызовы методов.

При слежке реальный объект остается неизменным, и мы просто подсматриваем за ним какими-то специфическими приемами. Другими словами, мы берем существующий (реальный) объект и заменяем или подсматриваем только некоторые его методы.

Таким образом, во многих отношениях Spy это ‘‘просто’’ Stub с функцией записи. Хотя тестовый агент используется для тех же целей, что и Mock, тесты с его использованием намного больше похожи на тесты с использованием заглушки.

Подставной объект (Mock Object) – обычно подставной объект (Mock Object) содержит функциональность тестовой заглушки (Test Stub), но реализует гибкую логику поведения системы. Mock – объекты, которые настраиваются (например, специфично каждому тесту) и позволяют задать ожидания, например, в виде спецификации вызова, который мы планируем получить. В отличии от stub, mock работает на верификацию поведения.

Чаще всего тестовые двойники используются:
  • Для unit-тестов
  • Проверка ещё не реализованной функциональной зоны тестируемой системы
  • Когда нет доступа к тестовой среде внешней системы (отсутствует интеграция)
  • Есть потребность в гибких проверках поведения тестируемой системы на основе специфичных данных или данных, которые сложно получить или эмулировать в реальной работе
  • Сложная специфика настройки интеграции с внешней системой и последующее использование в тестах
  • Требуются различные механизмы поведения системы, которые не целесообразно проводить при интеграции с другими системами
URL
Часто при работе с методами будет необходимо обрабатывать:
  • Path Parameters – параметры пути
  • Query Parameters – параметры запроса (фильтры)
  • Body – тело запроса
  • Headers – заголовки запроса
  • + cookies
Spring MVC

@Controller – позволяет автоматически обнаруживать классы реализации посредством сканирования путей к классам.

@RestController — это специализированная версия контроллера. Он включает аннотации @Controller и @ResponseBody и, как следствие, упрощает реализацию контроллера. @RestController ставится на класс-контроллер вместо @Controller. Она указывает, что этот класс оперирует не моделями, а данными. Она состоит из аннотаций @Controller и @RequestBody.

Аннотация @ResponseBody ставится на методы, которые работают с данными, а не с моделями. Ее не требуется указывать явно, если используется @RestController. Обычные методы возвращают Model, а методы, аннотированные @ResponseBody, возвращают объекты, которые конвертируются в медиа-файлы с помощью HttpMessageConverter.
@RequestMapping – используется для указания URI до класса-контроллера.

Аннотации для каждого типа обработки запросов (path, headers, name, params, produces, consumes):
  • @GetMapping — Обрабатывает get-запросы
  • @PostMapping — Обрабатывает post-запросы
  • @DeleteMapping — Обрабатывает delete-запросы
  • @PutMapping — Обрабатывает put-запросы
  • @PatchMapping — Обрабатывает patch-запросы

Это более узкие аннотации для маппинга http-методов.

Написанное ниже характерно также и для других аннотаций.

Аннотация @GetMapping — это просто аннотация которая содержит @RequestMapping(method = RequestMethod.GET).

Она также позволяет более глубоко настроить метод-обработчик.

Ее параметры (они конвертируются в аналогичные параметры @RequestMapping):
  • path — URI
  • headers — заголовки
  • name — имя обработчика
  • params — параметры
  • produces — тип возвращаемых данных (JSON, XML, текст). Используется в REST
  • consumes — тип принимаемых данных. Используется в REST

@RequestHeader – получение заголовков.
@RequestBody – получение тела запроса (можно получить сразу как dto-объект).
@PathVariable – получение параметров пути (Path Parameters).
@RequestParam – получение параметров запроса (Query Parameters).

Пример:
@RestController
public class ExampleController {

   @GetMapping(value = {"/api/v1/path"})
   public String apiExample() {
      /**/
      return "code";
   }
}
Mockito

Используйте @Mock, когда вы хотите просто протестировать функциональность извне, не вызывая этот метод. Возвращает null, если не сказано иное.

Используйте @Spy, когда вы хотите протестировать функциональность снаружи + внутри с самим вызываемым методом. Всегда вызывает метод. Возвращает реальное поведение, если не сказано иное.

@ExtendWith(MockitoExtension.class) – позволяет применять расширения к полям класса, тестовым методам и т.д (функции, аннотации, инъекции тестов).

@InjectMocks – позволяет внедрить поля, помеченные аннотацией @Mock и @Spy в тестируемый объект.

@Test – аннотация метода теста.

when(...) thenReturn(...) – делает* реальный вызов метода.

doReturn(...) when(...) - вообще не вызывает* метод.

* - в рамках spy
Установите git (если не установлен)

Для лекции подготовлен проект в gitlab с примерами и базовым кодом, необходимо будет выкачать данный проект (находясь в корпоративной сети) на ваш компьютер и открыть в среде разработки.

Проверьте введя в консоль: git -h

Репозиторий с лекцией, и практическим применением.

Заметьте, что скачать можно только из под VPN или корп сети
У вас должен быть доступ до https://gitlab.services.mts.ru/

Установите intelij Idea Ultimate

Примеры и проект будут демонстрироваться с помощью IDE – Intelij Idea Ultimate , поддерживающую работу с базами данных и имеющей возможность скачать специальные плагины для генерации кода. Вы можете использовать любую другую привычную среду разработки, но не сможете повторить за преподавателем все что он покажет!

Компания МТС предоставляет licence server для активации по принципу пулла лицензий, достаточно вписать http://0001softlic03.msk.mts.ru
Но чтобы познакомится с отличиями от Community версии, можете запуститься на Trial версии, на 30 дней

Установите на компьютер docker, docker-compose

Инструкция для windows
Важно! При установке вам будут необходимы права администратора, не устанавливайте WSL , используйте Hyper-V backend (в ходе установки будет предложен один чекбокс)

Инструкция для mac
Важно! При установке вам будут необходимы права администратора
Не забудьте про архитектуру вашей системы, в официальной инструкции есть различия между Intel и M1 чипами

Инструкция для Linux

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install docker
sudo apt install docker.io
sudo systemctl status docker (для проверки статуса)
sudo usermod -aG docker <имя пользователя - ваш логин> (можно добавить пользователя в группу "docker", чтобы использовать Docker Engine без "sudo" или необходимости переключаться на пользователя "root")
sudo apt-get install docker-compose (это инструмент докера, предназначенный для управления большим количеством контейнеров. Для управления контейнерами используется yaml-файл)

В ходе лекции так же будут использованы понятия

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

  • Docker (есть замечательные видео от slerm.io):
  • BDD (сокр. от англ. Behavior-driven development, дословно «разработка через поведение») — это процесс разработки программного обеспечения, являющаяся ответвлением от методологии разработки через тестирование (TDD). Основной идеей данной методологии является совмещение в процессе разработки чисто технических интересов и интересов бизнеса, позволяя тем самым управляющему персоналу и программистам говорить на одном языке. Для общения между этими группами персонала используется предметно-ориентированный язык, основу которого представляют конструкции из естественного языка, понятные неспециалисту, обычно выражающие поведение программного продукта и ожидаемые результаты.
  • Чтобы начать работать с фреймфорком Behave выполните pip install behave
  1. Затем создайте в корне Вашего проекта папку features – там будут сами сценарии
  2. А в папке features сделайте подпапку steps – тут будут имплементации самих шагов
  • Вы можете определить действия до и после определенных событий в тестах в файле environment.py
  1. before_step(context, step) и after_step(context, step) сработают перед и соответственно после каждого шага сценария
  2. before_scenario(context, scenario), after_scenario(context, scenario) - сработают перед выполнением всего сценария и после его окончания
  3. before_feature(context, feature) и after_feature(context, feature) - отработают перед и после начала любой фичи
  4. before_tag(context, tag), after_tag(context, tag) – будут вызваны перед определенным тэгом
  5. before_all(context), after_all(context) - сработают перед и после ВСЕГО запуска тестов
  • Тэги используются для гибкого запуска тестов:
  1. Если хотим запустить только сценарии у которых стоит тэг @first: behave –tags=first
  2. Хотим запустить все кроме какого-то тэга: behave –tags=~@first
  3. Если требуется запуск тестов у которых есть хотя бы один из представленных тэгов: behave –tags=@first,@second
  4. Если требуется, чтобы у теста были представлены оба тэга(или больше): behave –tags=@first –tags=@second
  • Фикстуры могут быть объявлены в файле environment.py или в отдельном файле fixtures.py
Понравился урок?