Jmeter(三十八) - 從入門到精通進階篇 - 命令行運行JMeter詳解(詳解教程)


1.簡介

  前邊一篇文章介紹了如何生成測試報告,細心地小伙伴或者同學們可以看到宏哥啟動Jmeter生成測試報告不是在gui頁面操作的,而是在gui頁面設置好保存以后,用命令行來生成測試報告的。這一篇宏哥就詳細的介紹一下為什么用命令行而不是GUI,以及啟動時的一些參數的含義。

2.為什么要命令行執行腳本?

  本文介紹如何從命令行運行JMeter,那么宏哥先來說說,為什么要命令行執行腳本,日常測試過程中發現,在大數量並發時,jmeterGUI界面時長宕機、卡死,在這種情況下我們就需要使用命令行來執行腳本了(非GUI也稱為 no Mode模式),使用非 GUI 模式,即命令行模式運行 JMeter 測試腳本能夠大大縮減所需要的系統資源。主要有以下三點:

1) 圖形化界面消耗更多資源,如CPU和內存,容易使壓力機達到瓶頸,從而影響測試結果。

2) 圖形化界面不支持大型的負載測試和性能測試,並發較大時,jmeter會崩潰。

3) 命令行測試支持持續集成,命令行方式可以把腳本配置到Jenkins上實現持續集成,做成自動化測試。例如放到Jenkins這樣的CI工具上。

3.具體步驟

這個主要是針對不會代碼腳本的童鞋們或者小伙伴可以首先在圖形界面將腳本調試成功,然后再在非GUI也稱為 no Mode模式下運行腳本。

1. 通過雙擊jmeter.bat打開JMeter圖形界面

2.在默認的Test Plan上創建一個Thread Group

3.在Thread Group上面添加一個Sampler,選擇HTTP Request

4.在Thread Group上面添加一個View Results Tree

5.點擊Run,在彈出對話框詢問是否保存,點擊Yes,保存腳本到桌面,Test Plant And Report.jmx

6.檢查View Results Tree里面的response code 是不是200,

7.通過檢查測試通過,說明測試腳本沒問題,我們這里選擇刪除View Results Tree

8.關閉當前JMeter對話框

9. 打開cmd,通過cd命令先切換到JMeter安裝路徑

例如: cd C:\apache-jmeter-3.2\bin

10. 輸入一下命令開始執行測試

 上圖中紅色框里的內容說明:

summary =  60 in 00:00:05:在5秒內產生的總請求數是60個,其中的時間段是從腳本運行開始計算到當前時間為止,一般在腳本運行過程中主要關注 “summary=” 信息即可

11.8/s:系統每秒處理的請求數,相當於TPS

Avg:   83:平均響應時間

Min:   43:最小響應時間

Max:  248:最大響應時間

Err:     0 (0.00%):錯誤數/率

Active: 100:活動的線程數

4.命令行參數

4.1運行命令常用格式

jmeter -n -t [jmx腳本路徑] -l [測試輸出文件路徑]

參數解釋:

-n: 表示 non gui mode,就是非圖形化模式
 
-t: 即testplan,后跟要運行的jmeter腳本的路徑和腳本名稱。
 
    若指定路徑下沒有指定名稱的腳本,則自動創建。
 
    若沒有路徑只寫腳本名稱,則默認是在當前目錄查找或創建。
 
-l: 后跟輸出結果文件路徑和結果文件名稱。
 
    若指定路徑下沒有指定名稱的腳本,則自動創建,可以生成csv或者jtl文件。
    
    若只寫腳本名稱,則默認是在當前目錄查找或創建。
 
示例: jmeter -n -t testplan.jmx -l test.jtl
 
示例含義:以命令行模式運行當前目錄下的testplan.jmx文件,並在當前目錄下輸出日志文件test.jtl

其他參數:

jmeter -n -t test.jmx -R 10.6.5.31,10.6.5.32 -l log.jtl

jmeter -n -t test.jmx -l  log.jtl -H 192.168.1.1 -P 8080
 
-r/R 遠程執行 -> 啟動遠程服務,即分布式執行多台壓力機
 
-H 代理主機 -> 設置 JMeter 使用的代理主機
  
-P 代理端口 -> 設置 JMeter 使用的代理主機的端口號
 
使用-R指定節點時,要首先在這些節點上啟動jmeter-server的服務

測試結果:

會在桌面生成一個html.cvs文件,這個文件剛好有60行,內容如下:

5.Linux系統運行jmeter命令行

將編輯好的腳本拷貝到Linux下

1、使用命令執行腳本:

jmeter -n -t bugfree-create.jmx -l test.jtl 

注意:如果未設置Jmeter的環境變量則在執行腳本的時候需要檢查當前目錄是否是jmetet的bin 目錄下

