JmeterWeb測試初次使用指南

本次記錄首次使用Jmeter設計Web接口測試的過程,相關設置參考自官方文檔
,Jmeter版本爲當前最新版本5.2.1。

1. 首先介紹一下背景

看到這篇文章的應該已經知道JMeter是做什麼的,一款壓測工具。功能強大,性能優異,諸多優點不再贅述。這裏介紹幾點基本概念,便於讀者對Jmeter在Web接口測試的使用有個大致全面的瞭解。

說明:本文只是作爲建立最基本的Web接口測試計劃,並不是全面探討JMeter所有功能的,所以涉及的操作也只是爲了Web接口測試能夠運行。本文中儘量使用官方文檔中的概念,如果描述不清或有誤,請留言討論,或自行查閱官方文檔。

使用JMeter我們是用來建立測試計劃,JMeter中以測試計劃(test plan)爲構建測試的基本單位,每個界面中只能顯示一個測試計劃,我們暫且將一個項目的測試都放到一個計劃中。一個測試計劃中會有很多條測試流程,JMeter中流程對應的就是線程組(Thread Group)。線程組是可以設置很多屬性的,
在這裏插入圖片描述
流程之間的順序是可以互不干擾的,當然也可以是順序執行的。每個流程之內的步驟順序執行的。例如:登錄->查詢->下單->發貨->收貨->評價->商家回覆。登錄>收貨>登出。 流程可長可短。
流程中關鍵的步驟,登錄/查詢等都是一個個http(s)請求,這個在JMeter中對應的是採樣器中的Http請求。在這裏插入圖片描述
而每個請求的請求參數、類型、請求頭、cookie等是不一樣的。這些在JMeter中可以使用配置元件來設置。可以添加多個,如果有多個配置,後面的會覆蓋前面的。在這裏插入圖片描述
在每個請求前後可能還要進行參數的處理,JMeter中提供了前置處理器(Pre Processors)和後置處理器(Post Processors)來完成這些操作。前置處理器中常用的就是 JSR223前置處理器,這個處理器是用來替換BeanShell PreProcessors的。官方文檔中有如下建議,因此我們使用JSR223處理器來執行腳本。腳本語言爲groovy。

Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements (see JSR223 section below for more details), and switching from __Beanshell function to __groovy function.
從JMeter 3.1開始,我們建議從BeanShell切換到JSR223測試元素(有關更多詳細信息,請參見下面的JSR223部分),並從__Beanshell函數切換到__groovy函數。

這裏可以執行腳本來設置JMeter屬性和變量等。而後置處理器常用的有JSON提取器(JSON Extractor)、正則表達式提取器(Regular Expression Extractor)、JSR223後置處理器等。
在設置值的過程中會發現可能很多請求很有相同的請求頭參數,token等。這個在JMeter中可以使用JMeter屬性(JMeter properties)和JMeter變量(JMeter variables)
來統一儲存和使用。在組件中使用${USER}來引用變量的值,在腳本中則使用來設置和獲取用戶變量。

vars.get("HOST");
vars.put("MSG","Successful");

官方文檔中這麼說:
Some test plans need to use different values for different users/threads. For example, you might want to test a sequence that requires a unique login for each user. This is easy to achieve with the facilities provided by JMeter.翻譯過來:一些測試計劃需要針對不同的用戶/線程使用不同的值。例如,您可能需要測試一個序列,該序列要求每個用戶都具有唯一的登錄名。使用JMeter提供的功能很容易實現。
例如:使用csv文件存儲用戶名和密碼。使用配置元件中的CSV Data Set Config讀取並保存爲JMeter變量在這裏插入圖片描述
JMeter variables are local to a thread, but can be used by all test elements (not just Beanshell).
中文:JMeter變量是線程本地的,但可以用於所有測試元素(不僅限於Beanshell)。

共享變量 如果想在線程組之前共享變量可以使用JMeter Properties儲存。

If you need to share variables between threads, then JMeter properties can be used:
如果需要在線程之間共享變量,則可以使用JMeter屬性

