Jmeter API Performance Test

筆者最近了解 Apache組織開發了基於Java的壓力測試工具Apache JMeter。若有興趣可自行搜索它的相關信息。筆者記錄了一些使用方法,若有錯誤或遺漏,歡迎聯繫改正。正則表達式

官方下載地址:
https://jmeter.apache.org/download_jmeter.cgi
(注意選擇對應本身機器的版本)
安裝完成以後在 apache-jmeter/bin文件下點擊jmeter.bat打開。注意這裏會打開一個界面+一個控制檯,不要關閉控制檯。apache

記錄這篇內容時使用的是Jmeter5.1.1版本。api

你能夠像拼積木同樣的使用Jmeter,須要什麼東西就添加什麼東西,Jmeter自身會把它們以樹的結構組裝起來。下文以一個login獲取token的API例子來進行記錄:服務器

TestPlan(測試計劃):
Jmeter中你想要測試的內容即爲TestPlan,能夠把它理解成樹的根節點。打開時默認會有一個空的TestPlan。你也能夠把整理好的TestPlan保存下來成爲.jmx文件,以便下次使用。
在TestPlan下你能夠添加各類元件,如線程組,監聽器,定時器,等等。多線程

Thread Group(線程組):
在TestPlan下添加節點Thread Group,線程組元件主要控制這麼幾件事。併發

  1. 當測試用例出現error時,測試計劃怎樣執行
  2. 用多少個線程(user)去模擬這個請求
  3. 循環多少次

壓力測試,其實咱們是要知道server的承受能力,像日常碼代碼的時候,本身測試時本身點一點是看不出來好壞的,因此須要用多線程來模擬多個用戶的併發訪問。這裏咱們先簡單的把線程數設爲10,循環次數爲2.dom

HTTP Request(HTTP 請求):
在Thread Group下添加HTTP Request,這個就很少談了,就是模擬出一個完整的請求來發送給server處理。有一點須要注意的是,這裏的"Server Name or IP"字段的值只能填寫「192.168.1.1」或「xxx.com」這樣的,不能夠在前面添加「http://」不然Jmeter會沒法識別。工具

HTTP Header Manager(HTTP 信息頭管理器):
這個是對HTTP Request請求頭的管理,你既能夠把它添加到某個HTTP Request節點下,也能夠把它做爲HTTP Request的兄弟節點。若是HTTP Header Manager是做爲HTTP Request的兄弟節點時,它會應用到同級的全部Http Request上。測試

到這裏,能夠模擬出一個完整的請求出來,但並不能看到這個請求的執行狀況,還須要額外添加監聽器。線程

Listener:
既能夠在Thread Group下添加監聽器,也能夠在Http Request下添加監聽器。這二者的區別在因而監聽線程組的全部內容仍是某個具體Http Request的全部內容。另外,Jmeter提供了不少種監聽器,這裏推薦添加view Results Tree(查看結果樹)和Aggregate Report(聚合報告),這兩種。其餘的監聽器能夠根據須要狀況添加。其中,view Results Tree能夠幫助你查看request與response的具體內容,Aggregate Report能夠查看測試的統計信息,如平均響應時間,error百分比等等。

 

 

到這裏,你應該能夠完成一個簡單的API的測試了。

接下來咱們來看一些複雜一點的功能
有時候咱們須要模擬一個正經常使用戶的行爲。在使用APP期間,用戶可能會這裏點點,那裏看看,記錄或者更改一些內容,作一些查詢等等。咱們可使用下面這個控件來記錄用戶行爲中具體涉及到了哪些API。
HTTP(S) Test Script Recorder(HTTP代理服務器):

不一樣於fiddler,這裏除去一些基本的配置(如端口),你還須要額外注意兩個地方。
1.必須與Recording Controller(錄製控制器)配合使用,不然會報錯。

2.在你須要進行測試的移動端添加Jmeter的證書。證書在bin文件下,名爲ApacheJMeterTemporaryRootCA.crt。證書會在一段時間後過時,若是過時從新添加證書便可。

上述步驟完成以後,你會在Recording Controller下找到一大堆Request的記錄。這些記錄中不只包含你要測試的API,也包含了圖片的獲取,第三方服務等訪問,推送的廣告內容(若有)等等。你能夠只留下你但願測試的部分。

若是你仔細觀察這些請求會發現,用戶最初的操做會有一個步驟來獲取token,後續的請求都會攜帶上這個token。換句話說,上面截圖裏的API,除第一條外都在各自的Request Header裏面有相似於這樣:authorization: Bearer xxxxx.xxx.xxx 的一組值。token過時以前沒有問題,你能夠正常的進行測試,若是token過時了,你的Jmeter測試腳本就不能用了(除去login行爲獲取token的api外)。

前面HTTP Header Manager(HTTP 信息頭管理器)的內容裏咱們提到過,若是HTTP Header Manager是做爲HTTP Request的兄弟節點時,它會應用到同級的全部Http Request上。那麼若是咱們能夠把login獲取到的token放入這個Header裏面就能夠解決上面的問題了。
Regular Expression Extractor(正則表達式提取器):
利用這個控件,你能夠獲取response中符合你給定的正則表達式的值,並把它做爲一個全新的變量記錄下來。

簡單介紹一下用到的字段的含義,更詳細的內容能夠自行搜索一下。
Name of created variable: 取出的變量的新名稱.
Regular Expression: 提取內容的正則表達式,注意前面的"accessToken"指的是你要從哪裏取值來判斷是否符合正則表達式。
Template($i$ where i is capturing group number, starts at 1):這個是指你要取符合正則的一組值裏面的第幾個,咱們直接取第一個就好。
Match No.(0 for Random):0 表明隨機取值,1 表明所有取值。這個填1就好。
取到了咱們須要的token,並把它賦值給scriptToken,接下來只要在Header Manager中添加上它就能夠了。

![HttpHeaderUseRegularValue](uploads/5f8606c7ee82621a9acb17797f4eacd3/HttpHeaderUseRegularValue.PNG)

Jmeter中使用變量的統一格式就是這個 ${變量名}。

另外,還有一個比較經常使用的控件
CSV Data Set Config(CSV 數據文件設置):

具體字段就不介紹了,相信你們的英文水平。額外提一點,配置文件中是能夠填寫多組配置的,默認按行來分隔。你的測試腳本中用到了線程去重複訪問,就會取多少行配置,方便進行不一樣的測試用例的測試。若是配置文件讀到了末尾,你能夠配置來決定是測試結束或是從頭再讀取配置文件。

相關文章
相關標籤/搜索