運行示意圖:

2、運行結果的查看

(1)將運行腳本產生的test.jtl文件到處到windows系統下(注意:window下安裝的Jmeter和JDK要和Linux的保持一致)

(2)在windows系統下打開Jmeter,創建一個線程組,在線程組下添加監聽器,如下圖:

(3)點擊界面上的瀏覽按鈕,將到處的文件添加進來即可看到腳本測試的報告,如下圖:

6.windows系統下運行jmeter命令行

在windows下運行命令行跟linux下是一樣的,只是通過cmd命令行工具來運行的。而且上一篇宏哥介紹的就是在在windows下運行Jmeter命令行,宏哥在這里就不做贅述了。

7.小結

使用jmeter進行壓力測試時遇到一段時間后報內存溢出outfmenmory錯誤,導致jmeter卡死了,先嘗試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k",但結果運行時間增加了,但最終還是報內存溢出,百度后按照網友的建議更改了如下設置后jmeter就沒有再卡了:

1、windows環境下,修改jmeter.bat

set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m 改為: set HEAP=-Xms256m -Xmx1024m set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

根據經驗,heap最多設置為物理內存的一半,默認設置為512M.如果heap超過物理內存的一半,可能運行jmeter會慢,甚至出現內存溢出,原因java比較吃內存,占CPU.

注意:JDK32位的電腦Xmx不能超過1500m,最大1378m.否則在啟動Jmeter時會報錯:

2、linux環境下,修改jmeter.sh:
java $JVM_ARGS -Xms1G -Xmx5G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar `dirname $0`/ApacheJMeter.jar "$@"
 
3、如果查看JDK的位數
# java -version
java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode) 如果是64位的話,最后一行會顯示64-Bit #java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

8.拓展

8.1修改配置文件

如果你是第一次使用命令行執行測試腳本,那么看到的輸出結果可能是類似下面這樣的:

這些信息僅僅告訴我們執行成功啦。但是我想要看到本次測試的更多結果,要怎么辦呢?可以通過修改jmeter.properties配置文件來解決:

#---------------------------------------------------------------------------
# Results file configuration
#---------------------------------------------------------------------------

# This section helps determine how result data will be saved.
# The commented out values are the defaults.

# legitimate values: xml, csv, db.  Only xml and csv are currently supported.
#jmeter.save.saveservice.output_format=csv

# The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
#jmeter.save.saveservice.data_type=true
#jmeter.save.saveservice.label=true
#jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
#jmeter.save.saveservice.response_data=false
# Save ResponseData for failed samples
#jmeter.save.saveservice.response_data.on_error=false
#jmeter.save.saveservice.response_message=true
#jmeter.save.saveservice.successful=true
#jmeter.save.saveservice.thread_name=true
#jmeter.save.saveservice.time=true
#jmeter.save.saveservice.subresults=true
#jmeter.save.saveservice.assertions=true
#jmeter.save.saveservice.latency=true
# Only available with HttpClient4
#jmeter.save.saveservice.connect_time=true
#jmeter.save.saveservice.samplerData=false
#jmeter.save.saveservice.responseHeaders=false
#jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
#jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=true
#jmeter.save.saveservice.url=true
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
#jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
#jmeter.save.saveservice.idle_time=true

# Timestamp format - this only affects CSV output files
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS

# For use with Comma-separated value (CSV) files or other formats
# where the fields' values are separated by specified delimiters.
# Default:
#jmeter.save.saveservice.default_delimiter=,
# For TAB, one can use:
#jmeter.save.saveservice.default_delimiter=\t

# Only applies to CSV format files:
# Print field names as first line in CSV
#jmeter.save.saveservice.print_field_names=true

# Optional list of JMeter variable names whose values are to be saved in the result data files.
# Use commas to separate the names. For example:
#sample_variables=SESSION_ID,REFERENCE
# N.B. The current implementation saves the values in XML as attributes,
# so the names must be valid XML names.
# By default JMeter sends the variable to all servers
# to ensure that the correct data is available at the client.

# Optional xml processing instruction for line 2 of the file:
# Example:
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report.xsl"?>
# Default value:
#jmeter.save.saveservice.xml_pi=

# Prefix used to identify filenames that are relative to the current base
#jmeter.save.saveservice.base_prefix=~/

# AutoFlush on each line written in XML or CSV output
# Setting this to true will result in less test results data loss in case of Crash
# but with impact on performances, particularly for intensive tests (low or no pauses)
# Since JMeter 2.10, this is false by default
#jmeter.save.saveservice.autoflush=false

