JMeter

性能測試工具經過模擬協議模擬壓力html

測試計劃的元素執行是有序的,經過如下方式執行:java

1-配置結點linux

2-前置處理器正則表達式

3-定時器數據庫

4-取樣器apache

5-後置處理器(只在有結果可用狀況下執行)windows

6-斷言(只在有結果可用狀況下執行)瀏覽器

7-監聽器(只在有結果可用狀況下執行)服務器

1、簡介

1.1 Jmeter是啥?

Apache JMeter是Apache組織的開放源代碼項目,是一個純Java桌面應用,用於壓力測試和性能測試。它最初被設計用於Web應用測試但後來擴展到其餘測試領域。session

Jmeter不是瀏覽器,它只負責發出請求和接收請求,不運行JavaScript,不包括渲染。

1.2 Jmeter有啥用?

Apache JMeter能夠用於對靜態和動態的資源(文件,Servlet,Perl腳本,Java對象,數據庫和查詢,FTP服務器或是其餘資源)的性能進行測試。JMeter能夠用於分析不一樣壓力條件下的整體性能狀況。
也可使用JMeter提供的圖形化界面,分析性能指標或者在高負載狀況下測試你的服務器,腳本,對象。

1.3 配置好JDK

  建議安裝JDK環境,雖然JRE也能夠,可是壓測https須要JDK裏面的 keytool工具。壓測須要HTTPS

  JDK環境:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 安裝,這裏使用的操做系統是Windows,選最後一個下載,下載完直接運行安裝。安裝完設置一下環境參數。

  • JAVA_HOME:D:\Program Files (x86)\Java\jdk1.8.0_131(jdk安裝在哪一個盤就寫哪一個路徑)
  • Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
  • Classpath:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

打開cmd,運行java –version,能獲得下面的輸出就表示配置正確了。

目前都是自動配置的。

1.4 安裝JMeter

 http://jmeter.apache.org/download_jmeter.cgi

下載解壓就行。

1.4.1 Bin 目錄文件

bin:核心可執行文件,包含配置
            jmeter.bat: windows啓動文件:
            jmeter: mac或者linux啓動文件:
            jmeter-server:mac或者Liunx分佈式壓測使用的啓動文件
            jmeter-server.bat:mac或者Liunx分佈式壓測使用的啓動文件
            jmeter.properties: 核心配置文件
            
            

extras:插件拓展的包
lib:核心的依賴包
  ext:核心包
  junit:單元測試包

1.5 中英文切換

1.5.1 控制檯修改(暫時)

1.5.2 配置文件修改

  D:\apache-jmeter-4.0\bin(此目錄爲安裝目錄)下的 jmeter.properties 文件。37行默認爲 #language=en  改爲language=zh_CN,如今默認中文,要改爲英文的話,把#去掉便可

2、Jmeter功能概要

2.1 Jmeter 工具組成部分

2.1.1 資源生成器

  用於生成測試過程當中服務器、負載機的資源代碼。(LR中的VuGen)

2.1.2 用戶運行器

  一般是一個腳本運行引擎,根據腳本要求模擬指定的用戶行爲。(LR中的Controller)

2.1.3 報表生成器

  根據測試中實時地的數據生成報表,提供可視化的數據顯示方式。(LR中的Analysis)

2.1.4 負載發生器

  用於產生負載,一般以多線程或是多進程的方式模擬用戶行爲。(LR中的Load Generators)

2.1.5 Test Plan(測試計劃)

  用來描述一個性能測試,包含與本次性能測試全部相關的功能。也就是說本次性能測試的全部內容是基於一個計劃的。

2.2 Threads(Users)線程 用戶

2.2.1 setUp thread group

  一種特殊類型的 ThreadGroup,可用於執行 預測試 操做。這些線程的行爲徹底像一個征程的線程組元件。不一樣的是,這些類型的線程執行 測試前 進行按期線程組的執行。

