The most detailed jmeter performance test in the whole network – distributed pressure test, performance tuning and its detailed steps

Summary of Performance Testing

Performance testing is a type of software testing that measures a system’s stability, scalability, reliability, speed, and resource usage. It identifies performance bottlenecks and ensures business needs are met. Performance testing is required for many systems, such as web applications, databases, and operating systems.

There are many types of performance tests, and some concepts are very similar:

  • Load Testing
  • Baseline Testing
  • Smoke Testing
  • Stress Testing
  • Soak Testing
  • Endurance Testing
  • Capacity Testing
  • Longevity Testing
  • Peak Testing
  • Spike Testing
  • Volume Testing
  • Capacity Tests
  • Reliability Testing
  • Scalability Testing

Tools for performance testing

Similarly, there are many tools for performance testing:

  • Apache JMeter
  • HP LoadRunner
  • Gatling
  • Blazemeter
  • k6
  • NeoLoad
  • TestComplete
  • Silk Performer
  • Rational Performance Tester
  • Apica LoadView
  • AppDynamics
  • Dynatrace
  • New Relic

It’s hard to say which tool is the best, it depends on your needs and budget. If you want open source and easy to use, then JMeter is a good choice. If you want a commercial tool, try LoadRunner and NeoLoad. The important point is that no one tool can handle all performance tests, and many times we need to use them in combination.

Distributed testing of JMeter

In this article, I will introduce JMeter’s distributed testing in detail, which we often use for performance testing.

In the distributed test role, we need a control node Controller and multiple work node Workers. If you want your requests to increase, you can do so by continuously adding worker nodes. Controller controls Workers, but it does not run specific test cases. Workers are connected to the target system for specific testing.

The overall system architecture is roughly as follows:

Worker can be on different servers, so it is called distributed, and therefore it can use the resources of multiple computers to simulate enough requests.

Detailed steps

I will introduce step by step how to use JMeter distributed testing for performance testing. The general structure is as follows:

I run the Controller on a Mac, and I run the Workers through two Ubuntu servers. It should be noted that their IPs are on the same intranet. In order to save trouble for the target system, I directly request Bing, stackoverflow, QQ.

Step 1: Install JDK

Apache JMeter is written in Java and requires a Java runtime environment to run it. Install on Ubuntu as follows:

sudo apt install openjdk-11-jdk

Step 2: Download Apache JMeter

Go to the download page of the official website to download the latest JMeter package apache-jmeter-5.5.zip, and unzip it:

unzip apache-jmeter-5.5.zip

All nodes need to be downloaded and installed.

The location of Controller is as follows:

/Users/larry/Software/apache-jmeter-5.5

The location of Workers is as follows:

home/larry/software/apache-jmeter-5.5

You don’t have to have the same location as me, I listed it to correspond to the following commands.

Step 3: Prepare the JMX file for testing

JMeter stores all the test information in the jmx file, open the tool to write the test case as follows:

Then define how to run the entire test, here is defined to use 8 threads, 60 seconds warm-up and 120 seconds duration:

I put the file here:

$ ls /Users/larry/Software/apache-jmeter-5.5/projects/pkslow
performance-test.jmx

In my case, only the Controller needs this jmx file, but the Worker does not. They can interact via RMI.

Step 4: Start Workers

To start Workers first, start it in server mode. After starting, it will not perform any tests. It will wait for the Controller and instructions connected to it:

  • Worker 1:
$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.171
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.171:41709](local), objID:[-2af2edf6:1882245cfde:-7fff, 1980465993472976097]]]
  • Worker 2:
$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.60
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.60:45337](local),objID:[18489452:1882246a88b:-7fff, 4749047852254882466]]]

Note: A java.rmi.RemoteException may be encountered if you do not specify the parameter: java.rmi.server.hostname.

$ ./software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true
May 15, 2023 5:43:16 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.1.1:33021](local), objID:[-7155c199:1881ecaf233:-7fff, -6972385484103483700]]]
Server failed to start: java.rmi.RemoteException: Cannot start. ubuntu is a loopback address.
An error occurred: Cannot start. ubuntu is a loopback address.

Step 5: Start Controller

After all the Workers are in place, wait for the coach to give an order. When starting, specify the jmx file, the location where the report is generated, and the IP of the Worker, as follows:

$ cd /Users/larry/Software/apache-jmeter-5.5/

$ ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl.disable=true - R 192.168.50.171, 192.168.50.60
Creating summarizer <summary>
Created the tree successfully using projects/pkslow/performance-test.jmx
Configuring remote engine: 192.168.50.171
Configuring remote engine: 192.168.50.60
Starting distributed test with remote engines: [192.168.50.171, 192.168.50.60] @ May 16, 2023 10:37:31 PM CST (1684247851079)
Remote engines have been started:[192.168.50.171, 192.168.50.60]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary + 1 in 00:00:02 = 0.7/s Avg: 1260 Min: 1260 Max: 1260 Err: 0 (0.00%) Active: 2 Started: 2 Finished: 0
summary + 111 in 00:02:31 = 0.7/s Avg: 4433 Min: 41 Max: 50474 Err: 4 (3.60%) Active: 15 Started: 16 Finished: 1
summary = 112 in 00:02:33 = 0.7/s Avg: 4405 Min: 41 Max: 50474 Err: 4 (3.57%)
summary + 64 in 00:00:19 = 3.3/s Avg: 25706 Min: 62 Max: 66745 Err: 31 (48.44%) Active: 0 Started: 16 Finished: 16
summary = 176 in 00:02:52 = 1.0/s Avg: 12151 Min: 41 Max: 66745 Err: 35 (19.89%)
Tidying up remote @ May 16, 2023 10:40:24 PM CST (1684248024629)
... end of run

More information can be viewed in jmeter.log:

$ tail -f jmeter.log
2023-05-16 22:40:29,956 INFO o.a.j.r.d.JsonExporter: Found data for consumer statisticsSummary in context
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Creating statistics for overall
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Creating statistics for other transactions
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Checking output folder
2023-05-16 22:40:29,958 INFO o.a.j.r.d.JsonExporter: Writing statistics JSON to /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports/statistics.json
2023-05-16 22:40:30,006 INFO o.a.j.r.d.ReportGenerator: Exporting data using exporter:'html' of className:'org.apache.jmeter.report.dashboard.HtmlTemplateExporter'
2023-05-16 22:40:30,007 INFO o.a.j.r.d.HtmlTemplateExporter: Will generate dashboard in folder: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports
2023-05-16 22:40:30,142 INFO o.a.j.r.d.HtmlTemplateExporter: Report will be generated in: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports, creating folder structure
2023-05-16 22:40:30,145 INFO o.a.j.r.d.TemplateVisitor: Copying folder from '/Users/larry/Software/apache-jmeter-5.5/bin/report-template' to '/Users/larry/Software/apache -jmeter-5.5/projects/pkslow/Reports', got message: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports, found non empty folder with following content [/Users/larry/Software/ apache-jmeter-5.5/projects/pkslow/Reports/statistics.json], will be ignored
2023-05-16 22:40:30,472 INFO o.a.j.JMeter: Dashboard generated

Worker will also start working and print some simple logs after receiving instructions:

$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.171
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.171:44621](local), objID:[4d13369d:18824fd059a:-7fff, 2287886479123818682]]]
Starting the test on host 192.168.50.171 @ 2023 May 16 22:37:31 HKT (1684247851980)
Warning: Nashorn engine is planned to be removed from a future JDK release
Finished the test on host 192.168.50.171 @ 2023 May 16 22:40:24 HKT (1684248024679)

Step 6: Results and Report

After the entire test is run, you can find the corresponding results:

$ ls -l /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/
total 72
drwxr-xr-x 6 larry staff 192 May 16 22:40 Reports
-rw-r--r-- 1 larry staff 23472 May 16 22:40 performance-test.csv
-rw-r--r-- 1 larry staff 10593 May 16 09:50 performance-test.jmx

Open index.html directly in the Reports directory:

other tips

Change the port of the Worker

The default port of Worker is 1099, but it can be changed, and sometimes it must be changed, such as setting up a firewall, or starting multiple Workers on the same Server. The specific commands are as follows:

$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.60 -Dserver_port=1984

Of course, the Controller also needs to adjust its commands synchronously:

$ ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl.disable =true -R 192.168.50.171:1984,192.168.50.60:1984

Run tests with nohup

Performance tests sometimes need to run for a long time, it is recommended to use nohup mode to run:

$ nohup ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl. disable=true -R 192.168.50.171:1984,192.168.50.60:1984 &
[1] 81248

Add time when specifying results

In this way, it is very clear when it starts to run, and it also avoids errors in the directory.

$ nohup ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test."$(date + %F.%T)".csv - e -o projects/pkslow/Reports-"$(date + %F.%T)" -Dserver.rmi.ssl.disable=true -R 192.168.50.171:1984,192.168.50.60:1984 &

However, you should also pay attention to regularly cleaning up unnecessary results, so as not to take up hard disk space.

Let’s share the knowledge structure diagram of the development direction of automated test engineers that I compiled in 2023, which may be the most complete.

Mashang Education software testing full career advancement from zero to test development VIP course | ProcessOn free online drawing, online flow chart, online mind map

If it is helpful to you, please like it and collect it, give the author an encouragement, and it will be convenient for you to find it quickly next time, thank you.

If you want to get the video video tutorials and hands-on interfaces that accompany this article. Please click hard to promote the small card at the end of the article

And send me the article link of the required information to get it

If you want to get resume template + interview technique book + job search video + thousands of real test questions,

Please click hard to promote the small card at the end of the article

And send me the article link of the required information to get it