Привіт, Хабре! Це сіквел моєї попередній публікації, в якому розповім про варіанти розміщення повідомлень у чергах за допомогою JMeter.
Ми робимо шину даних для великої федеральної компанії. Різні формати запитів, перетворення, хитромудра маршрутизація. Для тестування потрібно надсилати багато повідомлень у черзі. Вручну — біль, з яким впорається не кожен мануальник.
Запровадження
Хоча з цим болем доводилося миритися спочатку. Все почалося з RFHUtil. Потужний, але незручний та страшний: Ну, ви знаєте Руса.
Незамінний у деяких випадках, але стабільно падає у разі активного використання.
Зручне тестування з ним неможливе.
З JMeter все полегшало. Після першого етапу з освоєнням і звиканням з'явилася надія на щасливе тестування.
Активно використовую семплери JMS Publisher та JMS Subscriber. На відміну від JMS Point-to-Point, ця парочка здалася зручнішою у роботі. Наприклад, у Subscriber в JMS Selector можна вказати змінну, у Point-to-Point - ні (або цей спосіб не дуже очевидний).
Підготовка семплерів
JMS Publisher
Setup - Each Sample. Apache рекомендує використовувати цю опцію, якщо черги/топики задано через змінні.
Expiration (ms) = 120000. У разі збою тестові запити зникнуть із черги через 2 хвилини.
Use non-persistent delivery mode? - true. IBM стверджує, що persistent mode забезпечує надійне збереження повідомлень, що передаються в разі раптового збою. Та швидший обмін у non-persistent mode. Для тестових цілей важливіша швидкість.
У кожному Publisher задаю jms-властивість, яку Subscriber буде використовувати в JMS Selector. Для кожного надсилання генерується випадкове значення в елементі тест-плану User Parameters:
Тож можна бути впевненим, що прочитано правильне повідомлення.
Timeout (ms) = 100000. Якщо запит не приходить у чергу після 100 секунд очікування, то щось пішло не так.
Stop between sample? - true.
JMS Selector – досить зручна штука. Підсумковий JMS Subscriber:
Як бути з кирилицею в повідомленнях, що передаються. У JMeter за промовчанням після вичитування вона відображається криво. Щоб цього уникнути і насолоджуватися великим і могутнім завжди та скрізь, потрібно:
Додати в «запускатор» JMeter аргумент JVM:
-Dfile.encoding=UTF-8
Додати JSR223 PostProcessor в Subscriber з рядком на groovy:
prev.setDataEncoding("UTF-8")
Передача тексту
Найбільш лінивий варіант. Підходить для налагодження нових тестів. Або для випадків, коли треба відправити хоч щось невелике. Вибрати опцію Message source - Textarea та розмістити тіло повідомлення у текстовому блоці:
передача файлу
Найчастіший варіант. Підходить для більшості сценаріїв. Вибрати опцію Message source - From file та вказати шлях до повідомлення у полі File - Filename:
Передача файлу у текстове поле
Найуніверсальніший варіант. Підходить для більшості сценаріїв + може використовуватися в JMS Point-to-Point, в якому немає другого варіанта відправлення:
Передача байтового масиву
Найскладніший варіант. Підходить для перевірки непогрішно-точної передачі запитів до байта, без спотворень, смс та пертурбації. Зробити це в дефолтному JMeter не вдасться, тут мені однозначно про це сказали.
Тому довелося завантажити вихідники та модифікувати код JMS Subscriber.
Замінив у методі extractContent(..) рядок:
buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
Описав чотири способи надсилання повідомлень у черги, які щодня використовую на практиці. Сподіваюся, що ця інформація полегшить вам життя. Продовжуючи планую розповісти про свій досвід тестування обміну, де на одному кінці — черга, а на іншому — база даних або файлова система.