2.2.2 teardown thread group

  一種特殊類型的ThreadGroup,可用於執行 測試後 動做。這些線程的行爲徹底像一個正常的線程組元件。不一樣的是,這些類型的線程執行 測試結束 後執行按期的線程組。

2.2.3 thread group(線程組)

  這個就是咱們一般添加運行的線程。能夠看作一個虛擬用戶組,線程組中的每一個線程均可以理解爲一個虛擬用戶。線程組中包含的線程數量在測試執行過程當中是不會發生改變的。

2.3 測試片斷(Test Fragment)

  測試片斷元素是控制器上的一種特殊的線程組。它在測試樹上與線程組處於一個層級。它與線程組不有所不一樣,由於它 不被執行,除非它是一個模塊控制器或者是被控制器所引用時纔會被執行。

 

  如下是線程組的 8 類可執行元件

2.4 配置元件(Config Element)

  配置元件(config element)用於提供對 靜態數據 配置的支持。如 CSV Data Set config 能夠將本地數據文件造成數據池(Data Pool)

2.5 定時器(Timer)

  定時器(Timer)用於操做之間設置等待時間,等待時間是性能測試中經常使用的控制客戶端QPS的手段。JMeter定義了 Bean Shell Timer、Constant Throughput Timer、固定定時器等不一樣類型的Timer。

2.6 前置處理器(Per Processors)

  用於在實際的請求發出以前對即將 發出的請求 進行特殊處理。例如,HTTP URL 重寫修復符則能夠實現URl重寫,當URL中有sessionID一類的session信息時,能夠經過該處理器填充發出請求的實際的sessionID。

2.7 後置處理器(Post Processors)

  用於對Sampler發出請求後獲得的 服務器響應 進行處理。通常用來提取響應中的特定數據。

2.8 斷言(Assertions)

  斷言用於檢查測試中獲得的相應數據等是否符合預期,斷言通常用來設置檢查點,用以保證性能測試過程當中的數據交互是否與預期一致。

2.9 監聽器(Listener)

  是用來對 測試結果數據 進行處理和可視化展現的一系列元件。圖形結果、查看結果樹、聚合報告。都是咱們常常用到的元件。注意:這個監聽器可不是用來監聽系統資源的元件。

  JMeter有兩種類型的控制器:取樣器(sample)和 邏輯控制器(Logic Controller),用這些原件來驅動處理一個測試。

2.10 取樣器(sample)

  取樣器(Sample)是性能測試中向服務器發送請求,記錄響應信息,記錄響應時間的最小單元,JMeter原生支持多種不一樣的sampler,如HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBCRequest Sampler等,每一種不一樣類型的 sampler 能夠根據設置的參數向服務器發出不一樣類型的請求。

2.11 邏輯控制器

  邏輯控制器,包括兩類元件,一類是用於控制test plan 中 sampler 節點發送請求的邏輯順序的控制器,經常使用的有 若是(if)控制器、switch Controller 、Runtime Controller、循環控制器等。另外一類是用來組織可控制 sampler 來節點的,如 事務控制器、吞吐量控制器。

3、badboy

3.1 腳本錄製

下載:http://www.badboy.com.au

  badboy是一個強大的工具,旨在幫組測試和開發複雜的動態應用。Badboy包括一個簡單而全面的捕獲/回放界面,強大的負載測試的支持,詳細的報告圖表等等,從而使Web測試和開發變得更加容易。

彈窗問題

  訪問者所使用的瀏覽器不能徹底支持頁面裏的腳本,造成「腳本錯誤」。遇到「腳本錯誤」時通常會彈出一個很是難看的腳本運行錯誤警告窗口,而事實上,腳本錯誤並不會影響網站瀏覽,所以這一警告可謂畫蛇添足。要關閉警告則能夠在瀏覽器的工具菜單選擇Internet選項,而後單擊高級屬性頁。進入到瀏覽標籤,並選中「禁止腳本調試」複選框,之後你就不會再收到這些警告了。

