天天看點

JMeter接口測試和壓力測試

JMeter接口測試和壓力測試

  JMeter可以做接口測試和壓力測試。其中接口測試的簡單操作包括做http腳本(發get/post請求、加cookie、加header、權重限認證、上傳檔案)、做webservice腳本、參數化、斷言、關聯(正規表達式提取器和處理json-json path extractor)和jmeter操作資料庫等等。

  一般分五個步驟:(1)添加線程組 (2)添加http請求 (3)在http請求中寫入接入url、路徑、請求方式和參數 (4)添加檢視結果樹 (5)調用接口、檢視傳回值;

  (1)JMeter 發get請求

  

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  (2)JMeter 發post請求

   

JMeter接口測試和壓力測試

  (3)JMeter 添加cookie:需要線上程組裡添加配置元件—HTTP Cookie 管理器

JMeter接口測試和壓力測試

  (4)JMeter 添加header:需要線上程組裡面添加配置元件—HTTP資訊頭管理器 

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  (5)JMeter 上傳檔案

JMeter接口測試和壓力測試

  (6)JMeter 參數化:入參經常變化的話,則可以設定成一個變量,友善統一修改管理;如果入參要求随機或可多種選擇,則通過函數生成器或者讀取檔案形成一個變量。

  是以參數化有三種方式:使用者定義的變量、函數生成器、讀取檔案。

    1> 使用者定義的變量:需要添加配置元件-使用者定義的變量。

    

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

    2> 函數生成器:需要用到函數助手功能,可以調用函數生成一些有規則的資料。常用的幾個函數有_uuid、_random、_time。

    _uuid會生成一個随機唯一的id,比如在避免java請求重發造成未處理資料太多的情況,接口請求可加一個唯一的請求id唯一的響應id進行一一對應;随機數_random,可以在你指定的一個範圍裡取随機值;

    取目前時間_time,一些時間類的入參可以使用,如{__time(,)} 是生成精确到毫秒的時間戳、{__time(/1000,)}是生成精确到秒的時間戳、${__time(yyyy-MM-dd HH:mm:ss,)} 是生成精确到秒的間。      

JMeter接口測試和壓力測試

    3> 從檔案讀取:需要線上程組裡面添加配置元件-CSV Data Set Config,其中Recycle on EOF:設定True後,允許循環取值;

JMeter接口測試和壓力測試

    具體的例子如下所示:

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  (7)JMeter 斷言:JMeter斷言用來檢測響應傳回的結果和我們預期的是否一緻。若針對整個線程組的話,則線上程組下添加斷言-響應斷言;若隻是針對某個請求的話,則在請求下添加斷言-響應斷言。

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  (8)JMeter關聯:接口請求之間存在參數調用,為了儲存這個參數,建立jmeter關聯。比如登陸接口和購買商品接口,購買商品接口就需要登陸接口傳回的token等登陸資訊,

  JMeter關聯就可以儲存這個token資訊,友善購買商品接口使用。 JMeter關聯可以通過二種方式來完成,擷取到傳回結果中指定的值。它們分别是正規表達式提取器、 json path extractor。 

    1>正規表達式提取器:若想擷取的傳回值未比對到,可以把正規表達式兩邊比對的資料擴大點。

JMeter接口測試和壓力測試

      a. 關于正規表達式

      ():括起來的部分就是要提取的。 

      .:比對除換行外的任何字元串。 

      +:代表+号前面的字元必須至少出現一次(一次或多次)。 

      ?:代表?前面的字元最多可以出現一次,在找到第一個比對項後停止(0次或1次)。 

      :代表号前面的字元可以不出現,也可以出現一次或者多次(0次、1次或者多次) 

      (.*):貪婪模式,比對盡可能多的字元 

      (.*?)或(.+?):比對盡可能少的字元,一旦比對到第一個就不往下走了。

      b. 關于模闆

      若想提取多個值的話,比如是a和b這兩個值,則可以寫成:$1$$2$。無論要提取多少個值,引用名稱就是一個的,比如名稱為id,${id_go}:擷取整個字元串ab,${id_g1}:擷取的是a,${id_g2}:擷取的是b。

      下面有一個具體的執行個體,如下圖所示:

     

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  2> json path extractor:JMeter通過安裝json path extractor插件來處理json串,提取json串中的字段值。

  插件的下載下傳位址:https://jmeter-plugins.org/?search=jpgc-json,下載下傳完成,解壓後,直接把lib檔案夾放到jmeter相應目錄下面。

  特别說明:jmeter 2.xx左右的版本嘗試過無法使用該插件,在jmeter 3.xx左右的版本裝完插件後能正常使用。 

  需要在請求下建立後置處理器-jp@gc-JSON Path Extractor,具體的執行個體如下所示:

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  (9)JMeter 操作資料庫

    操作資料庫基本有四個步驟:(1)導入mysql的jdbc的jar包 (2)建立資料庫的連接配接配置,線程組裡添加配置元件-JDBC Connection Configuration

                 (3)線程組裡添加jdbc request,寫sql語句 (4)添加察看結果樹,點選啟動按鈕,就能看到執行的SQL。具體的執行個體如下截圖所示:

