JMeter може да генерира HTTP Request semplers, като действа като локален прокси за запис между браузър и оторизирано целево приложение. Текущите версии наричат този компонент HTTP(S) Test Script Recorder . Той записва едно пътуване на браузъра в Recording Controller, след което скриптът трябва да бъде почистен, съпоставен, валидиран и изпълнен като тест на ниво протокол.
Какво представлява JMeter HTTP прокси сървърът?
Рекордерът слуша на локален порт, обикновено 8888Браузър изпраща HTTP и HTTPS заявки към този прокси сървър, а JMeter преобразува съответстващия трафик в семплери под избран контролер. По време на повторното възпроизвеждане JMeter изпраща заявки директно; не стартира браузър за всеки виртуален потребител.
Защо да записваме, вместо да изграждаме сценария на ръка?
- Заснема реалистичен ред на заявките, пренасочвания, формуляри и фонови API.
- Разкрива XHR или fetch повиквания, които е лесно да се пренебрегнат.
- Създава бърза базова линия за сложно потребителско пътуване.
- Намалява грешките при транскрипция в заглавките и параметрите.
Ръчното конструиране остава по-чисто за малък документиран API. Записването помага, когато поведението на браузърната мрежа все още не е разбрано. За терминология вижте нашето ръководство за типове прокси.
Как да запишете скрипт в JMeter 5.x
- Стартирайте JMeter в графичен режим за създаване на скрипт.
- Добавете група нишки към тестовия план.
- Добавете контролер за запис под групата „Теми“.
- Добавете HTTP Request Defaults и HTTP Cookie Manager, където е уместно.
- Добавете HTTP(S) Test Script Recorder и изберете Recording Controller като негова цел.
- Използвайте модели за включване/изключване, за да ограничите несвързания трафик.
Официалното ръководство за запис на Apache JMeter е авторитетният справочник, специфичен за версията.
Стъпка 1) Настройка на HTTP прокси сървъра
8888, задайте целевия контролер и щракнете Начало.Конфигурирайте тестовия браузър с HTTP и HTTPS прокси хост 127.0.0.1 и същия порт. Ако браузърът работи в друга виртуална машина или контейнер, localhost се отнася до тази среда; вместо това използвайте одобрен достъпен частен адрес.
Proxy host: 127.0.0.1
Proxy port: 8888
Include: https?://test.example.com/.*
Exclude: .*(.png|.jpg|.gif|.css|.woff2)(?.*)?$
Не филтрирайте твърде агресивно при първото преминаване, защото API на приложението може да използва друг поддомейн. Запишете веднъж, проверете хостовете и след това прецизирайте шаблоните.
Стъпка 2) Запишете дейността си
- Стартирайте рекордера и се доверявайте на временния му сертификат само в изолирания тестов браузър.
- Отворете оторизираната тестова среда.
- Извършете едно чисто пътуване с човешка скорост.
- Спрете записа веднага след последното бизнес действие.
- Възстановете нормалните настройки на прокси сървъра на браузъра.
Преименувайте семплерите по бизнес действия и групирайте заявки, свързани с тях, в „Контролери на транзакции“. Премахнете анализи, реклами, актуализации на браузъра, джаджи за чат и дублиращи се статични ресурси, освен ако не са изрично в обхвата.
Проверявайте всеки семплер за секретни данни. Паролите трябва да идват от защитени данни по време на изпълнение, докато промяната на токените изисква корелация.
Стъпка 3) Изпълнете своя тестов план
Валидирайте един потребител и една итерация, преди да добавите натоварване. Временно използвайте дървото на резултатите от View (View Results Tree), проверете пренасочванията и телата на отговорите и добавете твърдения за очаквания бизнес резултат. HTTP 200 сам по себе си не доказва, че влизането или плащането са успешни.
Threads: 1
Ramp-up: 1 second
Loop Count: 1
След отстраняване на грешки, премахнете тежките слушатели и изпълнете не-GUI:
jmeter -n -t recorded-test.jmx -l results.jtl -e -o html-report
Директорията за отчети трябва да е нова или празна. Увеличавайте натоварването постепенно и наблюдавайте целевата система, както и JMeter.
Стъпка 4) Запазете резултата от теста
Запазете плана за многократна употреба като .jmx файл и съхранявайте генерираните данни отделно:
- JMX: семплери, контролери, твърдения, таймери, променливи и конфигурация.
- JTL: резултати от суровите проби за анализ.
- HTML табло за управление: процентили, пропускателна способност, грешки и активни нишки.
- Метрики на сървъра: Телеметрия на процесора, паметта, базата данни, опашката и услугите.
Версионирайте плана с несекретни свойства и тестови данни. Запишете версиите на JMeter и Java, целевата компилация, средата, броя на потребителите, набирането на скорост и продължителността.
Записване на HTTPS трафик и сертификати
За HTTPS, JMeter генерира временен сертификационен орган, когато рекордерът стартира. Импортирайте го само в специалния тестов браузър, запишете оторизирания сайт и след това го премахнете.
- Стартирайте записващото устройство за тестови скриптове на HTTP(S).
- Намерете генерирания сертификат ApacheJMeterTemporaryRootCA.
- Импортирайте го като доверен орган в изолирания профил.
- Запишете одобреното HTTPS пътуване.
- Премахнете сертификата, когато сте готови.
Закрепването на сертификати, взаимният TLS, управляваните браузъри, мобилните приложения и по-новите транспортни протоколи могат да блокират прихващането. Не отслабвайте контролите за сигурност в производствения режим. Използвайте промеждутъчна компилация, API спецификация или одобрен алтернативен метод за заснемане.
Корелация: Как да направим записан сценарий възможен за повторно възпроизвеждане
Идентификаторите на сесии, CSRF токените, състоянието на OAuth, подписите на заявките и идентификаторите на ресурси се променят между изпълненията. Корелацията извлича нова стойност от един отговор и я замества в по-късни заявки.
- Намерете отговора, който първи съдържа динамичната стойност.
- Добавете JSON, CSS, XPath или инструмент за извличане на регулярни изрази.
- Съхранявайте резултата в именувана променлива JMeter.
- Заменете по-късните твърдо кодирани стойности с препратката към променливата.
- Явен неуспех, когато извличането не върне съвпадение.
JSON Extractor
Variable: csrfToken
JSON Path: $.csrf.token
Default: NOT_FOUND
Later header:
X-CSRF-Token: ${csrfToken}
Параметризацията предоставя независими потребителски данни, често от CSV. Корелацията улавя генерирани от сървъра данни по време на изпълнение. Реалистичните планове обикновено се нуждаят и от двете.
Отстраняване на проблеми
| Проблем | Вероятна причина | Фиксирайте |
|---|---|---|
| Няма регистрирани заявки | Грешен прокси сървър, спрян рекордер, конфликт на портове или правило за заобикаляне | Потвърдете хоста и порта, стартирайте записващото устройство и премахнете изключенията на целта. |
| HTTPS предупреждение | Временен CA липсва или е изтекъл | Генерирайте нов сертификат за рекордер и го импортирайте само в тестовия профил. |
| Твърде много трафик | Разширения, телеметрия, други раздели или общи модели | Използвайте изчистен профил и прецизирайте филтрите за включване/изключване. |
| Повторното влизане неуспешно | Липсващи бисквитки, токени, OAuth поток или корелация | Добавете мениджър на бисквитки, извлечете динамични стойности и проверете пренасочванията. |
| Браузърът е офлайн след това | Все още сочи към спряния локален прокси сървър | Възстановете автоматичните настройки или настройките без прокси. |
| Грешка в паметта на JMeter | GUI слушатели или голямо хранилище за отговори | Използвайте режим без графичен потребителски интерфейс и ограничете запазените данни за отговорите. |
| Различно от браузъра | JMeter не рендира или изпълнява JavaScript кода на страницата | Тествайте основните API и използвайте инструменти за браузър за рендиране на показатели. |
JMeter е инструмент за измерване на производителността на протоколите. Той не може сам по себе си да измерва визуални събития, като например „Най-голямо изобразяване на съдържание“.
Въпроси и Отговори
Какво замени името на HTTP прокси сървъра в JMeter?
Компонентът вече се нарича HTTP(S) Test Script Recorder.
Какъв порт за запис на данни трябва да използвам?
Всеки неизползван локален порт работи. Порт 8888 е често срещан и браузърът трябва да използва същата стойност.
Може ли JMeter да записва HTTPS трафик?
Да, когато изолираният тестов браузър се доверява на временния сертификат за запис на JMeter.
Защо записаният скрипт се проваля при повторно възпроизвеждане?
Динамичните токени, бисквитките, потоците за удостоверяване, разликите между хостовете и липсващите данни обикновено изискват корелация и параметризация.
Може ли JMeter да записва в Chrome?
Да. Конфигурирайте чист профил в Chrome, за да използвате локалния рекордер на JMeter.
Трябва ли да изпълнявам тестове за натоварване от графичния потребителски интерфейс на JMeter?
Не. Изграждане и дебъгване в GUI режим, след което изпълнение на load в режим без GUI.
JMeter държи ли се като истински браузър?
Не. Изпраща заявки за протоколи, но не рендира HTML или не изпълнява JavaScript код на браузъра.
Безопасно ли е да се записват данни за вход в производствения режим?
Предпочитайте профили за подготовка и тестване. Заснемането на продукцията изисква изрично разрешение и стриктно секретно обработване.
