【Jmeter入門】Jmeter基礎理論知識

初識Jmeter

JMeter是什麼?

  apatch jmeter是apatch組織開發的基於Java的壓力測試工具。html

  JMeter能夠用於對服務器、網絡或對象模擬巨大的負載,來自不一樣壓力類別下測試他們的強度和分析總體性能。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果(爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言)。前端

JMeter特色

  1. 可以對http和FTP服務器進行壓力和性能測試,也能夠對任何數據庫進行一樣的測試(經過JDBC)。
  2. 徹底可移植性和100%純Java。
  3. 徹底多線程,框架容許多個線程併發取樣和經過單獨的線程組對不一樣的功能同時取樣。
  4. 各類負載統計表和可連接的計時器可供選擇。
  5. 數據分析和可視化插件提供了很好的可擴展性以及個性化。
  6. 具備提供動態輸入到測試的功能。

爲何選Jmeter

特色:java

  1. 開源(免費、能夠進行源碼改造,可是資料可能較少)、輕量級、插件化;
  2. 適合自動化和持續集成。

使用場景:mysql

  1. 性能測試;
  2. 接口測試;
  3. 造數據;
  4. 線上巡檢;
  5. 構建部署(編譯、打包、部署,SSH插件);
  6. 重啓服務;
  7. 清理環境;
  8. 封裝爲性能測試平臺;
  9. 封裝爲自動化測試平臺;
  10. ...

怎麼學?

  1. HTTP、Json、HTML。
  2. Jmeter元件含義、結構、做用順序(經常使用)。
  3. Jmeter腳本4種方式(手動、badboy、Jmeter代理、fiddler轉換)。
  4. 學習接口測試原理。
  5. 學習性能基礎概念和原理。
  6. 學習監控相關知識(原理、工具)。
  7. 學習Java、shell編程。

LR和Jmeter比較

共同點:均支持如下功能。web

  1. 腳本錄製/回放;
  2. 參數化;
  3. 集合點;
  4. 檢查點;
  5. 關聯;
  6. 多協議,jmeter協議較少,但能夠自行擴展,LR支持協議多,但用戶不能夠自行擴展;
  7. 分佈式大壓力測試;
  8. 多線程;
  9. 圖形報表:jmeter支持較弱,LR支持很強;
  10. 監控服務器資源(CPU,內存等);
  11. 報告生成與導出。

區別:正則表達式

  1. IP欺騙:Jmeter不支持IP欺騙,LR支持。
  2. 功能測試:jmeter支持,LR不支持。
  3. 安裝卸載:LR較爲麻煩,文件體積大,Jmeter較爲簡便,文件體積小。
  4. 測試成本:LR商業軟件,成本高,jmeter開源軟件,成本低。

jmeter下載和安裝(Windows環境下)

  前置條件:安裝JDK。算法

  JMeter下載地址:https://jmeter.apache.org/download_jmeter.cgi。sql

  通常啓動:解壓,bin目錄下的jmeter.bat便可啓動(避免在有空格的路徑中安裝Jmeter,可能致使遠程測試出現問題)。shell

  服務器模式啓動:jmeter-server.bat。容許在遠程節點上以服務器模式運行JMeter,並經過JMeter GUI來控制(分佈式壓力測試)。數據庫

JMeter工做原理

  jmeter做爲web服務器和瀏覽器之間的代理,以便捕獲瀏覽器請求和web服務器的響應,容易的生成性能測試腳本,並利用性能測試腳本模擬真實用戶對web服務器的訪問壓力。

腳本生成方式:

  1. (本身編寫)性能測試腳本經過模擬多線程對服務器(web服務器、應用服務器、數據庫服務器)進行訪問壓力測試。
  2. (腳本錄製)瀏器經過代理方式錄製測試腳本對服務器(web服務器、應用服務器、數據庫服務器)進行訪問壓力測試。

JMeter目錄結構

