Введення
Напевно кожен, хто користувався стандартними лістенерами в JMeter, стикався з наступними обмеженнями:
- стандартні листенери не дозволяють отримати детальну інформацію за всіма підзапитами, прописаними в тест плані;
- стандартні листенери виводять інформацію в XML - форматі, що ускладнює подальший аналіз логів засобами Excel і Pandas.
Щоб обійти дані обмеження, було прийнято рішення переробити формування лог-файлів за допомогою нового плагіну CsvLogWriter.
Поставлені завдання
Необхідно було розробити плагін для JMeter, який мав би такі функціональні можливості:
- вивід повного тексту помилки в рядковому форматі;
- фіксація даних по дочірніх підзапросах.
У стандартних листенерах для JMeter фіксація повного змісту помилки можлива в XML-форматі, що приносить незручності для аналізу. Виникла потреба зберігати текст помилки в рядковому форматі з подальшим записом, наприклад, в CSV-формат для забезпечення можливості побудови графіків в Excel і Pandas. Зазвичай отримувані лог-файли не відображають дані по дочірніх підзапросах. Що вкрай незручно при використанні складної структури тест-плану. Приклад структури продемонстрований на малюнку 1.
Малюнок 1. Структура тест-плану
При використанні стандартних лістенерів ми не зможемо отримати дані підзапросів (вбудованих ресурсів), CSVLogWriter дає нам таку можливість.
Опис функціоналу плагіну pflb @ CsvLogWriter
Під час роботи було написано плагін pflb @ CsvLogWriter для JMeter. До ключових особливостей даного плагіну можна віднести те, що він може фіксувати результати роботи дочірніх підзапросів і записувати повний текст помилки, при її виникненні, у вигляді звичайного тексту, а не в XML-форматі.
Опис полів лога
Формат логу
Дані, що фіксуються в лог-файлі, представлені в таблиці 1.
Таблиця 1. Формат логу
Структура лога розширює базовий формат CSV лога. З базовим набором параметрів можна ознайомитися за посиланням jmeter.apache.org/usermanual/listeners.html#csvlogformat
Отриманий CSV-лог можна завантажити будь-яким базовим Listener-ом JMeter, що підтримує завантаження CSV-лога.
Також у лозі з'явилися додаткові колонки, які можуть стати в нагоді при аналізі (буд. 22-35 таблиці Формат лога).
Тіла і заголовки відповідей і запитів записуються тільки при помилках (стр. 36-39 таблиці Формат лога).
Також у лог запишуться колонки для змінних: jmeter.apache.org/usermanual/listeners.html#sample_variables - опис можливості логувати значення змінних.
Інтерфейс
Для запуску плагіну необхідно заповнити поле Filename. Поле Filename містить шлях до файла, в якому буде вестися фіксація результатів роботи. Можна прописати теку вручну або вибрати файл за допомогою кнопки «Browse». Якщо файл існує, створюється новий файл. Найменування нового лог-файлу формується додаванням постфіксу з номером лог-файлу до оригінального найменування.
Так само на формі розташовані прапорці. За допомогою позначок можна маніпулювати даними, що фіксуються в лозі. Позначка Additional parameters відповідає за фіксацію додаткових параметрів (22-35 рядка в таблиці Формат лога), Response data відповідає за фіксацію тексту помилок (36-39 рядка в таблиці Формат лога), User variables відповідає за фіксацію змінних користувача.
Інтерфейс плагіну представлений на малюнку 2.
Малюнок 2. Інтерфейс плагіну CSVLogWriter
Порівняння плагіну CSVLogWriter і Simple Data Writer
У цьому розділі спробуємо порівняти плагін CsvLogWriter і стандартний лістенер Simple Data Writer.
Склад логованих даних
Лістенер Simple Data Writer дає користувачеві можливість налаштувати список фіксованих даних. На зображенні 3 показано діалогове вікно налаштування даних.
Малюнок 3. Діалогове вікно налаштування даних листенера Simple Data Writer
Плагін CsvLogWriter завжди виводить базовий перелік параметрів (аналогічний Simple Data Writer) і дозволяє налаштувати вивід списку додаткових даних за допомогою 3 прапорців на формі:
- Additional parameters - додаткові параметри (22-35 рядка в таблиці Формат лога);
- Response data - тексти помилок (36-39 рядка в таблиці Формат лога);
- User variables - власні змінні (для виводу необхідно запускати JMeter з ключем -Jsample_variables).
Детальний перелік фіксованих даних жорстко прописаний в коді. Але, як видно на малюнку 3, Simple Data Writer не може виводити текст помилки в рядковому форматі. Повний текст помилки фіксується лише у форматі XML. З цієї причини у випадку, коли нам необхідний текст помилок доводиться вести 2 логи - 1 в CSV-форматі (якщо необхідна подальша обробка лога з побудовою графіків в Excel або Pandas) і 1 в XML-форматі.
Логування підзапросів
Так само, лістенер Simple Data Writer не фіксує результати роботи дочірніх підзапросів, відповідно, такий лог-файл не можна назвати вичерпним. Для наочного порівняння обсягу виводимих даних запустимо тест, відповідний тест-плану на малюнку 1, і подивимося на лог-файли. Лог-файл Sim^ DataWriter представлений на малюнку 4.
Малюнок 4. Лог-файл Simple Data Writer
Як видно на малюнку 4, Sim^ DataWriter не виводить інформацію щодо вбудованих ресурсів. У свою чергу, плагін CsvLogWriter за рахунок обробки дочірніх підзапросів виводить більше інформації. Вміст лог-файлу плагіну CsvLogWriter представлено на малюнку 5.
Малюнок 5. Лог-файл CsvLogWriter
Порівняння швидкодії
Так само проводився аналіз швидкодії методу Sim^ Occured, що відповідає за обробку подій. Профілювання велося в Java VisualVM. У тест плані не використовувалися підзапити. Для Sim^ DataWriter тестування запускалося з записом в 1 CSV-файл і з записом у 2 файли - CSV і XML. Кількість віртуальних користувачів становила 10, кількість повторення 100. Підсумки порівняння наведено в таблиці 2.
Таблиця 2. Порівняння швидкодії Sim DataWriter і плагіну CsvLogWriter
CsvLogWriter |
SimpleDataWriter (CSV+XML) |
SimpleDataWriter (CSV) |
Тривалість (мс), кількість викликів |
Тривалість (мс), кількість викликів |
Тривалість (мс), кількість викликів |
215, 2000 |
23076, 4000 |
101, 2000 |
Висновки:
- CsvLogWriter у 10 разів швидший за Sim^ DataWriter (XML з максимальною деталізацією);
- CsvLogWriter в 2 рази повільніше Sim^ DataWriter (CSV з максимальною деталізацією);
- Sim^ DataWriter (XML з максимальною деталізацією) в 20 разів повільніше Sim^ DataWriter (CSV з максимальною деталізацією).
Посилання на плагін
github.com/pflb/Jmeter.Plugin.CsvLogWriter