Время на прочтение6 мин
Количество просмотров161K
Сегодня я хочу рассказать о замечательном инструменте, название которого вынесено в заголовок статьи. Разумеется, моей целью не является написание подробного руководства по Apache JMeter. В своей статье я хочу лишь зафиксировать ряд, на мой взгляд, не очевидных моментов, с которыми мне пришлось столкнуться в своей повседневной работе. Я надеюсь, что моя статья будет полезна (сразу предупреждаю, картинок будет много).
Конечно, я не первый, кто пишет про JMeter на Хабре, но практически во всех предыдущих статьях, акцент делается на нагрузочное тестирование. Хотя это и основное применение JMeter, но только им его возможности не ограничиваются. Давайте, просто посмотрим, по каким протоколам может работать этот продукт:
- Web — HTTP, HTTPS
- SOAP / REST
- FTP
- Database via JDBC
- LDAP
- Message-oriented middleware (MOM) via JMS
- Mail — SMTP(S), POP3(S) and IMAP(S)
- MongoDB (NoSQL)
- Native commands or shell scripts
- TCP
Таким образом, если перед вами стоит какая-то задача автоматизации и всё, что вам требуется, перечислено в этом списке, определённо стоит подумать об использовании JMeter, перед тем как с головой погрузиться в программирование на любимом Perl, Python или Java. Возможно, такой подход позволит сэкономить очень много времени.
Установка
С этим всё просто:
- Устанавливаем Java (если она еще не установлена)
- Выкачиваем и распаковываем свежую сборку JMeter
- Устанавливаем переменную среды JMETER_BIN на каталог с исполняемыми файлами JMeter (только для Windows)
- Запускаем jmeter.bat или jmeter.sh (в зависимости от операционной системы) из каталога bin
Единственная проблема, с которой я столкнулся на Windows, связана с тем, что значение переменной JMETER_BIN должно завершаться символом прямого или обратного слэша. Подробности можно посмотреть в запускаемом скрипте. Чтение инструкции также не будет лишним.
Запись скрипта
Это, пожалуй, самая эффектная возможность JMeter. Она уже описывалась ранее, но я повторюсь, поскольку в той статье речь шла об уже немного устаревшей версии. JMeter можно запустить в режиме proxy, таким образом, чтобы весь HTTP-трафик проходил через него. Все подробности взаимодействия будут автоматически записываться в выбранную Thread Group или Recording Controller. Для добавления новых узлов в дерево, просто нажимаем на правую кнопку мыши и выбираем требуемый тип из выпадающего меню:
Thread Group, управляющая такими настройками как количество потоков, используемых для тестирования и количество запросов в тесте, находится в категории Treads (Users), а сам HTTP(S) Test Script Recorder в Non-Test Elements.
Я выделил на рисунке настройки, на которые следует обратить внимание. Порт возможно придётся изменить, если на 8080 уже что-то поднято. В сложных случаях, в Test Plan придётся добавить HTTP Cookie Manager и HTTP Authorization Manager. После нажатия кнопки Start, идём в настройки любимого браузера:
Взаимодействие с Яндекс, внезапно, оказывается очень непростым:
Полученные запросы (HTTP Request) вместе с их настройками (HTTP Header Manager) можно перенести в любое место скрипта, используя любимые всеми команды Copy&Paste (Drag&Drop тоже работает). Даже если вы твердо уверены в том, что происходит на вашем сайте, Script Recorder может быть очень полезен, для того чтобы узнать подробности. Кроме того, автоматическая генерация скриптов куда веселее чем вбивание их руками. Более подробно процесс записи скриптов описан в этой инструкции.
Переменные
Для чего-то мало-мальски серьёзного, нам потребуется возможность параметризации. Для примера, предположим, что нам требуется задать таймауты, в течение которых JMeter будет ожидать ответа сервера. Вбивать их заново в каждый HTTP Request, при любом изменении, было бы слишком утомительно. Заодно определим настройки HTTP Proxy (если он используется):
В поле Password забито значение ${user_pass}, тут уж вам придётся поверить мне на слово. Сами настройки удобно держать в User Defined Variables (этот элемент можно найти в категории Config Element):
Пустые значения переменных проблемой не являются. В соответствующие настройки будут подставлены пустые строки, как того и требуется, в случае если HTTP Proxy не используется. Можно пойти ещё дальше и действительно разместить все HTTP-настройки в одном месте:
Элемент HTTP Request Defaults, также как и User Defined Variables расположен в категории Config Element.
Отладка
Теперь, было бы неплохо видеть, что происходит при выполнении сценария. Различного вида визуализаторы размещаются в категории Listener. Нам понадобится View Results Tree. Добавим его и запустим сценарий на выполнение командой Run/Start (Ctrl+R). Можно видеть, что ответ сервера также бывает непростым:
Такая картина наблюдается, если адрес редиректит нас на другую страницу и с этим может быть связана одна проблема. Если мы попытаемся анализировать ответ сервера (как это делать я покажу ниже), нам будет доступен лишь последний ответ (той страницы на которую произошёл redirect). Если ответ с предыдущей страницы нам также интересен, автоматический redirect придётся отключить. За это отвечает настройка Follow Redirects элемента HTTP Request. Разобрав ответ, мы сможем получить адрес целевой страницы и выполнить повторный запрос вручную.
Есть ещё один элемент, крайне полезный для отладки сценариев. Он находится в категории Sampler и называется Debug Sampler. Каждый раз, когда до него доходит управление, он выводит текущие значения всех переменных. Добавим его в Thread Group и запустим сценарий ещё раз (для того, чтобы очистить вывод предыдущего запуска, удобно использовать комбинацию клавиш Ctrl+E):
Все переменные как на ладони. Удобно.
JDBC Request
Этот Sampler открывает нам доступ в любую базу данных, поддерживающую протокол JDBC. Для начала, добавим в Test Plan конфигурационный элемент с настройками подключения к серверу БД (JDBC Connection Configuration):
Помимо собственно настроек подключения к БД, здесь важно заполнить поле Variable Name. Это имя будет использоваться в JDBC Request (Sampler) для доступа к пулу сессий:
Если вам интересны результаты select-а, придётся заполнить Variable Names. Сам JMeter парсить SQL-запросы на предмет имён столбцов не умеет. Можно перечислять имена столбцов через запятую и пропускать столбцы, не давая им имени. Вставляем Debug Sampler и смотрим, что получилось:
Видим, что документация не врёт. Появились переменные urls_1 и urls_2 (количество строк, как и обещали, в urls_#). В этом месте, стоит соблюдать осторожность. Записи выбираются не по одной, а все сразу и прочитав >1000 строк можно легко отожрать слишком много памяти. Теперь, было бы неплохо обойти полученные адреса в цикле:
Да, именно вот так заковыристо. Набор переменных urls перебираем от 0 до ${urls_#} и текущее значение помещаем в url. Сам ForEach Controller можно найти в категории Logic Controller. Внутри него создадим параметризованный HTTP Request. Запускаем, смотрим:
Всё работает.
Регулярные выражения
Теперь, результаты обращений к Web-серверам хотелось бы проанализировать. Для этого, нам предоставлена вся мощь регулярных выражений. Regular Expression Extractor можно найти в Post Processors. Добавим его в HTTP Request и сконфигурируем:
Здесь, нас интересует только код ответа по HTTP (но, по иллюстрации видно, что можно обрабатывать и содержимое ответа). Будем извлекать цепочку цифр (Regular Expression) и помещать результат применения шаблона (Template) в переменную http_result (Reference Name):
Как и ожидалось, получаем 200. Заодно, можно видеть, каким образом осуществляется захват в переменные регулярным выражением.
Что-то там внутри
Теперь, допустим, что нас интересует время, в течение которого выполнялся HTTP-запрос. И интересует оно нас не просто для статистики, а мы его хотим как-то использовать в сценарии (например сложить в БД). С этой задачей поможет справиться BeanShell. Конкретно, мы используем его Pre — и PostProcessor-ы.
В первом будем получать timestamp:
Long t = ctx.getPreviousResult().currentTimeInMillis();
vars.put("timestamp", t.toString());
А во втором, получать с его помощью временную задержку:
Long d = ctx.getPreviousResult().currentTimeInMillis() - Long.parseLong(vars.get("timestamp"));
vars.put("delay", d.toString());
В общем, это тоже работает:
Но здесь следует сделать важное замечание. Поскольку, в настоящий момент, я занимаюсь не нагрузочным тестированием, производительность этой конструкции для меня не очень важна. Если в вашем случае это не так, стоит ознакомиться со следующей статьёй.
Запуск
Если бы не было этой возможности, не стоило бы и весь этот разговор заводить. В случае нагрузочного тестирования, сценарий можно запускать из GUI, нет проблем. Но если нас интересует автоматизация, необходимо уметь запускать его молча (например по cron-у). Разумеется такая возможность тоже есть:
./jmeter.sh -n -t test.jmx -l test.log
Сохраняем сценарий в файл с расширением jmx (внутри это XML) и запускаем эту команду. Сценарий отрабатывает без запуска GUI и заодно пишет результаты своей работы в лог. Всё просто и удобно.
Для запуска JMeter необходимо выполнить следующие шаги:
-
Скачать JMeter с официального сайта Apache JMeter или воспользоваться пакетным менеджером (например, Homebrew для macOS или Chocolatey для Windows).
-
Разархивировать скачанный архив в удобную для вас папку.
-
Запустить JMeter, запустив исполняемый файл bin/jmeter (для Windows это jmeter.bat, для macOS и Linux — jmeter.sh).
-
После запуска появится окно JMeter, в котором можно создавать и редактировать тест-планы для тестирования.
-
Сначала создайте новый тест-план, добавив необходимые элементы, такие как Thread Group, Sampler, Listener и т.д.
-
Настройте параметры каждого элемента в соответствии с вашими целями тестирования.
-
После настройки тест-плана, запустите его, нажав на кнопку «Start» или используя сочетание клавиш Ctrl+R.
-
После завершения тестирования JMeter предоставит вам результаты в виде графиков, таблиц и логов, которые можно проанализировать для оптимизации и улучшения производительности вашего приложения.
Содержание
- Установка Apache.JMeter
- Проверка целостности скачанного архива
- Запуск
- Плагины
- Настройка
В текущей статье описан простой быстрый способ настройки Apache.JMeter: скачать, распаковать, настроить.
Для каждодневного использования, более профессионального, рекомендую автоматизировать скачивание и настройку Apache.JMeter с использованием Apache Maven.
(https://loadtestweb.wordpress.com/2018/11/16/jmeter-maven-plugin/)
1. Установка Apache.JMeter
Дистрибутив JMeter берётся по ссылке со страницы Download Releases.
Скачиваются два файла:
- apache-jmeter-5.0.zip (zip)
- apache-jmeter-5.0.zip.asc (pgp)
Zip-файл скачивается с ближайшего зеркала, а подпись скачивается с сервера Apache.
Можно оба файла скачать с сервера Apache, тогда проверка подписи особо не нужна. Также с сервера Apache берётся дистрибутив прежних версий, например, версии 3.1:
- https://archive.apache.org/dist/jmeter/binaries/
- apache-jmeter-5.0.zip
Архив нужно распаковать, например, в каталог:
- D:\tools\apache-jmeter-5.0\
Установка завершена.
Перед запуском можно проверить целостность скачанного архива, а также установить java нужной версии.
Назначение каталогов и файлов:
- bin — исполняемые файлы Apache.JMeter
- ApacheJMeter.jar — java-сборка Apache.JMeter
- heapdump.cmd, heapdump.sh
- jmeter.bat, jmeter.sh, jmeter
- jmeter-n.cmd
- docs — документация
- extras — дополнительные скрипты и утилиты
- lib — библиотеки
- licenses — лицензии
- printable_docs — документация
- LICENSE — лицензия Apache 2.0 на Apache.JMeter (перевод, описание)
- NOTICE — примечание
- README.md — описание, требования, инструкция по установке и сборке
1.1. Проверка целостности скачанного архива (опционально)
Удобно использовать консоль git-клиента в Windows, так как по умолчанию в MinGW есть утилита gpg для проверки корректности подписи
Порядок проверки:
- Проверить pgp-подпись с помощью утилиты gpg.
- Если RSA ключ не был найден, то
- скачать указанный ключ с сервера pgpkeys.mit.edu с помощью утилиты gpg.
- проверить pgp-подпись с помощью утилиты gpg снова.
Если подпись корректна, то будет видна строчка «Good signature».
user@host MINGW64 /d/Distrib/Development/Apache.JMeter $
gpg --verify apache-jmeter-3.2.zip.asc apache-jmeter-3.2.zip
gpg: Signature made 9 апр 2017 г. 18:08:59 RTZ using RSA key ID 0612B399
gpg: Can't check signature: public key not founduser@host MINGW64 /d/Distrib/Development/Apache.JMeter $
gpg --keyserver pgpkeys.mit.edu --recv-key 0612B399
gpg: requesting key 0612B399 from hkp server pgpkeys.mit.edu
gpg: key 0612B399: public key "Milamber (ASF) <milamber@apache.org>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)user@host MINGW64 /d/Distrib/Development/Apache.JMeter $
gpg --verify apache-jmeter-3.2.zip.asc apache-jmeter-3.2.zip
gpg: Signature made 9 апр 2017 г. 18:08:59 RTZ using RSA key ID 0612B399
gpg: Good signature from "Milamber (ASF) <milamber@apache.org>"
gpg: aka "Milamber (Milamberspace) <milamberspace@gmail.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: C492 3F9A BFB2 F1A0 6F08 E88B AC21 4CAA 0612 B399
1.2. Установка Java
Выдержка из файла README.md гласит, что нужна Java 8:
## Requirements
The following requirements exist for running Apache JMeter:
* Java Interpreter:
A fully compliant Java 8 Runtime Environment is required for Apache JMeter to execute. A JDK with keytool utility is better suited for Recording HTTPS websites. Java 9 is not yet supported as of version 3.3.
И рекомендуется установить JDK, а не просто JRE.
Утилита keytool нужна, чтобы Apache.JMeter мог перехватывать и расшифровывать трафик по протоколу HTTPS, работая в режиме прокси.
Рекомендация, что нужно именно JDK сомнительная, так как в JRE тоже есть утилита keytool:
- C:\Program Files\Java\jre1.8.0_192\bin\keytool.exe
Считаю, что требование JDK для работы keytool — ошибка Apache.JMeter, которая уже исправлена, но в документации ещё не отражена:
- https://bz.apache.org/bugzilla/show_bug.cgi?id=61026
Java (JRE) скачивается с сайта:
- https://java.com/ru/download/manual.jsp
- http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
Java (JDK), Java SE Development Kit 8, скачивается с сайта:
- http://www.oracle.com/technetwork/java/javase/downloads/2133151
- http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
На текущий момент, актуальная версия 8 Update 192.
2. Запуск
2.1. Первый запуск JMeter в Windows 7
Для запуска JMeter в графическом режиме используются скрипты:
- bin
- jmeter.bat — для Windows
- jmeter.sh — для Linux
После первого запуска Apache.JMeter GUI в Windows 7 вероятно вы увидите предупреждение и затем ошибку:
"findstr" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Not able to find Java executable or version. Please check your Java installation.
errorlevel=2
Для продолжения нажмите любую клавишу . . .
На самом деле всё в порядке. По какой-то причине каталог C:\Windows\system32\ в Windows 7 — Windows 10 пропал из переменной окружения PATH. Всегда там был и с одним из обновлений пропал, или какая-то неумелая программа его удалила оттуда.
Чтобы C:\Windows\system32\ вернуть в PATH, можно модифицировать файл jmeter.bat добавив в него строку:
set PATH=C:\Windows\System32;%PATH%
Или можно отредактировать значение переменной PATH для всей операционной системы, тогда починится не только скрипт jmeter.bat.
Теперь скрипт jmeter.bat работает корректно и Apache.JMeter запускается.
2.2. Запуск JMeter в консольном режиме
2.3. Полезный командный файл для открытия теста
3. Плагины
3.1. Установка плагинов в Apache.JMeter
3.2. Часто используемые плагины
3.3. Дополнительные полезные плагины
4. Настройка
4.1. Настройка объёма оперативной памяти для java
4.2. Настройка кодировки по умолчанию для java
4.3. Настройки Apache.JMeter
4.4. Настройки логирования Apache.JMeter
JMeter isn’t particularly hard to install. But that’s easy to say when you’ve done it many times.
Basically if you want to get started with JMeter on Windows. That’s great because this guide is for you! Let’s see how to install JMeter on Windows.
Install Java¶
Check Java Version¶
JMeter is a Java program: the Java Virtual Machine must be installed prior to installing JMeter.
To check if Java is installed properly:
- Open a Command-Line console by clicking on the start menu then type
cmd
, - Enter the command:
java -version
.
It should display something like:
java version "1.8.0_144"
Java(TM) SE Runtime Environment <build 1.8.0_144-b01>
Java HotSpot(TM) Client VM <build 25.144-b01, mixed mode, sharing>
Java Setup¶
If it’s not the case (like showing java command not found
, then Java must be installed.
To install Java:
- Open the Open JDK in your browser,
- Download the appropriate executable setup file,
- Run the executable setup file,
- And follow instructions.
Once Java is installed, make sure the java -version
command works properly.
JMeter Setup¶
Now that Java is installed, we’re going to install JMeter:
Unzip Archive¶
- First, Download JMeter: prefer ZIP archive format,
- Using the Explorer, Open the folder,
- Right-click on JMeter’s ZIP archive and select
Extract to apache-jmeter-xx\
.
JMeter Directories¶
Great! Now we have successfully downloaded and unzipped JMeter. You should see the following files within the apache-jmeter-XX
folder:
- backups: contains the backups of JMX files (also known as JMeter projects) you edited within JMeter,
- bin: contains the executable files to launch JMeter, and configuration files to tweak JMeter settings,
- docs: JMeter’s documentation in HTML format,
- extras: some useful side tools like excel sheets to compute graphs from JTL result files,
- lib: JMeter’s libraries which are mostly Java JAR files,
- printable_docs: documentation in printable format.
It’s now time to see how to launch JMeter.
Run JMeter¶
The screenshot below shows what JMeter’s bin/
folder contains. It’s a bunch of configuration and executable files.
to run JMeter:
- Browse to
bin/
folder by double-clicking on it, - double-click on
jmeter.bat
to run it, - It should open both a command-line terminal and JMeter’s UI.
The screenshot above shows JMeter 4.0 graphical interface with the new dark theme. As said before, it wasn’t difficult at all, but sometimes it’s always pleasant to have someone help you to install and run JMeter.
Upgrading JMeter¶
When a new JMeter version is available, the new JMeter version must be installed in a fresh new folder.
Please do not unzip a new JMeter version over a previous one.
Simply repeat the steps above to install a new version.
Removing JMeter¶
Simply delete the apache-jmeter-XX
folder and you’re done. Yes, it’s that simple!
Last updated on Sep 06,2024 15.9K Views
A Data Science Enthusiast with in-hand skills in programming languages such as… A Data Science Enthusiast with in-hand skills in programming languages such as Java & Python.
It is quite difficult for humans to execute Performance Testing manually, so it is inevitable that we depend on a performance testing tool to do the job. JMeter is used for ensuring quality deliveries in time. This article on “How to install JMeter” will provide a step-by-step guidance in the following sequence:
- Introduction to JMeter
- Prerequisites to install JMeter
- How to install JMeter
Introduction to JMeter
Apache JMeter is a testing tool used for analyzing and measuring the performance of different software services and products. It is a pure Java open source software used for testing Web Application or FTP application.
It is used to execute performance testing, load testing and functional testing of web applications. JMeter can also simulate a heavy load on a server by creating tons of virtual concurrent users to the web server.
How does JMeter perform Testing?
Let’s have a look at the different steps performed by JMeter during testing:
- It creates a request and sends to the server.
- It receives the response from servers, collects them and visualizes those details in a chart or graph.
- It processes the response from the server.
- It generates the test result in several formats such as text, XML, JSON so that the tester can analyze data.
Now that you know what is JMeter and how it works, let’s move on and have a look at the prerequisites for installing JMeter.
Prerequisites to install JMeter
JMeter is a pure Java desktop application. It requires a fully compliant JVM 6 or higher. You need to download and install the latest version of Java SE Development Kit.
The Operating Systems compatible with JMeter are:
- Linux
- Windows
- Mac OS
- Ubuntu
Now let’s move ahead and have a look at the steps involved in the installation process of JMeter.
JMeter Installation | Edureka
This edureka video on “How to install JMeter” will provide you with a step by step guide on how to install JMeter and the prerequisites for the working of JMeter. It also helps you understand how to create a test plan.
How to Install JMeter
The steps involved in the installation process of JMeter include:
Step 1 – Install Java
JMeter is a pure Java desktop application and it requires a fully compliant JVM 6 or higher. You can download and install the latest version of Java SE Development Kit.
You can check in the command prompt if the installation is successful. It will give you the following output :
Step 2 – Download JMeter
The Latest version of JMeter available is 5.1. You can download any of the binaries.
Step 3 – Install JMeter
Installation of JMeter is extremely easy and simple. You simply unzip the zip/tar file into the directory where you want JMeter to be installed. There is no tedious installation screen to deal with.
If you are using Windows, just run the file /bin/jmeter.bat to start JMeter in GUI mode:
Now that you have understood the installation process, you can create your own test plan in JMeter with the help of different elements.
The different components of JMeter are called Elements. Each Element is designed for a specific purpose. Some of the main elements are :
- Thread Group
- Samplers
- Listeners
- Configuration
Thread Group
Thread Groups is a collection of Threads. Each thread represents one user using the application under test. It simulates one real user request to the server. The controls for a thread group also allow you to set the number of threads for each group.
Samplers
JMeter supports testing HTTP, FTP, JDBC, and many more protocols. Thread Groups simulate user request to the server. Samplers help the Thread Group to know which type of requests (HTTP, FTP, etc.) it needs to make.
- FTP request: You can use an FTP request sampler in JMeter to do a performance test on FTP server. This controller lets you send an FTP “download file” or “upload file” request to an FTP server.
- HTTP request: This sampler lets you send an HTTP/HTTPS request to a web server.
- JDBC request: This sampler lets you execute Database Performance Testing. It sends a JDBC Request to a database.
- BSF Sampler: This sampler allows you to write a sampler using a BSF scripting language.
- Access Log Sampler: This sampler allows you to read access logs and generate HTTP requests.
- SMTP Sampler: This sampler is used to send email messages using the SMTP protocol.
Listeners
Listeners show the results of the test execution. They can show results in a different format such as a tree, table, graph or log file.
- Graph result listeners display the server response times on a Graph
- View Result Tree show results of the user request in basic HTML format
- Table Result show summary of a test result in table format
- Log shows the summary a test results in the text file
Configuration Elements
Configuration Elements are used to set up defaults and variables for later use by samplers.
- CSV Data Set Config : TheCSV Data Set Config allows you to read different parameters from text file. It is used to read lines from a file, and split them into variables.
- HTTP Cookie Manager : HTTP Cookie Manager has the same feature as a web browser. If you have an HTTP Request and the response contains a cookie, the Cookie Manager automatically stores that cookie to use it for all future requests.
- HTTP request default : This element lets you set default values that your HTTP Request controllers use.
- Login Config Element : The Login Config Element lets you add or override username and password settings in samplers.
Now with this, we have come to the end of our “How to Install JMeter” article. You are all set to create your own test plan for performance testing.
Now that you know how to install JMeter, check out the Performance Testing Using JMeter Certification Course by Edureka, a trusted online learning company with a network of more than 250,000 satisfied learners spread across the globe. This course provides you insights into software behavior during workload. In this course, you will learn how to check the response time and latency of software and test if a software package is efficient for scaling. The course will help you check the strength and analyze the overall performance of an application under different load types.
Got a question for us? Please mention it in the comments section of “How to install JMeter” and we will get back to you.