目錄結構

  1. bin目錄下是可執行文件,Windows下使用JMeter.bat啓動,裏面能夠設置jvm參數,進行JVM的調優配置。根據經驗,heap(堆值)最多設置爲物理內存的一半,默認設置爲512M,若是heap超過物理內存的一半,可能運行JMeter會慢,甚至出現內存溢出錯誤。
  2. JMeter的log在JMeter.log中查看。
  3. JMeter.properties文件中有一個屬性log_level.JMeter能夠設置改變日誌詳細度,默認是info,查錯時可改成debug。jmeter的屬性設置也能夠在圖形化界面中選擇添加--非測試元件--property display展現。
  4. docs下是JMeter的Java docs,存放的是開發Jmeter的API文件。
  5. printable_docs的usermanual子目錄下是JMeter的用戶手冊文檔,其中,component_reference.html是最經常使用的核心元件幫助手冊,該目錄下的demos下有經常使用的jmeter腳本案例,也能夠直接經過界面中的幫助部分查看全部的幫助手冊。
  6. extras:擴展插件目錄,如目錄下的文件提供了對ant的支持,能夠利用ant來實現自動化,例如批量執行腳本,產生HTML格式的報告等。測試運行時,能夠把測試數據記錄下來,jmeter會自動生成一個.jtl文件,將該文件放到extras目錄下,運行「ant -Dtest=文件名 repost」,就能夠產生測試統計報表。
  7. lib目錄下的子目錄ext下主要是JMeter的核心jar包;junit子目錄放的是junit腳本;用戶擴展依賴的jar包放在lib下便可,不要放在lib/ext下。
  8. licenses:Jmeter證書目錄(開源,不用關注);
  9. backup:腳本備份目錄。

jmeter的classpath(jmeter只尋找jar文件)

  jmeter經過JMETER_HOME/lib(公用包)和JMETER_HOME/lib/ext(jmeter元件和補丁,只供jmeter元件使用)目錄中的jar文件加載類。
  若是開發了新的jmeter元件,須要將對應jar包放到lib/ext目錄下,jmeter會自動加載這些jar包中的jmeter元件。不放在lib/ext目錄下的元件須要在JMeter.properties文件中定義屬性search_paths。
  公用支持jar包(JDBC、JMS實現包、其餘任何支持包),都應被放在lib目錄下。能夠在Meter.properties文件中定義屬性user.classpath屬性定義公用包。

jmeter使用設置

語言設置(漢化)

  下載安裝好Jmeter後默認的是英文,因此,如何把英文界面換成中文呢?

方法一(一次性設置) :

  啓動Jmeter找到 options 》choose language 》chinese(簡體繁體本身選)。這樣設置後界面就變成了中文,可是當咱們下次打開時又恢復了英文,要再次設置,這樣一來就很麻煩。那咱們怎麼設置默認爲中文呢?請看方法二。

方法二 (永久設置):
  一、在Jmeter的安裝目錄下的bin目錄中找到 jmeter.properties這個文件,用文本編輯器打開。 
  二、大概在37行,找到:#language=en將其修改成:language=zh_CN,這樣,再次打開Jmeter就是默認中文了。注意把最前面的註釋#號去掉。

字體設置

  一、在Jmeter的安裝目錄下的bin目錄中找到 jmeter.properties這個文件,用文本編輯器打開。

  二、查找並修改屬性爲:jsyntaxtextarea.font.size=30。

  二、若是想要設置界面顯示字體,能夠按住Ctrl鍵+鼠標滾動進行字體設置。

JMeter基礎