3.2 badboy檢查點與參數化

  檢查點設置:選擇要檢查的文字,而後在Tools>step1裏添加斷言,再回放。

4、Jmeter元件做用於和執行順序

4.1 元件做用域

  8類可被執行的元件(測試計劃與線程組不屬於 可執行元件),這些元件中,取樣器(samlper)是典型的不與其餘元件發生交互做用的元件,邏輯控制器只對其子節點的取樣器有效,而其餘元件(配置元件、定時器、斷言、監聽器)須要與取樣器(sampler)等元件交互。

  在jmeter中,元件的做用域是靠測試計劃的樹型結構中元件的 父子關係 來肯定的,做用域的原則是:

  取樣器(sampler)元件不和其餘元件相互做用,所以不存在做用於的問題。

  邏輯控制器(Logic Controller)元件只對 其子節點 中的 取樣器和邏輯控制器 做用。

  除取樣器和邏輯控制器元件外,其餘6類元件,若是是某個取樣器的子節點,則該元件對其父子節點起做用。若是其父節點不是取樣器,則其做用因而該元件父節點下的其餘全部後代節點(包括子節點、子節點的子節點等)。

4.2 元件執行順序

  1. 配置元件
  2. 前置處理程序
  3. 定時器
  4. 取樣器
  5. 後置處理程序
  6. 斷言
  7. 監聽器

  前置處理器、後置處理器和斷言等元件功能對 取樣器 做用,所以,若是在它們的做用域內沒有任何取樣器,則不會被執行。

  若是在同一做用域範圍內有多個同一類型的元件,則這些元件按照它們在測試計劃中的上下順序依次執行。

5、Jmeter 性能測試基礎實戰

  測試需求:測試 20個用戶訪問 http:http://www.qiakr.com/t 在載達到30 QPS時的平均響應時間。

QPS:Query Per Second 每秒查詢率。是一臺查詢服務器每秒可以處理的查詢次數。在因特網上,做爲域名系統服務器的性能常常用每秒查詢率來衡量。

5.1 測試步驟

5.1.1 第一步:添加線程組

  線程組主要包含三個參數:線程數、準備時長(Ramp-Up Period(in seconds))、循環次數。

  線程數:虛擬用戶數。一個虛擬用戶佔用一個進程或線程。設置多少虛擬用戶數在這裏也就是設置多少個線程數。

  準備時長(單位爲s):設置的虛擬用戶數須要多長時間所有啓動。若是線程數爲20,準備時長爲10,那麼須要10秒鐘啓動20個線程,也就是每秒鐘啓動2個線程。

  循環次數:每一個線程發送請求的次數。若是線程數爲20,循環次數爲5,那麼每一個線程發送5次請求。總請求數爲20*5=100.若是勾選了「永遠」,那麼全部線程會一直髮送請求,一到選擇中止運行腳本。