JMeter接口測試和壓力測試
JMeter接口測試和壓力測試
JMeter接口測試和壓力測試
JMeter接口測試和壓力測試

  特别說明:JMeter還可以操作oracle、postgreSQL、msSQL、mongodb等等資料庫,同時不同的資料庫,JDBC Connection Configuration填寫的Database url格式和JDBC Driver驅動名稱也不相同。

  JMeter資料庫驅動清單如下表所示:

JMeter接口測試和壓力測試

  基本分為五個步驟:(1)先需要通過soapui工具擷取到webservice接口的請求位址、請求封包和請求soapaction。(2)jmeter建立一個線程組

           (3)線程組下建立SOAP/XML-RPC Request,寫入請求url、請求封包、請求soapaction。(4)啟動jmeter,調用接口,通過察看結果樹檢視傳回值。

  soapui擷取資訊的執行個體如下圖所示:

JMeter接口測試和壓力測試

  soapui送出完後,點選raw,可看到soapation,有些接口若沒傳回soapation,則jmeter裡也就不用填。

JMeter接口測試和壓力測試

  JMeter-webservice腳本執行個體如下圖所示:

JMeter接口測試和壓力測試

  壓力測試分兩種場景:一種是單場景,壓一個接口的;第二種是混合場景,多個有關聯的接口。壓測時間,一般場景都運作10-15分鐘。如果是疲勞測試,可以壓一天或一周,根據實際情況來定。

     壓測前要明确壓測功能和壓測名額,一般需要确定的幾個問題:

    (1)固定接口參數進行壓測還是進行接口參數随機化壓測?

    (2)要求支援多少并發數?

    (3)TPS(每秒鐘處理事務數)目标多少?響應時間要達到多少?

    (4)壓伺服器名稱還是壓伺服器IP,一般都是壓測指定的伺服器;

    (1)線程數:并發數量,能跑多少量。具體說是一次存在多少使用者同時通路

    (2)Rame-Up Period(in seconds):表示JMeter每隔多少秒發動并發。了解成準備時長:設定虛拟使用者數需要多長時間全部啟動。如果線程數是20,準備時長為10,

      那麼需要10秒鐘啟動20個數量,也就是每秒鐘啟動2個線程。

    (3)循環次數:這個設定不會改變并發數,可以延長并發時間。總請求數=線程數*循環次數

    (4)排程器:設定壓測的啟動時間、結束時間、持續時間和啟動延遲時間。

    運作完後,聚合報告會顯示壓測的結果。主要觀察Samples、Average、error、Throughput。

    (1)Samples:表示一共發出的請求數

    (2)Average:平均響應時間,預設情況下是單個Request的平均響應時間(ms)

    (3)Error%:測試出現的錯誤請求數量百分比。若出現錯誤就要看服務端的日志,配合開發查找定位原因

    (4)Throughput:簡稱tps,吞吐量,預設情況下表示每秒處理的請求數,也就是指伺服器處理能力,tps越高說明伺服器處理能力越好。

    (1)有錯誤率同開發确認,确定是否允許錯誤的發生或者錯誤率允許在多大的範圍内;

    (2)Throughput吞吐量每秒請求的數大于并發數,則可以慢慢的往上面增加;若在壓測的機器性能很好的情況下,出現吞吐量小于并發數,說明并發數不能再增加了,可以慢慢的往下減,找到最佳的并發數

    (3)壓測結束,·登陸相應的web伺服器檢視CPU等性能名額,進行資料的分析;

    (4)最大的tps:不斷的增加并發數,加到tps達到一定值開始出現下降,那麼那個值就是最大的tps。

    (5)最大的并發數:最大的并發數和最大的tps是不同的機率,一般不斷增加并發數,達到一個值後,伺服器出現請求逾時,則可認為該值為最大的并發數。

    (6)壓測過程出現性能瓶頸,若壓力機任務管理器檢視到的cpu、網絡和cpu都正常,未達到90%以上,則可以說明伺服器有問題,壓力機沒有問題。

    (7)影響性能考慮點包括:資料庫、應用程式、中間件(tomact、Nginx)、網絡和作業系統等方面。

  (1)JMeter 在linux安裝

    簡單說下,就是要先安裝jdk,同時再配置環境變量,最後再上傳jmeter壓縮的安裝包,在linux下解壓完安裝包就可以使用了;

  (2)JMeter在linux運作

    進入jmeter下的bin目錄下運作腳本,未配置jmeter環境變量的條件下,運作的指令:

  其中a.jmx是準備好的jmeter腳本,res.jtl是測試結果檔案,測試結果檔案可以導入到jmeter察看結果樹下檢視。