經常使用組件

  1. 測試計劃:用來描述一個性能測試,全部內容都是基於測試計劃的。至關於LR中的測試場景。能夠添加擴展jar包。
  2. 線程組:LR中的虛擬用戶組。(至關於LR中的action),包括普通線程組,setup thread group,teardown thread group幾種。
    1.   setup thread group:可用於執行預操做,這些線程的行爲徹底像一個正常的線程組元件,相似LR中的init。
    2.   teardown thread group:可用於執行測試後動做,這些線程的行爲徹底像一個正常的線程組,相似LR中的end。
  3. 測試片斷(Test Fragment):一種特殊的線程組,在測試樹上與線程組處於同一層級,與線程組不一樣的是它不被執行,除非他是一個模塊控制器或者是被控制器引用時纔會被執行。它是一個輔助的組件,在此節點下幾乎能夠放置任何JMeter測試組件,但它通常不會被運行。他的做用以下(1)在腳本開發過程當中能夠用來備份元件;(2)TestFragment下的元件能夠被模塊控制器調用,咱們能夠利用它來模塊化請求(把一個業務封裝成一個方法供複用)供模塊控制器調用。訪問路徑:測試計劃→Test Fragment
  4. 工做臺:它也不能直接參與運行,功能有:(1)在運用JMeter錄製http協議腳本時就用到它,咱們能夠在它下面創建一個http代理服務器原件(HTTP代理服務器),設置代理信息而後進行錄製訪問路徑:工做臺→添加→非測試元件;(2)設置HTTP鏡像服務器(HTTP Mirror Server);(3)顯示當前JMeter屬性信息(屬性顯示);(4)備份腳本,特別是咱們在腳本調試過程當中能夠把它做爲一個元件暫存區。
  5. 配置元件:提供對靜態數據的支持。配置元件僅對所在測試分支有效。「用戶定義的參數」會在測試初識階段執行,不管它處於測試樹的哪一個位置,爲了便於理解,建議放在線程組的開始部分。
    1. HTTP受權管理器:輔助進行服務器監控測試。
    2. HTTP cookie管理器:Session維護(每次反覆清除cookies?不清除則第二次運行時仍是處於登陸狀態)。
    3. HTTP消息頭管理器:消息頭管理。
    4. HTTP請求默認值管理器:請求默認值管理。
    5. 用戶定義的變量:全局變量,不論放在任何地方都是全局參數。
  6. 定時器:用於設置等待時間,模擬用戶習慣,相似於LR中的「思考時間」。若是須要在測試計劃中某個位置添加暫停,可使用「Test Action」採集器。
  7. 前置處理器:用於在實際的請求發出前對即將發出的請求進行特殊處理。只有sampler存在時纔有意義。
  8. 後置處理器:對sampler發出請求後獲得的服務器響應進行處理,相似LR中的關聯。只有sampler存在時纔有意義。
    1. jmeter響應亂碼問題處理:在http請求後面添加一個後置處理器,寫入腳本:prev.setDataEncoding("utf-8")。
  9. 斷言:檢查測試中獲得的數據是否符合預期,通常用於設置檢查點,保證性能測試過程當中的數據是否和預期一致。
    1. beanShell斷言。
    2. 響應斷言
  10. 監聽器:對測試結果數據進行處理和可視化展現。收集測試樹中相同或更低級別測試元件的數據。

