『動善時』JMeter基礎 — 47、JMeter的HTTP代理服務器詳細介紹

HTTP代理服務器允許JMeter在使用常規瀏覽器,瀏覽Web應用程序時攔截並記錄操作。JMeter將創建測試樣本對象,並將其直接存儲到的測試計劃中。這樣你就可以在操作錄製的同時,還可以查看錄製的測試計劃。

要使用HTTP代理服務器,需要設置瀏覽器對所有HTTP和HTTPS請求使用代理。錄製腳本時,最好使用無痕瀏覽模式,這可以確保瀏覽器沒有存儲的Cookie信息,並防止保存某些更改。例如:Firefox不允許永久保存證書替代。

1、HTTP代理服務器的添加

添加HTTP代理服務器組件操作:選中「測試計劃」右鍵 —> 添加 —> 非測試元件 —> HTTP代理服務器

HTTP代理服務器界面如下:

image

2、HTTP代理服務器界面詳解

HTTP代理服務器組件的詳細說明:

  • 名稱HTTP代理服務器組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備註信息,對該HTTP代理服務器組件的簡短說明,以便後期回顧時查看。

(1)State:狀態

image

說明

  • 啟動按鈕:啟動代理服務器。一旦代理服務器啟動並準備接受請求,JMeter就向控制台寫入消息:「代理啟動並運行!」
  • 停止按鈕:停止代理服務器。
  • 重啟按鈕:停止並重新啟動代理服務器。當你操作(改變、添加、刪除)包含、排除過濾器時,這個按鈕很有用。

(2)Global Settings:全局設置

image

說明

  • 端口:設置JMeter代理服務器所要用的端口,不能被佔用,否則JMeter無法使用。
    默認啟用8888端口。
    可以在CMD中使用netstat -ano|findstr "8888"查看端口是否被佔用。
  • HTTPS Domains:編寫代理主機的域名或者主機IP地址,可以對指定地址進行請求錄製。
    例如:* .example.com*.subdomain.example.com

(3)Test Plan Creation:測試計劃創建

test plan content:測試計劃內容。

image

說明

  • 目標控制器:選擇錄製的腳本所保存的位置。
    1)使用錄製控制器:需要在線程組中添加錄製控制器組件(在邏輯控制器元件中添加)。
    否則在開啟HTTP代理服務器的時候會提示:

    Target Controller is configured to "Use Recording Controller" but no such controller exists, ensure you add a Recording Controller as child of Thread Group node to start recording correctly
    

    意思是:你選擇存儲腳本的目標控制器為「使用錄製控制器」,但不存在這樣的控制器,請確保將錄製控制器組件添加為線程組節點的子節點,才可以正確開始錄製。
    2)測試計劃>線程組:錄製的腳本保存到目標線程組。(只有在測試計劃中添加了線程組,才能看到該選項)
    3)測試計劃>HTTP代理服務器:錄製的腳本保存到HTTP代理服務器組件下。
    4)Test Plan > 線程組 > 控制器:錄製的腳本保存在線程組中的目標控制器下。(只有在測試計劃中添加了控制器,才能看到該選項)

  • 分組:是否將錄製的單個「點擊」請求進行分組,以及如何在錄製中表示該分組。
    1)不對樣本分組:很好理解,就是請求什麼就記錄什麼,對所有錄製的取樣器不分組。
    2)在組間添加分隔:每一個Sampler結束都會有分隔符間隔開。即:在取樣器分組之間添加以名為----------的控制器。
    3)每個組放入一個新的控制器:每一個Sampler請求開始時,都會有一個簡單控制器生成。即:每個分組放到一個新的簡單控制器下。
    4)只存儲每個組的第一個樣本:每個Sampler請求時,如果有子請求,那子請求是不會被記錄的,只記錄第一個URL請求的樣本,而這些取樣器的Follow RedirectsRetrieve All Embedded Resources…等選項將被設置上。這種情況雖然很多人說比較推薦,但是個人覺得會丟失許多重要的請求,建議大家還是視情況選擇。
    5)Put each group in a new transaction controller:每個Sampler請求開始時,都會生成一個事務控制器,分組的所有取樣器都保存在控制器下。
  • 記錄HTTP信息頭:要向測試計劃添加信息頭嗎?如果勾選,則將向每個HTTP取樣器,添加HTTP信息頭管理器。
  • 添加斷言:為每個空的取樣器添加一個斷言。
  • Regex matching:指定在替換變量時,是否使用正則表達式匹配。
    如果勾選,則將取樣器中的信息,使用正則表達式來匹配用戶定義變量值,替換為變量名${變量名},進行替換。匹配時,它只接受整個詞匹配,不接受匹配單詞一部分。

(4)Requests Filtering:請求過濾

image

說明

  • Content Type filter:根據請求頭中的content-type屬性過濾請求,例如"text/html [;charset=utf-8 ]」
    該字段為正則表達式,它會檢查content-type屬性中,是否包含了指定字符串[不必匹配整個字段]。
    順序是:先檢查content-type的包含過濾器,再檢查排除過濾器,過濾掉的取樣器將不會被儲存。
  • 包含模式:使用它可以過濾URL路徑,只有取樣器的完整URL匹配通過,該正則表達式才會被記錄。
    如果在包含模式中至少有一個條目,則只記錄匹配一個或多個包含模式的請求。
    如果我們要錄製某個網站的請求,可以添加一個URL過濾,防止錄製不必要的請求。
  • 排除模式:使用它可以過濾URL,滿足該條件的請求不會被錄製。
  • Notify Child Listeners of filtered samplers:通知子監聽器被過濾的採樣器。

提示:

  • 包含排除模式使用正則表達式匹配。它們將與每個瀏覽器請求的主機名,端口,路徑和查詢(如果有)進行匹配。
  • 如果有任何包含模式,則URL 必須至少與這些模式之一匹配,否則將不會被記錄。如果存在任何排除模式,則URL 不得與任何模式匹配,否則它將不會被記錄。通過使用包含和排除的組合,可以篩選記錄實際需要記錄的測試樣本。
  • 注意:由正則表達式匹配的字符串必須與整個 host + path字符串相同。
  • 如果要記錄錄製過程中樣本的響應數據,需要將查看結果樹,添加為HTTP代理服務器的子代組件。即可通過查看結果樹,查看錄製的請求響應數據。

(5)HTTP Sampler settings:HTTP取樣器設置

image

說明

  • prefix/Transaction name:在錄製時,在取樣器名稱前添加指定的前綴,或者使用用戶指定的事務名稱,替換取樣器名稱。
    例如:指定prefixaa,如下圖所示:
    image
    例如:指定transaction namebb,如下圖所示:
    image
  • Create new transaction after request (ms):兩個請求之間的不活動時間超過此值,則將它們分為兩個單獨的組。
  • 從HTML文件獲取所有資源:在生成的取樣器中,設置獲取所有嵌入式資源。
  • 自動重定向:錄製的取樣器是否要設置自動重定向。
  • 跟隨重定向:錄製的取樣器是否要設置跟隨重定向。
  • Use keep Alive :錄製的取樣器是否要設置為keep Alive狀態。
  • Type:要生成哪種類型的取樣器,HTTPclient4Java,默認HTTPclient4

參考: