Skip to content

Remote Server Configuration

Mark Collin edited this page Jun 14, 2022 · 23 revisions

Distributed testing pre-requisite

Since JMeter 4.0, you need to create a keystore that will be used by JMeter to secure RMI communication between client and server.

See Setting up SSL in JMeter documentation.

It mainly consists of calling jmeter/bin/create-rmi-keystore.(sh/bat) and putting the generated file rmi_keystore.jks in:

  • src/test/conf/rmi_keystore.jks

Remote Start And Stop Of Servers Via <remoteConfig>

Setting the <startServersBeforeTests> option will result in a --runremote command being send to JMeter which will start up any remote servers you have defined in your jmeter.properties when your first test starts.

Setting the <stopServersAfterTests> option will result in a --remoteexit command being send to JMeter which will shut down all remote servers defined in jmeter.properties after your last test has been run.

<startServersBeforeTests> and <stopServersAfterTests> can be used independantly so that it is possible to use another process to start and stop servers if required.

<project>
    [...]
        <build>
            <plugins>
                <plugin>
                    <groupId>com.lazerycode.jmeter</groupId>
                    <artifactId>jmeter-maven-plugin</artifactId>
                    <version>3.6.0</version>
                    <executions>
                        <!-- Generate JMeter configuration -->
                        <execution>
                            <id>configuration</id>
                            <goals>
                                <goal>configure</goal>
                            </goals>
                        </execution>
                        <!-- Run JMeter tests -->
                        <execution>
                            <id>jmeter-tests</id>
                            <goals>
                                <goal>jmeter</goal>
                            </goals>
                        </execution>
                        <!-- Fail build on errors in test -->
                        <execution>
                            <id>jmeter-check-results</id>
                            <goals>
                                <goal>results</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <remoteConfig>
                            <startServersBeforeTests>true</startServersBeforeTests>
                            <stopServersAfterTests>true</stopServersAfterTests>
                        </remoteConfig>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    [...]
</project>

You can configure the plugin to perform a remote start and stop for each individual test by setting the <startAndStopServersForEachTest> variable to true. If you set this along with <startServersBeforeTests> and <stopServersAfterTests> the <startServersBeforeTests> and <stopServersAfterTests> settings will be ignored.

<project>
    [...]
        <build>
            <plugins>
                <plugin>
                    <groupId>com.lazerycode.jmeter</groupId>
                    <artifactId>jmeter-maven-plugin</artifactId>
                    <version>3.6.0</version>
                    <executions>
                        <!-- Generate JMeter configuration -->
                        <execution>
                            <id>configuration</id>
                            <goals>
                                <goal>configure</goal>
                            </goals>
                        </execution>
                        <!-- Run JMeter tests -->
                        <execution>
                            <id>jmeter-tests</id>
                            <goals>
                                <goal>jmeter</goal>
                            </goals>
                        </execution>
                        <!-- Fail build on errors in test -->
                        <execution>
                            <id>jmeter-check-results</id>
                            <goals>
                                <goal>results</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <remoteConfig>
                            <startAndStopServersForEachTest>false</startAndStopServersForEachTest>
                        </remoteConfig>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    [...]
</project>

Instead of starting all remote servers, you can specify which ones to start by using the <serverList> option, this will accept a comma separated list of servers for JMeter to start (these must be defined in your jmeter.properties, see the remote testing page in the JMeter manual).

<project>
    [...]
        <build>
            <plugins>
                <plugin>
                    <groupId>com.lazerycode.jmeter</groupId>
                    <artifactId>jmeter-maven-plugin</artifactId>
                    <version>3.6.0</version>
                    <executions>
                        <!-- Generate JMeter configuration -->
                        <execution>
                            <id>configuration</id>
                            <goals>
                                <goal>configure</goal>
                            </goals>
                        </execution>
                        <!-- Run JMeter tests -->
                        <execution>
                            <id>jmeter-tests</id>
                            <goals>
                                <goal>jmeter</goal>
                            </goals>
                        </execution>
                        <!-- Fail build on errors in test -->
                        <execution>
                            <id>jmeter-check-results</id>
                            <goals>
                                <goal>results</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <remoteConfig>
                            <startServersBeforeTests>true</startServersBeforeTests>
                            <serverList>server1,server2</serverList>
                            <stopServersAfterTests>true</stopServersAfterTests>
                        </remoteConfig>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    [...]
</project>