控制器

  Jmeter中有兩種控制器:取樣器(sampler)和邏輯控制器,用這些元件來驅動處理一個測試。

  1. 取樣器:相似LR中的不一樣協議。包括FTP、HTTP、JDBC、Java object、JMS(Java 消息服務)、LDAP(輕量目錄訪問協議)、SOAP/XML-RPC、WebService(SOAP,主要涉及技術:XML、SOAP、WSDL、UDDI)。
    1.  Webservice好處:跨防火牆通訊,應用程序集成,B2B集成,軟件和數據重用。
  2. 控制器:幫助用戶控制jmeter測試邏輯,控制子元件請求執行順序。包括兩類,一類是用於控制sampler節點發送請求的邏輯順序控制器,如if控制器,switch,runtime,循環控制器等。另外一類是用來組織可控制sampler節點的,如事務控制器,吞吐量控制器等。
    1. foreach控制器:該控制器只用於讀取自定義變量值。 添加-用戶自定義變量,變量命名格式:變量名_數字(從1開始計數)。其中:(1)變量前綴:自定義變量下劃線前面的字符串;(2)取值範圍,遊標範圍,從0開始計數。(3)輸出變量名稱:將每次獲得的用戶自定義變量存儲到參數foreach參數中。
    2. if控制器:相似變成語言中的if語句,根據給定表達式的值決定是否執行該節點下的子節點。
    3. 交替控制器:每次迭代時,順序選取該節點下的一個子節點執行。選中ignore sub-controller blocks,表示該controller將其下的子controller當成單一元素處理,並容許每一個子controller一次發出一個請求。
    4. loop controller循環控制器:簡單地爲其下的子節點運行指定次數。
    5. 僅一次控制器:讓testPlan中的某些內容在整個testplan執行期間對每一個線程僅執行一次(如,每一個線程僅需執行一次「登陸」操做)。
    6. 隨機控制器:每次執行時,從其子節點中隨機選取一個來執行。
    7. 隨機順序執行控制器:每次執行時,按照隨機產生的順序執行旗下的全部子節點,與隨機控制器不一樣之處在於,隨機控制器只選擇執行器全部子節點中的一個,而隨機順序執行控制器則按照隨機順序所有執行該controller下的全部子節點。
    8. switch controller:相似switch函數,該controller根據給定的值n(可使用參數)選擇執行旗下的第n+1個子節點,switch controller只接受整數值,而且給定的值n是以0位基礎的。
    9. while controller:設置條件,根據條件進行循環控制。條件包括三種:(1)空:迭代執行controller下的全部子節點,直到最後一個子節點返回失敗爲止,非最後子節點失敗,不會中止。(2)LAST,迭代執行controller下的全部子節點,直到最後一個子節點返回失敗爲止。同時,若是該controller上一個節點失敗,則TestPlan在執行時不會進入該controller。(3)表達式:若是表達式的取值爲FALSE,退出循環。表達式支持參數化設置。
    10. 事物控制器:會生成一個額外的採樣器來測量其測試元素的整體時間,注意,時間包含該控制器範圍內的全部處理時間,而不是採樣器的時間。若是選中sample,事物採集器做爲其下采樣器的父採樣器,不然,做爲額外採樣器添加在自採樣器後面。
    11. 吞吐量控制器:容許用戶設置被執行頻率。
    12. 運行時長控制器:控制其下子測試元件容許運行的時長。(單位:秒)
    13. 模塊控制器:

腳本編寫

  1. 腳本錄製(badboy,代理錄製,fiddler錄製)。
  2. 參數關聯(正則表達式、Xpath(適合於返回XML響應)、jp@gc-JSON Path  Extractor(適合於返回爲json響應))。
  3. 調試(只跑須要調試的接口,其餘接口禁用;增長斷言進行結果判斷;Debug sampler查看關聯取值;查看結果樹的regExp tester模式能夠將中文亂碼顯示正確;HTML模式能夠顯示web頁面)。
  4. 變量的提取(包括全局變量(包括IP、port、附件路徑、CSV路徑等,一般用用戶定義的變量組件)、業務變量(一般使用用戶參數組件,前置處理器---用戶參數))。
  5. 腳本編寫格式(規範化進行接口編寫,調整可讀性)(一般會將用戶和服務器的一次交互(頁面訪問或者提交)請求放在一個簡單控制器或者事物控制器中;根據用戶操做也業務命名和編號)。

  

注意:

  1. 本身建立的數據本身刪除,不要留垃圾數據(業務刪除或數據庫刪除)。
  2. HTTP cookie管理器,注意做用域。
  3. 每一個接口都須要增長斷言,保證結果正確性。
  4. 相同的響應放在一個簡單控制器中,全部的應用盡可能放在一個線程組中,特殊場景單獨抽離成一個線程組。
  5. web自動化腳本用簡單控制器,性能測試腳本用事物控制器。
  6. 用戶定義變量,做用域爲整個測試計劃,是全局變量;線程組中用戶參數組件。
  7. csv裏面有特殊字符時,allow quoted data值設置爲TRUE。

自動化測試腳本:

  必須控件包括:用戶定義的變量、HTTP cookie管理器、用戶參數、線程組、簡單控制器、斷言、debug sampler、查看結果樹。