請求外層可以添加條件判斷,循環執行等,JMeter提供邏輯控制器實現(Logic Controller)。在這裏插入圖片描述

以上就是JMeter的基本用法,使用以上組件即可編排常規的Web接口測試計劃。

2. 下載運行

官方網站
上下載二進制文件包,軟件包
解壓後,運行bin/jmeter.bat 可以直接運行GUI界面程序。默認在此之前系統已經設置好了jdk相關環境變量,如果沒有請自行百度jdk安裝及環境變量設置。

注意:解壓的目錄不要包含空格和中文,否則影響後續使用。官方文檔中有說明“There can be problems (especially with client-server mode) if the directory path contains any spaces.
中文:如果目錄路徑包含任何空格,則可能會出現問題(尤其是在客戶端-服務器模式下)。” 雖然沒有說中文問題(畢竟人家是英語國家開發的),但在使用過程中發現在首次創建使用模板時會出錯。

3. 舉個栗子

3.1 從模板創建測試計劃

以下的步驟僅保證使用的連續性,不保證實際數據的連續性。圖片中所填寫的值都是示例,組合在一起並不能實際運行,畢竟這是測試計劃,最終需要依賴具體的項目的,請諒解。當然在最後我會將最終的成果截圖展示,可以比照着建立你自己的測試計劃。

從模板創建測試計劃不是必須的但是如果工作中需要頻繁創建的話,使用模板是個不錯的選擇。除了默認的一些模板外,JMeter也支持自定義模板。本次測試使用Advanced Web Test Plan。
在這裏插入圖片描述
選擇圖中小圖標或菜單 File → Templates…後會彈出文本框,在下拉列表中可以選擇具體的模板。
在這裏插入圖片描述
創建完後是這個樣子:
在這裏插入圖片描述
根據前文,我們知道這裏在測試計劃最前面創建了5個配置元件(Config Element) ,分別是:

  • HTTP Request Defaults:用來爲之前的http請求設置默認參數。
    紅框對應的值分別爲:協議、主機(host)、端口、路徑、字符集編碼。
    ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020042913444429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pqZGRydXNoaQ==,size_16,color_FFFFFF,t_70
  • User Defined Variables:用戶定義的變量。儲存在vars中。可以通過${host}取出host屬性的值或者在腳本中vars.get(”host“)取出。在配置元件中可以使用${}引用這裏定義的變量。
    在這裏插入圖片描述
  • HTTP Cookie Manager:管理cookie。一般登錄憑證依賴cookie的需要使用。由於我們項目僅在請求頭中加token,需要這個,所以可以刪除。

這裏提一點,所有的組件都是可以隨時禁用啓用的,也就是說想臨時改變流程中的某些步驟,不用刪除。禁用之後就不再生效。
在這裏插入圖片描述

在這裏插入圖片描述

  • HTTP Header Manager:請求頭管理,這裏默認有5個值,我們可以添加需要的值。
    在這裏插入圖片描述
  • Login Data: CSV Data Set Config,讀取csv文件中保存的用戶密碼。路徑可以使用前面的用戶自定義變量中的值。
    在這裏插入圖片描述
    下面是個一個線程組:這裏模擬的是用戶登錄,這裏也有一個請求參數元件,設置此流程下的參數。
    在這裏插入圖片描述
    流程爲:首頁(HomePage)->THinkTIme(模擬停留頁面時間)->Changes請求->THinkTIme(模擬停留頁面時間)->BugDetailPage請求->Login登錄(默認登錄請求組件是禁用狀態)。
    在這裏插入圖片描述
    最後在View Results Tree中查看執行結果
    在這裏插入圖片描述
    以下截圖展示我自己實際寫的一個例子吧。
    好吧,剛剛我發現我之前寫的例子因爲沒有改名稱被剛剛爲了演示新創建的測試計劃覆蓋了。。。
    重新寫。。。
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

上圖就是我創建的小例子的所有結構。看了前面的文章應該能看懂。有問題請留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章