Перейти к основному содержимому

Базовая аутентификация в JMeter

· 5 мин. чтения

1. Обзор

При тестировании производительности с помощью JMeter мы можем столкнуться с веб-сервисами, защищенными протоколом HTTP Basic Authentication.

В этом руководстве мы увидим, как настроить Apache JMeter для предоставления необходимых учетных данных во время теста.

2. Что такое базовая аутентификация?

Базовая аутентификация — это простейший метод контроля доступа, который мы можем использовать для защиты веб-ресурса. Он состоит из HTTP-заголовка, отправленного клиентом:

Authorization: Basic <credentials>

Здесь учетные данные закодированы как строка имени пользователя и пароля в формате Base64, разделенных одним двоеточием «:».

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

./5b3f6f6257a1e61ae5459ded99bd260b.png

Поэтому, если мы попытаемся запустить тест JMeter на защищенном веб-ресурсе, код ответа будет HTTP 401, что означает «Неавторизованный». Мы также получим заголовок ответа «WWW-Authenticate», в котором будет описан тип аутентификации, требуемый сервером. В данном случае это будет «Базовый»:

./684032976395bd83721987696cee227e.png

3. Простые способы реализации базовой аутентификации в JMeter

3.1. Добавление заголовка авторизации

Самый простой способ отправить учетные данные — добавить их непосредственно в заголовок запроса. Мы можем легко сделать это с помощью компонента HTTP Header Manager , который позволяет нам добавлять заголовки к запросам, отправляемым компонентом HTTP Request. Менеджер заголовков должен быть дочерним элементом компонента HTTP-запроса:

./70052ea04d8a8f7655f6cdb6435bb4fc.png

На вкладке конфигурации диспетчера заголовков HTTP нам просто нужно добавить запись ключ/значение с нашими данными аутентификации и авторизацией в качестве имени:

./bddb77463bea215b8478ea13fae46132.png

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

Если все пойдет хорошо, мы должны получить от сервера код ответа 200.

3.2. Кодирование учетных данных с помощью препроцессора JSR223

Если мы хотим, чтобы JMeter закодировал наши учетные данные для нас, мы можем использовать компонент JSR223 PreProcessor . Нам нужно будет использовать это, если мы хотим изменить учетные данные, используемые в нашем плане тестирования.

Все, что нам нужно сделать, это добавить препроцессор JSR223 перед нашим компонентом HTTP Header Manager :

./da619e7db0fe8ddd575b59760920a096.png

С помощью этого компонента мы можем выполнять скрипт во время выполнения. Нам нужно предоставить сценарий, который извлекает учетные данные и кодирует их. Давайте использовать Java:

import org.apache.commons.codec.binary.Base64;

String username = vars.get("username");
String password = vars.get("password");
String credentials = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(credentials.getBytes());
vars.put("base64Credentials", new String(encodedUsernamePassword));

Теперь мы должны определить переменные имени пользователя и пароля в компоненте User Defined Variables :

./432d2577e5dcc7ea54d271c1f76d5886.png

И, наконец, в компоненте HTTP Header Manager мы должны установить заголовок Authorization для использования закодированных учетных данных:

./7512e6f7dd23f092eac50c15a4c75def.png

И мы закончили! Все должно работать нормально, и мы можем легко изменить учетные данные в наших пользовательских переменных.

4. Использование диспетчера авторизации HTTP

JMeter предоставляет компонент HTTP Authorization Manager , упрощающий использование учетных данных для аутентификации. С помощью этого компонента мы можем предоставить учетные данные для нескольких доменов и протоколов аутентификации. Этот компонент должен быть дочерним элементом группы потоков и определен до компонента HTTP-запроса :

./995ac139521c6199482975580a0f6d62.png

На вкладке конфигурации компонента мы должны определить имя пользователя и пароль для аутентификации:

./47bb5fcd0c093beba7e72e45ac4ce0a6.png

Мы можем использовать переменные на этой вкладке, если мы определили имя пользователя и пароль в компоненте User Defined Variables . Это работает и для пароля. Хотя он все еще замаскирован, мы можем ввести «${password}» в поле пароля .

Мы должны позаботиться о том, чтобы выбрать правильный механизм аутентификации. Здесь мы выберем «БАЗОВЫЙ» .

Вот и все! Компонент HTTP Request автоматически добавит заголовок Authorization в запрос, и мы должны получить код ответа HTTP 200 OK.

5. Использование нескольких учетных данных в диспетчере авторизации HTTP

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

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

./8709d661a1b4140edb044a7e72d234d1.png

Затем в этом компоненте мы должны определить:

  • Расположение файла в виде пути в компоненте пользовательских переменных
  • Имена переменных , которые устанавливаются компонентом набора данных CSV после его выполнения .
  • Должен ли компонент игнорировать первую строку — полезно, если у нас есть имена столбцов в CSV-файле.
  • Какой разделитель используется в файле CSV

./296ec3c25405cf7ad4ef7e8394537d51.png

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

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

6. Заключение

В этой статье мы рассмотрели, как работает обычная аутентификация для ресурсов HTTP.

Мы также узнали, как настроить план тестирования в Apache JMeter для аутентификации с использованием этого протокола. Мы рассмотрели жестко запрограммированные учетные данные, используя препроцессор JSR223, а затем предоставили несколько учетных данных из файла CSV.

Как всегда, код этих примеров доступен на GitHub .