性能測試腳本:

  特有控件:jp@gc - Stepping Thread Group、CSV Data Set Config、jp@gc - Transactions per Second、jp@gc - Response Times  vs

Threads、jp@gc - PerfMon  Metrics  Collector。 

兩種腳本錄製方法

badboy(推薦)

  若是訪問者使用的瀏覽器不能徹底支持頁面腳本,出現腳本錯誤,並彈框,事實上,腳本錯誤並不會影響網頁瀏覽,所以,該警告無任何做用,能夠在瀏覽器的intenet選項,高級屬性頁,進入到瀏覽標籤,並選中「禁止腳本調試」,之後就不會在收到這種警告了。

  badboy中的檢查點

  經過tools下的add Assertion for selection,對選擇的部分添加檢查點。

badboy中的參數化-文本

  創建參數化列表:在 variables中選擇New Variable,添加參數列表。在請求中將請求數據使用${參數名稱}進行替換(在step中右鍵,properties,設置repeat爲按照關鍵字進行循環便可。)

問題:
  1,中文可能有亂碼,改下請求中的編碼屬性便可,utf-8或gbk。
  2,檢查點中也能夠修改成參數化中的變量。

badboy中的參數化-數據庫

ODBC;tools-datasource,前提,安裝ODBC的包,並配置數據源。
data source放到腳本最前端。在tools下設置的Data Source拖到腳本最前端,由於是按順序執行的。

badboy進行併發

tools---run background thread,設置併發數,每一個併發之間的間隔時間等。

badboy中的報告

view---report。

badboy中的斷點

和LR同樣,對請求使用toggle break point,進行添加/取消斷點,進行調試。

代理錄製回放

分組:
  不對樣本分組:全部請求所有羅列。
  在組間添加分隔:加入一個虛擬的一分割線命名的動做。
  每組放入一個新的控制器:執行時按控制器給輸出結果。(自動化經常使用)
  只存儲每一個組的第一個樣本:保存第一次url請求。

  put each group in a new transaction controller:(性能經常使用)。

步驟:

  1. 建立測試計劃,建立線程組;
  2. 添加非測試元件,HTTP代理服務;
  3. 添加完代理後,啓動代理,並須要對intent 選項設置局域網設置爲和代理相同。同時須要在錄製完成後,取消局域網設置,不然鏈接網絡會出現問題(IE---intenet選項---鏈接---局域網設置)。

元件的做用域和執行順序

執行順序

  1. 配置元件:會影響其做用範圍內的全部元件。
  2. 前置處理程序:在其做用範圍內的每個sampler元件以前執行。
  3. 定時器:在其做用範圍內的每個sampler有效。
  4. 採樣器(sampler):sampler元件不和其餘元件相互做用,所以不存在做用域的問題。
  5. 後置處理器:在其做用範圍內的每個sampler元件以後執行。
  6. 斷言:在其做用範圍內的每個sampler元件執行後的結果執行校驗。
  7. 監聽器:收集其做用範圍內的每個sampler元件的信息並呈現。

做用域

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

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

JMeter實戰

JMeter之參數化

  1.badboy中參數化。
  2.JMeter裏參數化。
    前置處理器-用戶參數。
    利用配置元件-cvs data set config(利用文件進行參數化)。
    隨機參數:選項-函數助手,random。

JMeter之集合點

  概念和LR中的同樣,注意集合點位置,和LR同樣,要放到集合的操做以前。

  只對最靠近的下一個請求起做用。

JMeter之檢查點

  和LR中的檢查點同樣,就是斷言中的響應斷言。

  1. 響應斷言:斷言結果通常成功顯示一行,不然顯示多行。
  2. 變量斷言:在斷言中使用變量,而非固定值。
  3. 斷言持續時間:設置斷言持續時間,超過則斷言失敗。
  4. 返回結果大小斷言:size assertion,對返回結果大小進行設置,不符則斷言失敗。

