Плагин JMeter Maven не предоставляет результаты тестирования при использовании конфигурации удаленного хоста
При запуске теста JMeter с плагином jmeter-maven со следующей конфигурацией...
<project>
...
<build>
<plugins>
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<executions>
<execution>
<id>jmeter-tests</id>
<phase>integration-test</phase>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
<configuration>
<customPropertiesFile>${basedir}/src/test/jmeter/jmeter.properties</customPropertiesFile>
<testFilesDirectory>${basedir}/src/test/jmeter</testFilesDirectory>
<remoteConfig>
<startServersBeforeTests>true</startServersBeforeTests>
<serverList>server01,server02</serverList>
<stopServersAfterTests>true</stopServersAfterTests>
</remoteConfig>
<testResultsTimestamp>false</testResultsTimestamp>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
... тогда тесты выполняются должным образом на заданных удаленных серверах "server01" и "server02". Задача Maven не ждет процесса удаленного хоста, но заявляет, что все в порядке:
[INFO] -------------------------------------------------------
[INFO] P E R F O R M A N C E T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO]
[INFO] Proxy server is not being used.
[debug] JMeter is called with the following command line arguments: -n -t /home/me/demo/src/test/jmeter/test.jmx -l /home/me/demo/target/jmeter/results/20130925-test.jtl -d /home/me/demo/target/jmeter -q /home/me/demo/src/test/jmeter/jmeter.properties -r -R server01,server02 -X
[info] Executing test: test.jmx
[info] Completed Test: test.jmx
[INFO]
[INFO] Test Results:
[INFO]
[INFO] Tests Run: 1, Failures: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:2.15:verify (verify)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.598s
[INFO] Finished at: Wed Sep 25 16:43:00 CEST 2013
[INFO] Final Memory: 21M/349M
[INFO] ------------------------------------------------------------------------
Но никаких результатов теста не собрано. Если вы проверите соответствующий файл результатов JMeter, то обнаружите пустой:
cat /home/me/demo/target/jmeter/results/20130925-test.jtl
#empty
Таким образом, процесс Maven завершается до того, как удаленные серверы завершили выполнение теста. Неправильно ли я ожидать, что плагин jmeter-maven-plugin должен собирать результаты тестирования удаленных хостов вместо записи 0-байтового файла (20130925-test.jtl)?
Если я запускаю тот же тест без использования удаленных агентов JMeter, то все работает нормально. Jmeter-maven-plugin выполняет тест и записывает результат в соответствующий файл "jtl". Так что может быть не так с приведенной выше конфигурацией относительно элемента "remoteConfig"?
ОБНОВЛЕНИЕ 1: я использовал плагин jmeter-maven-версия 1.8.1 и Maven 3.0.5
ОБНОВЛЕНИЕ 2: В приведенном выше примере выполнено всего 1 тест JMeter. Если в каталоге ${basedir}/src/test/jmeter более одного теста JMeter, сборка Maven завершится неудачно. В этом случае файл журнала первого теста JMeter не содержит ошибок, но все другие журналы испытаний (например,.ttarget/jmeter/logs/test2.log) содержат следующее сообщение:
Error in NonGUIDriver java.lang.IllegalStateException: Engine is busy - please try later
Таким образом, 1-й тест был выполнен на удаленном агенте (также без сбора каких-либо результатов в соответствующем файле "jtl" на клиентском сайте), но другие тесты были отклонены удаленными хостами. Таким образом, кажется, что плагин maven-jmeter-plugin пытается распараллелить выполнение тестов, но ИМХО они должны выполняться сериализованным способом.
2 ответа
Вы не указываете, куда должен идти вывод, поэтому все результаты отбрасываются
измените конфигурацию, как указано ниже, добавив "java.rmi.server.hostname".
<remoteConfig>
<startServersBeforeTests>true</startServersBeforeTests>
<serverList>server01,server02</serverList>
<stopServersAfterTests>false</stopServersAfterTests>
</remoteConfig>
<propertiesSystem>
<java.rmi.server.hostname>**Master.invoking.machine.com**</java.rmi.server.hostname>
</propertiesSystem>
Если сборка завершится неудачно с какой-либо ошибкой или ошибкой в ваших файлах Test plan.jmx, ожидается, что вы не получите никаких результатов в JTL или в любом выходном формате. пример: предположим, что у вас есть 2 тест-плана, первый выполнен правильно, второй не выполнен из-за некоторой ошибки в тест-плане [например, отсутствуют некоторые банки зависимостей для вашего плана]. Если это произойдет, так как вы используете один и тот же файл jtl для обоих планов, ваш файл jtl будет несбалансированным и будет нулевым.
Я бы посоветовал
1. Создайте 2 примера тестовых планов и поместите их в ${basedir}/src/test/jmeter и выполните их, проверьте, все еще ли вы видите ошибки сборки. Если это успешно, проверьте результаты в jtl файле.
- Всегда перезапускайте процесс подчиненного / удаленного Jmeter, прежде чем даже начинать тесты.
Использование версии моментального снимка плагина и указание репозитория плагина исправило проблему для меня.
Я знаю, что не идеальный вариант создания снимков в poms, но если вы используете jmeter в тестовом проекте, а не в prod-коде, это не должно быть слишком большой проблемой.
мои 2 цента
<pluginRepositories>
<pluginRepository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>1.8.2-SNAPSHOT</version>
<executions>
<execution>
<id>jmeter-tests</id>
<phase>verify</phase>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
<configuration>
<remoteConfig>
<startServersBeforeTests>true</startServersBeforeTests>
<!--<stopServersAfterTests>true</stopServersAfterTests>-->
<serverList>192.168.1.27</serverList>
</remoteConfig>
</configuration>
</plugin>
</plugins>
</build>