Одной из важнейших задач автоматизированного тестирования, на мой взгляд, является обеспечение его высокой надежности.
При решении задачи улучшения показателей надежности тестирования хорошо себя зарекомендовал подход использования API-интерфейса вместо UI. В этой статье мы подробно рассмотрим простой механизм замены UI авторизации на API. Существует большое количество типов аутентификации — Basic, Digest, Form, OAuth 1 и OAuth 2. В качестве примера предлагаю рассмотреть один из самых простых, а именно Form. Основная цель статьи — показать подход к реализации API авторизации для UI-тестов.
Мы будем писать тесты и реализацию на Java. В качестве инструментов мы будем использовать Chrome DevTools. Используем в качестве тест-объектов Канборд что ДВВА .
Это продукты с открытым исходным кодом и открытой лицензией, которые довольно легко развернуть локально.
Перейдя по ссылкам, вы сможете узнать больше об этих продуктах и при необходимости прочитать инструкции из расширения.
Проект Давайте создадим его с помощью maven и добавим testng, selenide, rest-assured, json-path, jsoup, maven-compiler-plugin и maven-surefire-plugin. Войдите в Kanboard с открытой вкладкой Network Chrome DevTools.
Проанализировав DevTools, мы сможем узнать алгоритм авторизации.
В этом случае для авторизации выполняются два запроса: GET с двумя параметрами запроса и POST с парой логин/пароль и csrf-токеном.
Первый запрос необходим для получения файла cookie KB_SID. Второй — для файла cookie KB_RM. Установив оба этих значения в WebDriver, мы получаем доступ к главной странице.
Первый запрос в RestAssured будет выглядеть так
Из него получаем куки KB_SIDResponse response01 = given() .
queryParam("controller", "AuthController") .
queryParam("action", "login") .
when() .
get(BASE_URL);
String cookieKBSID = response01.getCookie("KB_SID");
Токен CSRF расположен в начале HTML-страницы, которую мы видим в теле ответа.
Получить его нам поможет библиотека jsoup, которая позволяет разделить документ на элементы.
Поиск осуществляется так же, как и по веб-элементам.
String cSRFToken = Jsoup.parseBodyFragment(response01.body().
asString()) .
getElementsByAttributeValue("name", "csrf_token").
attr("value");
Второй запрос в RestAssured будет выглядеть так: Response response02 = RestAssured
.
given() .
config(RestAssured.config() .
encoderConfig(EncoderConfig.encoderConfig() .
encodeContentTypeAs("x-www-form-urlencoded", ContentType.URLENC))) .
contentType("application/x-www-form-urlencoded; charset=UTF-8") .
formParam("remember_me", "1") .
formParam("username", "admin") .
formParam("password", "admin") .
formParam("csrf_token", cSRFToken) .
queryParam("controller", "AuthController") .
queryParam("action", "check") .
cookie("KB_SID", cookieKBSID) .
when() .
post(BASE_URL);
На этом этапе стоит обратить внимание на то, что запрос должен быть правильно закодирован (encoderConfig, encodeContentTypeAs).
Из него мы получаем куки KB_RM. String setCookieHeaderValue = response02.header("Set-Cookie");
Теперь, когда мы получили все необходимые элементы, нам остается только открыть нужную страницу с заполненными полями cookie. WebDriverRunner.getWebDriver()
.
manage().
addCookie(new Cookie("KB_SID", cookieKBSID)); WebDriverRunner.getWebDriver() .
manage().
addCookie(new Cookie("KB_RM", cookieKBRM));
Selenide.open(url);
Для DVWA все происходит аналогично, только у токена будет другое имя.
Конечно, для других типов аутентификации количество запросов и их сложность будут отличаться.
Однако основной принцип остается прежним — проанализировать полученный алгоритм и воспроизвести его с помощью RestAssured. Благодарю за внимание и надеюсь, что эта статья была вам полезна.
Теги: #Google Chrome #api #тестирование #java #тестирование ИТ-систем #автоматизация тестирования #selenide #java
-
Создание Стильного Контента. Часть 1.
19 Oct, 24 -
Никобарский Язык
19 Oct, 24 -
Зубная Паста Для Ваших Яблок
19 Oct, 24 -
$1.000.000=Poker.org=Sex.com?
19 Oct, 24 -
Мышь «Z» — Гостья Из Умного Будущего
19 Oct, 24 -
Мультитач Для Firefox
19 Oct, 24 -
Aws В Северной Вирджинии: Проблемы С Сетью
19 Oct, 24