JMeter之動態關聯

  和LR中的一致。關聯方式:正則表達式,Xpath(通常XML的時候用的多)

  什麼地方須要關聯?
    回放腳本,看是否正確,數字+字母混合組合(如session,cookie等),找開發確認。
  關聯步驟:
    須要關聯哪一個參數?
    參數在哪一個請求後產生的?
    在參數請求後使用正則提取。

  添加-後置處理器-正則表達式提取器:
    正則表達式:正則須要在小括號裏面寫。
    模板:若是正則表達式去了不止一個參數,則須要指定參數組別,$1$表示取第一個值,$2$表示取第二個值。
    匹配數字:0隨機,-1取全部值,1,2,。。。以數組形式存儲。

LR同樣的圖形監控擴展(插件)

  jmeter圖形監控,相比LR相對較弱。能監控Windows或Linux嗎?能夠。

  下載地址:https://jmeter-plugins.org/downloads/all/

  步驟:

    1.JMeterPlugins.jar:將該包複製到JMeter的lib目錄下的ext目錄下,從新啓動JMeter。(查看添加-監聽器中出現JP開頭的則加載成功)

    2.將serverAgent目錄及下面的文件拷貝到咱們測試的服務器上,而後點擊打開(Linux打開的是.sh,Windows點擊的是.bat),默認端口4444。

    3.添加-監聽器-jp@gc-PerfMon Metrics Collector。添加監聽信息便可。

jmeter實戰-web程序

背景:XX網站,環境:Windows,
需求:併發登陸性能測試。
場景:1S增長2個線程,分別看20,40,60併發下的表現;
監控:成功率、響應時間、標準差、CPU、MEM、IO等;資源監控須要在Windows下部署agent(server agent)。

步驟:
1,badboy錄製,導入jmeter;
2,參數化,檢查點,集合點;
3,指標監控,資源控制;
4,報告(可導出到xls,自行生成報表)。

Jmeter實戰-FTP程序

  FTP使用用戶分類:real用戶、guest用戶、anonymous(匿名)用戶
  FTP傳輸方式:ASCII,二進制。
  傳輸細節:TCP/IP協議中,FTP標準TCP端口號爲21,Port方式數據端口爲20。FTP的任務是從一臺計算機將文件傳送給另一臺計算機,不受操做系統的限制。
  工做方式:Standard(PORT,主動方式),Passive(PASV,被動模式)。

服務方式:
  一、上傳一個文件到服務器(PUT)
  二、下載一個文件本地(GET)

配置(FTP request):

  服務器名稱或IP:填寫FTP的IP
  remote file:遠程路徑
  local file:本地文件

jmeter實戰-數據庫MySQL

需求:測試用戶表(select)
環境準備:MySQL驅動(mysql connect-java.jar),jmeter-JDBC配置,jmeter-JDBC請求。

步驟:
1,測試計劃中加入jar包。(添加目錄或jar包到classPath)。
2,JDBC配置:添加JDBC connection Configturation。

 

 


  driver=com.mysql.jdbc.Driver
  url=jdbc:mysql://localhost:3306/jdbc?userUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true(allowMultiQueries=true:表示支持一次運行多條sql語句)

  username=root
  password=root
3,添加JDBC request:選擇query type,輸入SQL語句。
4,添加斷言結果,監聽器(summary report)。

  若是須要實現多個不一樣的用戶使用不一樣的SQL,能夠經過把整條SQL語句參數化來實現。例如,把SQL語句放在CSV文件中,而後在JDBC request的query中使用參數代替${SQL_Statement}。

jmeter分佈式性能測試

原理:和LR的agent差很少。jmeter由Java開發,耗內存,CPU,因此大併發下還須要分佈式。

步驟:

  1,關閉防火牆。
  2,在所要運行jmeter並做爲負載生成器的機器上安裝jmeter,並肯定其中一臺機器做爲主的controller,其餘機器做爲agent,而後運行全部agent機器上的jmeter-server文件。
  3,在controller機器的jmeter的bin目錄下,找到jmeter.properties的remote_hosts中,修改對應的IP和端口。
  4,啓動controller機器上的jmeter應用,選擇菜單「運行」--->「遠程啓動」來分別啓動agent,也能夠直接選擇「遠程所有啓動」來將全部的agent啓動。

