Плагин 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 файле.

  1. Всегда перезапускайте процесс подчиненного / удаленного 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>
Другие вопросы по тегам