Перфоманс Лаб

jmeter
нагрузочное тестирование
20 марта, 2025

Краткий гайд для знакомства с Assertion`s в Jmeter

Время чтения: 9 мин.
20 марта, 2025
Автор:
Иван Гроховатский
Эта статья посвящена утверждениям (Assertions) в JMeter — мощному инструменту для проверки ответов сервера при нагрузочном тестировании. В ней мы  рассмотрим различные типы утверждений с описанием их назначения, параметрами и наглядными примерами использования.

Что такое Assertion в JMeter?

Assertion (от англ. «утверждение») в JMeter позволяет проверить, успешно ли отработал сэмплер. Он начинает выполняться после получения ответа от сервера и сравнивает ожидаемый результат с фактическим.

Чтобы использовать Assertion, его необходимо добавить в сэмплер, то есть «вложить» в него.

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

У большинства Assertions есть настройка области применения — Apply to, которая позволяет указать, к чему именно применяется утверждение.
Варианты применения:

01

Main sample and sub-samples (Основной сэмплер и дочерние сэмплеры) –

проверка применяется как к главному запросу, так и ко всем вложенным
02

Main sample only (Только основной сэмплер) –

проверка применяется только к главному запросу
03

Sub-samples only (Только дочерние сэмплеры) –

проверка применяется только к вложенным запросам (если они есть)
04

JMeter Variable Name to use (Переменная JMeter) –

проверка применяется к содержимому указанной переменной JMeter

Иными словами, вы можете определить область применения проверки:

  • только к основному запросу
  • только к вложенным
  • к обоим сразу
  • или к значению, хранящемуся в переменной

Прежде чем мы углубимся в различные виды assertion, стоит обратить внимание на раздел «Assertions» в англоязычной статье наших коллег, где они подробно объясняют методы оптимизации JMeter.

Ознакомиться с материалом можно по ссылке: https://pflb.us/blog/how-to-speed-up-jmeter-part-1/.

В разделе «JMeter Components» авторы отмечают важный момент:
Не следует использовать Assertion с включенной настройкой «continue» в Thread Group. При активации этой настройки, после срабатывания assertion тест продолжает выполняться, и в итоге результаты могут «смешаться» с ошибками других запросов. Это приведет к большому числу ошибок, хотя на самом деле мы пытались отловить лишь одну.

thread group
Коллеги нашли решение — рекомендуется использовать Assertion с настройкой «Start Next Thread Loop» в Thread Group. В этом случае, если возникает ошибка, тест просто перейдет к следующей итерации, что позволяет избежать накопления ненужных данных в процессе нагрузочного тестирования.

Response Assertion

Это один из самых популярных инструментов в JMeter для проверки ответов, полученных от сервера. Он позволяет убедиться, что ответ соответствует заранее заданным ожиданиям, анализируя различные его компоненты, такие как статус-код, содержимое или заголовки. Иначе говоря, он проверяет, соответствует ли ответ от сервера условиям, установленным в тесте.
response assertion
Поле «Field to Test» указывает, какую часть запроса или ответа можно проверить с помощью Response Assertion в JMeter.
field to test
Варианты:
01

Text Response
(Текст ответа)

текст ответа от сервера, без HTTP-заголовков
02

Response Code
(Код ответа)

например, 200 (OK)
03

Response Message (Сообщение ответа)

например, OK
04

Response Headers (Заголовки ответа)

включая заголовки Set-Cookie (если есть)
05

Request Headers (Заголовки запроса)

заголовки, отправленные вместе с запросом
06

URL Sampled
(URL запроса)

адрес, к которому был отправлен запрос
07

Document (text) (Документ (текст))

текст, извлеченный из различных типов документов (обычно — из полученного HTML)
08

Request Data
(Данные запроса)

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

Пример: Представим, что мы хотим проверить сообщение об ошибке на форме регистрации. Когда пользователь вводит неверный пароль, сервер возвращает код ответа 400 и сообщение «неверный пароль». Нам нужно убедиться, что сообщение об ошибке отображается корректно. В таком случае нам понадобится «Ignore Status». JMeter получит ответ с кодом 400, но Assertion всё равно проверит ответ на наличие нужного нам текста «неверный пароль».

Pattern Matching Rules

Pattern Matching Rules
Эти правила определяют, как именно JMeter сравнивает проверяемый текст с заданным шаблоном.

Варианты правил:
01

Contains
(Содержит)

проверка успешна, если текст содержит указанный шаблон (регулярное выражение)
02

Matches
(Соответствует)

проверка успешна, если весь текст полностью соответствует шаблону (регулярному выражению)
03

Equals
(Равно)

проверка успешна, если весь текст в точности равен шаблону (с учетом регистра). Здесь используется простое сравнение строк, а не регулярные выражения
04

Substring
(Подстрока)

проверка успешна, если текст содержит указанную подстроку (с учетом регистра). Также используется простое сравнение строк
Дополнительные опции:
01

NOT
(НЕ)

инвертирует результат проверки. Например, «NOT Contains» будет успешным, если текст не содержит указанный шаблон
02

OR
(ИЛИ)

применяет Assertions в комбинации «ИЛИ» (достаточно, чтобы хотя бы один шаблон совпал). По умолчанию используется «И» (все шаблоны должны совпасть)

Пример:
Мы получаем ответ от сервера: «ПерфомансЛаб: 16 лет». Что мы получим при использовании каждой настройки?

  • Contains «16»: успешно, т.к. текст содержит «16».
  • Matches «ПерфомансЛаб: \d+ лет»: также успешно, поскольку текст соответствует регулярному выражению.
  • Equals «ПерфомансЛаб: 16 лет»: успешно, поскольку текст идентичен шаблону.
  • Substring «лет»: успешно, поскольку текст содержит подстроку «лет».
  • NOT Contains «Баги»: успешно, поскольку текст не содержит слово «Баги».
  • Contains «16» OR Contains «Производительность»: успешно, поскольку хотя бы один шаблон совпал.
Важно:

  • Contains и Matches используют регулярные выражения, что позволяет создавать более гибкие проверки.
  • Equals и Substring используют простое сравнение строк.

Pattern to Test

pattern to test
Сюда мы добавляем те шаблоны, которые необходимо проверить.

Если создать запрос к ya.ru и ввести шаблон «Яндекс», то запрос отработает, и Assertion отловит слово «Яндекс», запрос будет считаться успешным.

Однако здесь работает последовательная проверка: если первый шаблон не пройдет проверку на соответствие, второй шаблон проверяться уже не будет. Например, если первый шаблон — «яблоко», а второй — «Яндекс», и слово «яблоко» отсутствует на ya.ru, то второй шаблон проверяться не будет, и запрос будет считаться неуспешным.

Custom Failure Message

custom failure message 1
Это поле позволяет задать собственное сообщение об ошибке, которое будет отображаться вместо стандартного сообщения в JMeter. Посмотреть, как это работает, можно в «View Result Tree».
custom failure message

Duration Assertion

Duration Assertion проверяет время ответа от сервера.
duration assertion
Это работает следующим образом:

Duration in Milliseconds (длительность в миллисекундах)

1/3
Вы указываете максимальное количество миллисекунд, которое допустимо для получения ответа.

Проверка

2/3
JMeter измеряет время, затраченное на получение ответа от сервера.

Результат

3/3
Если время ответа превышает заданный лимит, Duration Assertion помечает этот ответ как неудачный. Это позволяет отслеживать производительность сервера и время отклика.

Простой пример

Предположим, нам нужно, чтобы страница нашего сайта загружалась не более чем за 2 секунды (2000 миллисекунд). Для этого необходимо:
Добавить Duration Assertion к запросу, который загружает страницу.
Указать параметр Duration in milliseconds = 2000.
Если время загрузки страницы превысит 2 секунды, Assertion уведомит нас о превышении лимита.

Пример на картинке
 
Мы установили Duration in milliseconds равным 100 для наглядности, а страница загрузилась за 346 миллисекунд. В этом случае Assertion сработал, так как время загрузки превысило заданный лимит.  

duration assertion

Size Assertion

Size Assertion в JMeter проверяет размер ответа, включая различные его части, такие как заголовки, код и содержимое.

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

size assertion
Это работает следующим образом:

Size in bytes (Размер в байтах): указываем ожидаемое количество байт, которое должен иметь ответ. Type of Comparison (Тип сравнения): выбираем способ сравнения размера ответа с заданным значением:
  • Равно (=): размер ответа должен быть равен заданному количеству байт.
  • Больше чем (>): размер ответа должен быть больше заданного количества байт.
  • Больше или равно (>=): размер ответа должен быть больше или равен заданному количеству байт.
  • Меньше чем (<): размер ответа должен быть меньше заданного количества байт.
  • Меньше или равно (<=): размер ответа должен быть меньше или равен заданному количеству байт.
  • Не равно (!=): размер ответа не должен быть равен заданному количеству байт.
Проверка: JMeter измеряет размер ответа в байтах и сравнивает его с заданным значением, используя выбранный тип сравнения. Результат: Если размер ответа не соответствует условию, Size Assertion помечает этот ответ как неудачный.

Пример
Предположим, вы хотите проверить, что размер загруженного файла равен 1000 байтам. Для этого необходимо:

01
В Response Size Field to Test выбрать опцию Full Response
02
В Size in bytes указать значение 1000
03
В Types of Comparison выбрать Equal to
Таким образом, Size Assertion проверит, что размер файла соответствует заданному значению.
size assertion

JSR223 Assertion

JSR223 Assertion —

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

Основные настройки:

Language:

Язык программирования, на котором написан скрипт (Groovy рекомендуется как наиболее быстрый и удобный).

Parameters:

Дополнительные параметры, которые можно передать в скрипт.

Script file:

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

Script compilation caching:

Включает кэширование компиляции скрипта для ускорения работы Groovy.

Пример
Проверка времени отклика, как в Duration Assertion.

jsr223 assertion 1
jsr223 assertion
Как пометить Assertion как неудачный?

Для этого используются методы объекта AssertionResult:

  • AssertionResult.setFailure(true): устанавливает флаг, что Assertion неудачный.
  • AssertionResult.setFailureMessage («Сообщение об ошибке»): устанавливает сообщение об ошибке.

Рекомендации по выбору Assertions

Response Assertion

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

Duration Assertion

2/4
  • Используется для проверки времени отклика сервера.
  • Важен для оценки производительности приложения.

Size Assertion

3/4
  • Используется для проверки размера ответа в байтах.
  • Полезен при тестировании загрузки файлов или API, где важен размер передаваемых данных.

JSR223 Assertion

4/4
  • Используется для сложных проверок, которые невозможно реализовать с помощью стандартных Assertions.
  • Позволяет использовать скрипты для анализа ответа и извлечения данных.
  • Требует знания языков программирования.

Дополнительные советы

01

Комбинируйте Assertions

Для одной и той же проверки можно использовать несколько Assertions. Например, проверяйте код ответа с помощью Response Assertion и время отклика с помощью Duration Assertion.
02

Используйте переменные

Извлекайте данные из ответа с помощью Assertions (например, JSR223 Assertion) и сохраняйте их в переменные JMeter для дальнейшего использования в тесте.
03

Не злоупотребляйте Assertions

Чрезмерное количество Assertions может снизить производительность теста. Используйте их только для критически важных проверок.
04

Пишите понятные сообщения об ошибках

Используйте AssertionResult.setFailureMessage() для создания информативных сообщений, которые помогут быстро выявить причину проблемы.

Вывод

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

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

Закажите нагрузочное тестирование у тех, кто умеет достигать поставленных целей

Увеличьте производительность вашей системы до максимума и застрахуйте свой бизнес.