jmeter中的監聽器及測試結果分析

經常使用監聽器:
  斷言結果:
  查看結果樹:
  聚合報告:
  用表格查看結果:
  圖形結果:
  aggregate graph:

指標(時間單位都是毫秒):
  label:定義HTTP請求名稱;
  samples:本次場景中一共完成了多少個請求;
  average:平均響應時長;
  median:響應時間中值50%用戶的響應時長;
  90%Line:90%用戶響應時間;
  Min:訪問頁面最小響應時長;
  Max:訪問頁面最大響應時長;

  error:出錯率(錯誤請求數量/請求總數量);

  throughput:吞吐量(默認表示每秒完成的請求數);
  KB/sec:流量(每秒從服務器端接收到的數據量)。

jtl文件分析

  在性能測試過程當中,每每將結果保存在一個文件中,既能夠保存測試結果,也能夠爲往後性能測試報告提供更多的素材。jtl文件能夠提供多種格式的編寫,而通常咱們都是將其以csv的格式記錄。

  在監聽器中的configure能夠配置對應的保存字段信息(建議勾選:save field name,save assertion failure message),指定對應保存位置便可。
此時文件會有以下項:timeStamp,elapsed,responseCode,responseMessage,ThreadName,dataType,success,failureMessage,bytes,Latency
請求發出的絕對時間,響應時間,請求的標籤,返回碼,返回消息,請求所屬的線程,數據類型,是否成功,失敗信息,字節,延遲。

 

windows環境下的可使用performer(性能監視器)工具。

自動化性能測試平臺環境搭建(Jenkins+ant+Jmeter)

  持續集成:團隊成員常常集成他們的工做,每次集成都經過自動化構建(包括編譯、發佈、自動化測試)來驗證,從而儘快的發現集成錯誤。大大減小集成的問題,讓團隊儘快的開發內聚的軟件。
  Jenkins,基於Java的持續集成工具,用於監控持續重複的工做,包括持續的版本發佈/測試項目,監控外部調用執行的工做。

  項目構建:經過構建工具對多個項目文件進行統一的編譯和運行,好比對Jmeter腳本的批量運行。
  ant:是一個將軟件編譯、測試、不熟等步驟聯繫在一塊兒加以自動化的工具,大多用於Java環境中的軟件開發。

ant下載安裝:
  下載後解壓到任意文件,配置Windows環境變量。
  ANT_HOME:
  path:;ANT_HOME/bin
  classpath:ANT_HOME/lib

  dos命令下:ANT_HOME/bin/ant - version

jenkines下載:
  解壓後放在一個磁盤空間大的地方,而後點擊setup.exe安裝完成後,在瀏覽器中輸入localhost:8080(默認爲8080端口,若是被佔用,修改Jenkins安裝目錄下的配置文件jenkines.xml中的httpPort=8080)。

Jenkins+ant+Jmeter自動化測試平臺搭建:
步驟:
  1,錄製Jmeter腳本;
  2,將Jmeter安裝目錄下的extras目錄下的「ant-jmeter-1.1.1.jar"這個jar包放在ant的安裝目錄的lib目錄下;
  3,配置Jmeter的extras目錄下build.xml文件。(該配置文件做用爲使用ant來批量構建Jmeter下XX文件夾裏面的全部腳本,並按照指定格式來生成報告);
  4,使用ant編譯驗證Jmeter的build文件(將配置好的build文件放在ant目錄的bin目錄下)。進入ant目錄的bin目錄下,使用命令ant -filename build文件名.xml;
  5,部署到持續集成平臺Jenkins。(選擇ant的build文件進行集成)。