將上面的內容復制到user.properties文件中,然后注釋打開,並且值修改成true,就會打開該條記錄,jmeter就會將對應的信息輸出到我們指定的jtl文件中(不過這樣會在壓測過程中產生大量的日志文件,真正壓測時,最好不要開太多的日志記錄),然后可以在結果文件中查看詳細的信息。但是我們想在腳本執行的過程中實時查看結果信息,要怎么做呢?同樣是將jmeter.properties文件中一下內容復制到user.properties文件中修改配置文件jmeter.properties。

#---------------------------------------------------------------------------
# Summariser - Generate Summary Results - configuration (mainly applies to non-GUI mode)
#---------------------------------------------------------------------------
#
# Comment the following property to disable the default non-GUI summariser
# [or change the value to rename it]
# (applies to non-GUI mode only)
summariser.name=summary
#
# interval between summaries (in seconds) default 30 seconds
#summariser.interval=30
#
# Write messages to log file
#summariser.log=true
#
# Write messages to System.out
#summariser.out=true

# Ignore SampleResults generated by TransactionControllers
# defaults to true
#summariser.ignore_transaction_controller_sample_result=true

打開上面的summariser.name、summariser.interval、summariser.out這三個配置項,保存,重新運行jmeter,應該就可以在shell里看到統計信息了,如下圖所示:

注意:如果未設置Jmeter的環境變量則在執行腳本的時候需要檢查當前目錄是否是jmetet的bin 目錄下

Remote engines have been started
    Waiting for possible shutdown message on port 4445
    summary +   3036 in     3s = 1001.6/s Avg:    25 Min:    14 Max:    58 Err:  3036 (100.00%) Active: 61 Started: 58 Finished: 0
    summary +  25670 in  10.3s = 2494.7/s Avg:    61 Min:    11 Max:   190 Err: 25670 (100.00%) Active: 261 Started: 258 Finished: 0
    summary =  28706 in  13.1s = 2192.0/s Avg:    57 Min:    11 Max:   190 Err: 28706 (100.00%)
    summary +  27300 in  10.3s = 2654.9/s Avg:   129 Min:    10 Max:   407 Err: 27300 (100.00%) Active: 461 Started: 458 Finished: 0
    summary =  56006 in  23.1s = 2426.7/s Avg:    92 Min:    10 Max:   407 Err: 56006 (100.00%)
    summary +  27200 in  10.4s = 2606.1/s Avg:   202 Min:    10 Max:   528 Err: 27200 (100.00%) Active: 660 Started: 657 Finished: 0
    summary =  83206 in  33.1s = 2512.8/s Avg:   128 Min:    10 Max:   528 Err: 83206 (100.00%)
    summary +  26300 in    11s = 2478.3/s Avg:   284 Min:    11 Max:   702 Err: 26300 (100.00%) Active: 861 Started: 858 Finished: 0
    summary = 109506 in  43.1s = 2541.1/s Avg:   166 Min:    10 Max:   702 Err: 109506 (100.00%)
    summary +  26200 in    11s = 2439.0/s Avg:   355 Min:    10 Max:   866 Err: 26200 (100.00%) Active: 1000 Started: 997 Finished: 0
    summary = 135706 in  53.1s = 2556.0/s Avg:   202 Min:    10 Max:   866 Err: 135706 (100.00%)

這里的錯誤率是100%,正常情況下應該是0%。

這里顯示的信息就相當於GUI界面下聚合報告元件所顯示的信息。其中主要有兩種信息:summary + 和summary =,其它項都是類似的

summary +   4386 in 00:00:30:在30秒內增加了4386個請求,其中時間間隔由配置文件中的interval統計頻率的值決定

summary =  27455 in 00:03:12:在3分12秒內產生的總請求數是27455個,其中的時間段是從腳本運行開始計算到當前時間為止,一般在腳本運行過程中主要關注 “summary=” 信息即可

146.2/s:系統每秒處理的請求數,相當於TPS

Avg:   684:平均響應時間

Min:   201:最小響應時間

Max:  1499:最大響應時間

Err:     0 (0.00%):錯誤數/率

Active: 100:活動的線程數

8.2文件路徑

1、命令行中的文件路徑

示例:jmeter -n -t testplan.jmx -l test.jtl

JMeter 默認去當前目錄尋找腳本文件,並把日志記錄在當前目錄。比如你在 C:\tools\apache-jmeter-3.0\bin 目錄下執行以上命令,JMeter 會去該目錄下尋找 test.jmx 腳本並把執行結果放在該目錄。如果你的腳本在其他目錄,而且想要把執行結果放在另外文件夾,需要使用絕對路徑告訴 JMeter,比如:

C:\tools\apache-jmeter-3.0\bin>jmeter -n -t e:\addCustomer.jmx -l e:\addCustomer.jtl


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM