性能測(cè)試概要
性能測(cè)試是軟件測(cè)試中的一種,它可以衡量系統(tǒng)的穩(wěn)定性、擴(kuò)展性、可靠性、速度和資源使用。它可以發(fā)現(xiàn)性能瓶頸,確保能滿足業(yè)務(wù)需求。很多系統(tǒng)都需要做性能測(cè)試,如Web應(yīng)用、數(shù)據(jù)庫(kù)和操作系統(tǒng)等。
性能測(cè)試種類非常多,有些概念也很相近:
- 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
性能測(cè)試的工具
同樣,性能測(cè)試的工具也非常多:
- Apache JMeter
- HP LoadRunner
- Gatling
- Blazemeter
- k6
- NeoLoad
- TestComplete
- Silk Performer
- Rational Performance Tester
- Apica LoadView
- AppDynamics
- Dynatrace
- New Relic
很難說(shuō)哪個(gè)工具是最好的,這取決于你的需求和預(yù)算。如果你想要開源易用的,那JMeter是一個(gè)不錯(cuò)的選擇。如果你想要一個(gè)商用的工具,不妨試試LoadRunner和NeoLoad。重要的一點(diǎn)是,沒有任何一款工具可以應(yīng)對(duì)所有性能測(cè)試,很多時(shí)候我們需要組合使用。
JMeter的分布式測(cè)試
我將在本文詳細(xì)介紹JMeter的分布式測(cè)試,我們經(jīng)常會(huì)通過(guò)它來(lái)做性能測(cè)試。
在分布式測(cè)試角色中,我們需要一個(gè)控制節(jié)點(diǎn)Controller,還有多個(gè)工作節(jié)點(diǎn)Workers。如果你想你的請(qǐng)求增加,那可以通過(guò)不斷增加工作節(jié)點(diǎn)來(lái)實(shí)現(xiàn)。Controller控制Workers,但它不跑具體的測(cè)試案例。Workers是連接目標(biāo)系統(tǒng)來(lái)做具體測(cè)試的。
整個(gè)系統(tǒng)架構(gòu)大概如下:
Worker可以在不同的服務(wù)器上,所以叫分布式,也因此可以利用多臺(tái)電腦的資源來(lái)模擬足夠的請(qǐng)求。
詳細(xì)步驟
我將一步步介紹如何使用JMeter分布式測(cè)試來(lái)做性能測(cè)試,大致架構(gòu)如下:
Controller我放在Mac上跑,Workers我是通過(guò)兩臺(tái)Ubuntu服務(wù)器來(lái)跑,要注意它們的IP是在同一內(nèi)網(wǎng)上的。目標(biāo)系統(tǒng)為了省事,我直接請(qǐng)求 Bing, stackoverflow, QQ。
Step 1: 安裝JDK
Apache JMeter是用Java寫的,運(yùn)行它需要Java運(yùn)行環(huán)境。在Ubuntu安裝如下:
sudo apt install openjdk-11-jdk
Stpe 2: 下載Apache JMeter
去官網(wǎng)的 download page 下載最新的JMeter包apache-jmeter-5.5.zip,然后解壓:
unzip apache-jmeter-5.5.zip
所有節(jié)點(diǎn)都需要下載安裝。
Controller的位置如下:
/Users/larry/Software/apache-jmeter-5.5
Workers的位置如下:
home/larry/software/apache-jmeter-5.5
你不必位置和我一樣,我列出來(lái)是為了與后面的命令對(duì)應(yīng)上。
Step 3: 準(zhǔn)備測(cè)試的JMX文件
JMeter把所有的測(cè)試信息都存放在jmx
文件中,打開工具寫測(cè)試案例如下:
然后定義整個(gè)測(cè)試怎么跑,這里定義的是使用8個(gè)線程,60秒的熱身和120秒的持續(xù)時(shí)長(zhǎng):
文件我放在這:
$ ls /Users/larry/Software/apache-jmeter-5.5/projects/pkslow
performance-test.jmx
我的案例只是Controller需要這個(gè)jmx
文件,Worker是不需要的。它們可以通過(guò)RMI來(lái)交互。
Step 4: 啟動(dòng)Workers
要先啟動(dòng)Workers,以服務(wù)器模式來(lái)啟動(dòng),啟動(dòng)后不會(huì)執(zhí)行什么測(cè)試,它會(huì)等待與它連接的Controller和指令:
- 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]]]
“注意: 可能會(huì)遇到j(luò)ava.rmi.RemoteException,如果你沒指定參數(shù):
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: 啟動(dòng)Controller
所有Workers就位后,就等主帥一聲令下。啟動(dòng)時(shí)要指定jmx文件,報(bào)告生成的位置,還有Worker的IP,如下:
$ 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 summariser <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
更多信息可以查看?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收到指令也會(huì)開始工作并打印一些簡(jiǎn)單的日志:
$ /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: 結(jié)果和報(bào)告
整個(gè)測(cè)試跑完后,可以找到對(duì)應(yīng)的結(jié)果:
$ 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
在Reports目錄下直接打開?index.html:
其它提示
改變Worker的端口
Worker的默認(rèn)端口是1099,但它是可以改變的,有些時(shí)候也必須改變,如設(shè)置的防火墻,或者需要在同一臺(tái)Server啟動(dòng)多個(gè)Worker。具體命令如下:
$ /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
當(dāng)然,Controller也要同步調(diào)整自己的命令:
$ ./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
使用nohup來(lái)跑測(cè)試
性能測(cè)試有時(shí)需要跑很長(zhǎng)時(shí)間,建議使用nohup模式來(lái)運(yùn)行:
$ 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
指定結(jié)果時(shí)添加時(shí)間
這樣很清晰知道是什么時(shí)候開始跑的,也避免目錄存在報(bào)錯(cuò)。
$ 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 &
不過(guò)這樣也要注意定期清理不需要的結(jié)果,以免占用硬盤空間。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-783689.html
2024最新Jmeter接口測(cè)試從入門到精通(全套項(xiàng)目實(shí)戰(zhàn)教程)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-783689.html
到了這里,關(guān)于【性能測(cè)試】JMeter分布式測(cè)試及其詳細(xì)步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!