jmeter接口自動化

  一、在excel中維護用例,包含域名、url、方法(get仍是post)、 參數 、預期結果(能夠是多個),而後轉化程csv格式,這樣一來咱們只須要在excel中維護咱們的用例就行了(固然若是須要,能夠添加其餘字段,好比標識字段,其值爲true,標識執行該用例,不然不執行)
  二、添加一個CSV Data Set Config,把文本路徑填進去;

  三、添加BeanShell PreProcessor和BeanShell PostProcessor,主要 目的是爲了處理中文亂碼,在script中輸入:prev.setDataEncoding("utf-8")。

    jmetetr自帶有兩個函數
    ${__javaScript(encodeURIComponent('${token}'))}
    ${__urlencode('${token}'))}
    咱們藉助這兩個函數來實現,這樣在變量或者csv中填寫中文,在請求中調用這兩個函數來編碼;

  四、添加if控制器,根據方法值,來判斷執行get仍是post的請求條件設置爲:"${mymeth}"=="post"

  五、設置斷言,判斷咱們的結果是否正確,
  六、根據用例數,設置循環次數
  七、運行,查看結果

問題及解決辦法

 一、問題:在csv中數據爲json格式的數據,在jmeter中沒法完整的取值
  分析:json格式數據,中間有逗號,咱們都知道csv是根據逗號來分割的,這會致使咱們取值錯位。
  解決方法:在CSV Data Set Config下將【Allow quoted data?】設置程true便可。

 

  二、URL回寫處理用戶對話:使用HTTP URL Re_writing modifier,進行URL參數回寫。

  三、MD5數據加密:有時候咱們請求的參數可能須要加密,好比登陸接口中的密碼可能須要通過md5加密,

  第一種方法:這種方法比較簡單,jmeter內置了一個md5的函數,能夠直接使用。其中參數username是用戶名,正常填寫,password是密碼通過md5加密若是沒有此函數,就安裝下。

而後使用${_MD5(密碼)}

  第二種方法:須要有必定的編程技術,利用beanshell完成,大體步驟以下:
    一、導出md5的算法爲jar包,能夠找開發幫忙完成
    二、把該jar包copy到jmeter的lib/ext文件目錄下
    三、jmeter裏新建beanshell sampler,並編寫代碼
      import hehe.md5.Str2MD5;//包名,不知道爲開發
      String res = newStr2MD5().MD5("xiaoqiang");//new一個對象出來並調用方法獲取加密後的返回
      System.out.println(res);//打印結果
      vars.put("md5",res.toString());//把加密後的數據保存到md5這個變量裏,供在jmeter裏使用

Jmeter其餘應用

使用jmeter來造數據

  引用來源:http://blog.51cto.com/xqtesting/1604820

  步驟:

  一、打開jmeter,建立一個線程組;
  2 、鼠標右鍵單機線程組,建立一個jdbc connection configuration: 對數據庫的地址、用戶名和密碼進行填寫;
  3 、建立用戶參數:可根據要插入數據中,不一樣字段;建立參數函數: 函數的產生,由函數生成器產生, 不一樣函數的產生: 也能夠用計數器當作函數使用;
  4 、線程組裏面添加一個jdbc request: 在jdbc request裏面添加sql語句: 其中,對字段有特殊要求的(即:字段被作參數化,使用函數的字段),用特定"${你的參數}"格式,在SQL中進行體現;
  5 、添加聚合報告和查看結果樹,根據本身須要的數量級,進行查數據操做:這樣就能夠進行數據的插入了。

心得:
  一、小數據量的狀況下,使用java經過接口或者直接插數據,跟使用jmeter應該時間上差很少,可是到達百萬級以上的數據量,使用jmeter多線程,速度會明顯快不少。
  二、jmeter的操做比較簡單,若是沒有現成的工程,搭建環境比較麻煩,調試代碼有點煩。可是用jmeter的話,只須要一個簡單的sql,幾步操做步驟,就能夠完成任務,優點比較明顯。

 

JMeter從數據庫獲取數據並做爲變量傳輸

引用來源:https://www.cnblogs.com/wuyonghuan/p/7479582.html

在Jmeter中使用Selenium WebDriver完成測試

引用來源:http://blog.51cto.com/xqtesting/1947396

fiddler抓取請求導出到JMeter

引用來源:https://www.cnblogs.com/heiyexiaoguai/p/5859200.html

相關文章
相關標籤/搜索