5.1.2 增添HTTP請求

  一個HTTP請求有着許多的配置參數,下面將詳細介紹:

  1. 名稱:本屬性用於表示一個取樣器,建議使用一個有意義的名稱
  2. 註釋:對於測試沒有任何做用,僅用戶記錄用戶可讀的註釋信息。
  3. 服務器名稱或IP:HTTP請求發送的目標服務器名稱或IP地址。
  4. 端口號:目標服務器的端口號,默認值爲80.
  5. Timeouts(milliseconds):設置請求和響應的超時時間。
  6. 方法:發送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
  7. Content encoding:內容的編碼方式,默認值爲iso8859.
  8. 路徑:目標URL路徑(不包括服務器地址和端口)
  9. 自動重定向:若是選中該選項,當發送HTTP請求後獲得的響應是302/301時,JMeter自動重定向到新的頁面。
  10. Use keep Alive:當該選項被選中時,jmeter和目標服務器之間使用keep-Alive方式(又稱持久鏈接、鏈接重用)進行HTTP通訊,默認選中。
  11. Use multipart/from-data for HTTP POST:當發送HTTP POSt請求時,使用Use multipart/from-data 方法發送,默認不選中
  12. 同請求一塊兒發送參數:在請求中發送URL參數,對於帶參數的URL,jmeter提供了一個簡單的對參數化的方法。用戶能夠將URL中全部參數設置在本表中,表中的每一行是一個參數值對(對應URL中的 名稱1 = 值1)。
  13. 同請求一塊兒發送文件:在請求中發送文件,一般HTTP文件上傳行爲能夠經過這種方式模擬。

  從HTML文件獲取全部有內容的資源:當該選項被選中時,jmeter在發出HTTP請求並得到響應的HTML文件內容後,還對該HTML進行分析並獲取HTML中包含的全部資源(圖片、flash等),默認不選中,若是用戶只但願獲取頁面中的特定資源,能夠在下方的Embedded URLs must match文本框中填入須要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向資源會被下載。

  用做監視器:此取樣器被當成監視器,在Monitor Results Listener 中能夠直接看到基於該取樣器的圖形化統計信息。默認不選中。

  Save response as MD5 hash?:選中該項,在執行時僅記錄服務端響應數據的MD5值,而不記錄完整的響應數據。在須要進行數據量很是大的測試時,建議選中該項以減小取樣器記錄響應數據的開銷。

5.1.3 第三步:設置QPS限制

  Jmeter提供了一個很是有用的定時器,稱爲Constant Throughput Timer(常數吞吐量定時器),該定時器能夠方便地控制給定的取樣器發送請求的吞吐量。

 

Constant Throughput Timer 的主要屬性介紹:

  Target throughput(in samplers per minute):目標吞吐量。注意這裏是每分鐘發送的請求數,實際填的數值爲:60*QPS。

  其次,Calculate Throughput based on 有5個選項,分別是:

  1. This thread only:控制每一個線程的吞吐量,選擇這種模式時,總的吞吐量爲設置的 target Throughput 乘以該線程的數量。
  2. All active threads:設置的 target Throughput 將分配在每一個活躍線程上,每一個活躍線程在上一次運行結束後等待合理的時間後再次運行。活躍線程指同一時刻同時運行的線程。
  3. All active threads(shared):與All active threads的選項基本相同,惟一的區別是,每一個活躍線程都會在 全部活躍線程 上一次運行結束後等待合理的時間後再次運行。
  4. All active threads in current thread group:設置的target Throughput將分配在當前線程組的每個活躍線程上,當測試計劃中只有一個線程組時,該選項和All active threads選項的效果徹底相同。
  5. All active threads in current thread group(shared):與All active threads in current thread group基本相同,惟一的區別是,每一個活躍線程都會在 全部活躍線程 的上一次運行結束後等待合理的時間後再次運行。

5.1.4 添加監視器

  腳本的主要部分設置完成後,須要經過某種方式得到性能測試中的測試結果,在本例中,咱們關係的是請求的響應時間。

  Jmeter中使用監聽器元件收集取樣器記錄的數據並以可視化的方式來呈現。Jmeter有各類不一樣的監聽器類型,由於上HTTP請求,咱們可在添加聚合報告,更爲直觀的查看測試結果。

  添加聚合報告,右鍵點擊線程組,在彈的菜單(添加--->監聽器-->聚合報告)中選擇聚合報告。

5.1.5 運行腳本

  若是出現403,網址有作一個保護,即對網站請求源作了保護,若是是來源不明的請求就會拒絕訪問(防止爬蟲什麼的),因此須要在jmeter中添加模擬瀏覽器的信息。

  模擬瀏覽器的信息是存在了User-Agent中,這個參數在百科中的解釋:User Agent中文名爲用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器可以識別客戶使用的操做系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

  一些網站經常經過判斷 UA 來給不一樣的操做系統、不一樣的瀏覽器發送不一樣的頁面,所以可能形成某些頁面沒法在某個瀏覽器中正常顯示,但經過假裝 UA 能夠繞過檢測。

