Что такое Assertion в JMeter?
Assertion (от англ. «утверждение») в JMeter позволяет проверить, успешно ли отработал сэмплер. Он начинает выполняться после получения ответа от сервера и сравнивает ожидаемый результат с фактическим.
Чтобы использовать Assertion, его необходимо добавить в сэмплер, то есть «вложить» в него.
Важно: не рекомендуется применять слишком много утверждений, потому что их избыток может негативно сказаться на пропускной способности запроса. Кроме того, условия проверки должны быть уникальными для тестируемой страницы запроса, иначе Assertion может работать некорректно.
У большинства Assertions есть настройка области применения — Apply to, которая позволяет указать, к чему именно применяется утверждение.
Варианты применения:
Main sample and sub-samples (Основной сэмплер и дочерние сэмплеры) –
Main sample only (Только основной сэмплер) –
Sub-samples only (Только дочерние сэмплеры) –
JMeter Variable Name to use (Переменная JMeter) –
Иными словами, вы можете определить область применения проверки:
- только к основному запросу
- только к вложенным
- к обоим сразу
- или к значению, хранящемуся в переменной
Прежде чем мы углубимся в различные виды assertion, стоит обратить внимание на раздел «Assertions» в англоязычной статье наших коллег, где они подробно объясняют методы оптимизации JMeter.
Ознакомиться с материалом можно по ссылке: https://pflb.us/blog/how-to-speed-up-jmeter-part-1/.
В разделе «JMeter Components» авторы отмечают важный момент: Не следует использовать Assertion с включенной настройкой «continue» в Thread Group. При активации этой настройки, после срабатывания assertion тест продолжает выполняться, и в итоге результаты могут «смешаться» с ошибками других запросов. Это приведет к большому числу ошибок, хотя на самом деле мы пытались отловить лишь одну.

Response Assertion


Text Response
(Текст ответа)
Response Code
(Код ответа)
Response Message (Сообщение ответа)
Response Headers (Заголовки ответа)
Request Headers (Заголовки запроса)
URL Sampled
(URL запроса)
Document (text) (Документ (текст))
Request Data
(Данные запроса)
Пример: Представим, что мы хотим проверить сообщение об ошибке на форме регистрации. Когда пользователь вводит неверный пароль, сервер возвращает код ответа 400 и сообщение «неверный пароль». Нам нужно убедиться, что сообщение об ошибке отображается корректно. В таком случае нам понадобится «Ignore Status». JMeter получит ответ с кодом 400, но Assertion всё равно проверит ответ на наличие нужного нам текста «неверный пароль».
Pattern Matching Rules

Варианты правил:
Contains
(Содержит)
Matches
(Соответствует)
Equals
(Равно)
Substring
(Подстрока)
NOT
(НЕ)
OR
(ИЛИ)
Пример:
Мы получаем ответ от сервера: «ПерфомансЛаб: 16 лет». Что мы получим при использовании каждой настройки?
- Contains «16»: успешно, т.к. текст содержит «16».
- Matches «ПерфомансЛаб: \d+ лет»: также успешно, поскольку текст соответствует регулярному выражению.
- Equals «ПерфомансЛаб: 16 лет»: успешно, поскольку текст идентичен шаблону.
- Substring «лет»: успешно, поскольку текст содержит подстроку «лет».
- NOT Contains «Баги»: успешно, поскольку текст не содержит слово «Баги».
- Contains «16» OR Contains «Производительность»: успешно, поскольку хотя бы один шаблон совпал.
Важно:
- Contains и Matches используют регулярные выражения, что позволяет создавать более гибкие проверки.
- Equals и Substring используют простое сравнение строк.
Pattern to Test

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


Duration Assertion

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

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

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

JSR223 Assertion
JSR223 Assertion —
это гибкий инструмент для написания сложных проверок, которые невозможно реализовать с помощью стандартных Assertions. Например, можно выполнять вычисления или извлекать данные из ответа и сохранять их в переменные. Возможности использования этого инструмента почти безграничны.
Основные настройки:
Language:
Parameters:
Script file:
Script compilation caching:
Пример
Проверка времени отклика, как в Duration Assertion.


Как пометить Assertion как неудачный?
Для этого используются методы объекта AssertionResult:
- AssertionResult.setFailure(true): устанавливает флаг, что Assertion неудачный.
- AssertionResult.setFailureMessage («Сообщение об ошибке»): устанавливает сообщение об ошибке.
Рекомендации по выбору Assertions
Response Assertion
- Используется для проверки кодов состояния HTTP, наличия определенного текста в ответе, заголовков и других параметров ответа.
- Подходит для большинства задач, связанных с проверкой содержимого ответа.
Duration Assertion
- Используется для проверки времени отклика сервера.
- Важен для оценки производительности приложения.
Size Assertion
- Используется для проверки размера ответа в байтах.
- Полезен при тестировании загрузки файлов или API, где важен размер передаваемых данных.
JSR223 Assertion
- Используется для сложных проверок, которые невозможно реализовать с помощью стандартных Assertions.
- Позволяет использовать скрипты для анализа ответа и извлечения данных.
- Требует знания языков программирования.
Дополнительные советы
Комбинируйте Assertions
Используйте переменные
Не злоупотребляйте Assertions
Пишите понятные сообщения об ошибках
Вывод
Assertions в JMeter — это важный инструмент для обеспечения качества и надежности тестирования. Они позволяют проводить детальные проверки ответов сервера и выявлять ошибки на ранних этапах разработки. В статье рассмотрены основные типы Assertions, их настройка и примеры использования. Но мы разобрали далеко не все типы Assertions, а только те, которые используются на практике чаще всего.
Важно помнить, что выбор Assertions и их параметров зависит от конкретных требований к тестированию. Несмотря на возможное влияние большого числа Assertions на производительность теста, их грамотное применение значительно повышает эффективность тестирования и помогает создавать надежные приложения.