備注:【Linux查看服務器是32位還是64位命令】
uname -m
getconf LONG_BIT
1.Linux環境安裝jmeter
可參考https://www.cnblogs.com/surewing/p/9271886.html
如需要用到3臺客戶機,分別在三臺機器中安裝,以下安裝之前需安裝jdk環境
1)將jmeter安裝包放到服務器
如路徑:/app/jmeter
su root 命令:切換到root用戶進行如下操作
(新建個jmeter文件夾存放:jmeter包+新建文件夾error+新建文件夾report+新建文件夾script+新建文件jmter.log+自動生成的聚合報告report.jtl)

2)修改環境變量
編輯環境變量文件:vi /etc/profile
輸入并保存:
添加:export JMETER_HOME=/app/jmeter/apache-jmeter-3.3
export CLASSPATH中添加:
;$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH中添加:
;$JMETER_HOME/bin:$PATH:$HOME/bin
使配置文件生效,必須執行不然修改沒生效:
source /etc/profile
(p.s.windows下的環境變量分隔符是分號、linux下的環境分隔符是冒號)
3)檢驗環境
jmeter -v


切換到jmeter目錄下,執行如下授權命令:
sudo chmod -R 777 jmeter
2.單臺機命令行運行jmeter測試腳本
為什么命令行執行:
1、圖形化界面消耗更多資源,CPU和內存
2、圖形化界面不支持大型的負載測試和性能測試
3、命令行測試支持持續集成,例如放到Jenkins這樣的CI工具上
開始執行...
1、修改配置
(更改jmeter包bin下的文件jmeter.properties)
jmeter.save.saveservice.output_format=xml
注釋調該行配置,啟用非GUI模式(即該句前加#)
2、運行
進入路徑,/app/jmeter執行命令,報告文件report.jtl會在當前運行的路徑下生成。
Window系統下命令行執行:
jmeter -n -t D:performancecue入口賦能平臺性能測試.jmx -l report.jtl -e -o D:performancereport
Linux系統下命令行執行:
jmeter -n -t /app/jmeter/script/入口賦能平臺性能測試腳本.jmx -l report.jtl -e -o /app/jmeter/report
參數解析:
-n:以非GUI形式運行Jmeter
-t:要運行的 JMeter 測試腳本文件
-l:輸出結果路徑,如果沒有該文件就自動創建,可以生成csv或者jtl文件
-e:在腳本運行結束后生成html報告
-o:保存html報告的地址,此文件必須不存在
-h:幫助,打印出有用的信息并退出
-r:遠程執行,啟動遠程服務
-H:代理主機,設置Jmeter使用的代理主機
-P:代理端口,設置Jmeter使用的代理主機的端口號
-J:傳遞動態參數搭配 duration 持續時間 threadnum 線程數 loopcount 循環次數 ramp 告知Jmeter要在多長時間內建立全部的線程,默認值為0
3.分布式執行jmeter測試腳本
三臺機器的jmeter文件夾都授權,不然會遇到上傳失敗等權限問題:
sudo chmod -R 777 jmeter
可參考:https://www.cnblogs.com/hoby2017/p/9519306.html
選擇一個調度機master:100.70.53.44,此機器只負責調度,并匯總輸錯報告,不執行腳本
選擇兩臺或多臺執行機slave:100.70.53.59、100.70.53.39
注意1):這三臺機器保證互通(即調度機master和另兩臺執行機slave互通即可,兩臺執行機之間可以不通):
登錄master機器分別執行命令檢測端口:telnet 100.70.53.59 8080
telnet 100.70.53.39 8080
2):所以需要配置端口并保證該端口沒有被其他應用占用(上面幾個機器中目前只發現8080端口互通),如果被占用,啟動jmeter server時會報錯
1、slave執行機配置端口
進入jmeter安裝路勁/bin,修改jmeter.properties文件
第一個:server_port=8080
第二個:server.rmi.localport=8080
2、slave執行機開啟jmeter-server
進入jmeter安裝路勁/bin,命令行執行:sh jmeter-server
3、master調度機上指定調度IP地址和端口
進入jmeter安裝路勁/bin,修改jmeter.properties文件
修改remote_hosts,回到master機器上,修改jmeter.properties文件中的remote_hosts,將slave機器的ip地址、端口添加上去,多個ip之間用逗號隔開。其中127.0.0.1表示master機器本身,為了獨立開master,可以將其去掉,這樣就不會在master上執行測試。
如:remote_hosts=100.70.53.59:8080,100.70.53.39:8080
ps:這部好像沒配置也沒影響,因為執行時的命令會指定路徑
4、分布式執行jmete測試腳本
把腳本上傳到master機器的scrip文件夾里。
同樣進入路徑,/app/jmeter執行命令,報告文件report.jtl會在當前運行的路徑下生成。
jmeter -n -t /app/jmeter/script/入口賦能平臺性能測試腳本.jmx -R
100.70.53.59:8080,100.70.53.39:8080 -l report.jtl -e -o /app/jmeter/report
單機或分布式執行都需注意:需要重新執行腳本時,需先把已生成的報告刪除,不然會出現沖突無法執行。
4.查看結果
1、查看生成的報告,report文件夾中的index.html可直接打開,即可查看執行結果
2、Jmeter.log是日志,可查看執行日志
3、Jmeter客戶端中的聚合報告等監聽器中瀏覽加載report.jtl文件,可界面中查看聚合報告等監聽結果

5.性能測試報告編寫
參考:https://yq.aliyun.com/articles/35025
具體看自己存的文檔模板
6.出現問題解決方法
1)出現如下遠程運行后自動關閉,暫不確定什么原因,重啟遠程服務就好了

2)非GUI模式生成報告查看結果樹中沒有返回數據
linux執行jmeter腳本解決響應數據為空 - 瘋了的小蝸 - 博客園
3)啟動jmeter服務報如下錯誤,是端口被jmeter占用,之前啟動的進程沒全部kill

解決方法:
查詢端口被誰占用 :參考https://www.cnblogs.com/CEO-H/p/7794306.html
確認是被jmeter占用后,要獲取jmeter_pid如下命令:
ps -ef | grep "jmeter" | grep -v grep | awk '{print $2}'
參考https://blog.51cto.com/357712148/2068662
root用戶kill調全部進程
再重啟jmeter服務即可