5.1.6 聚合報告分析

 

Term Definition
Label 每一個JMeter的element(例如 HTTP Request)都有一個Name屬性,這裏顯示的就是Name屬性的值
#Samples 表示你此次測試中一共發出了多少個請求,若是模擬10個用戶,每一個用戶迭代10次,那麼這裏顯示100
Average 平均響應時間--默認狀況下是單個Request的平均響應時間,當使用了Transaction Controller時,也能夠以Transaction爲單位顯示平均響應時間
Median 中位數,也就是50%用戶的響應時間
90%Line 90%用戶的響應時間
Min 最小響應時間
Max 最大響應時間
Error% 本次測試中出現錯誤的請求的數量/請求的總數
Throughput 吞吐量---默認狀況下表示每秒完成的請求數(Request per Second)。
KB/sec 每秒從服務器端接收到的數據量。

6、斷言

斷言是在請求的返回層面增長一層判斷機制。由於請求成功了,並不表明結果必定正確,所以須要檢測機制提升測試準確性。下面介紹經常使用的jmeter三種斷言。

6.1 響應斷言

模式匹配規則:

包括:返回結果包括你指定的內容

匹配:根據指定內容進行匹配

Equals:返回結果與你指定結果一致

Substring:返回結果是指定結果的字串

否:不進行匹配

6.2 Size Assertion(Size斷言)

 

6.3 Duration Assertion(持續時間斷言)

 

若是響應時間大於設置的響應時間,則斷言失敗,不然成功!(見代碼Assertion.jmx)

7、Jmeter參數化

7.1 用戶參數

7.2 CSV 數據配置

Filename:參數項文件

File Encoding:文件的編譯方法,通常爲空

Vaiable Names:文件中各列所表示的參數項;各參數項之間利用逗號分隔;參數項的名稱應該與HTTP Requset中的參數項一致。

Delimiter:如文件中使用的是逗號分隔符,則填寫逗號;如使用的是TAB,則填寫 \t 。

Recycle on EOF?:True=當讀取文件到結尾時,再重頭讀取文件,False=當讀取文件到結尾時,中止讀取文件。

Stop thread on EOF?:當Recycle on EOF?一項爲False時起效;True=當讀取文件到結尾時,中止進程。

 

現有以下 csv 格式的文件,放在桌面。C:\Users\Administrator\Desktop\工做表.csv

把CSV數據文件設置 設置成以下

因爲有四組內容,線程組循環4次

運行,結果以下:

7.3 隨機參數化

生成函數後

下一次發送的passwd就是1-100隨機數

8、Jmeter集合點

操做步驟:step1---->定時器---->Synchronizing Timer

表示要先生成10個用戶在進行訪問,沒有所有生成完不訪問。後面的時候表示訪問延時。

9、Jmeter關聯

 9.1 正則表達式提取器

 正則表達式部分配置說明

引用名稱:下一個請求要引用的參數名稱,如填寫 activityID,則可用 $(activityID)引用它。

正則表達式:省略。

模板:用$$引用起來,若是在正則表達式中有多個正則表達式,則能夠是 $2$3$等等,表示解析到的第幾個值給 title。如:$1$表示解析到的第一個值。

匹配數字:0表明隨機取值,1表明所有取值。

缺省值:若是參數沒有取獲得值,那默認給一個值讓它取。

 

10、Jmeter圖形監控擴展

1.建立一個線程組

2.線程組-添加-配置元件-FTP請求缺省值

說明:

IP:爲你FTP服務的IP

Remote file:爲你FTP服務器上的一個文件

local file:爲本地你存放到本機上的路徑

選擇get(RETR)爲下載方式。

登陸配置:填寫你的FTP服務器的用戶名密碼。

 

按照第三步再添加一個FTP請求,選擇put爲上傳方式。

添加一個監控器:線程組-》添加-》監控器-》Spline Visualizer

相關文章
相關標籤/搜索