http請求的注意事項及元件優先順序
在做效能測試時,不管遇到多大的麻煩,寫程式碼時不要使用beanshell
jmeter支援的語言:java,python2.7(不支援python3+),groove,jython,js
http請求的注意事項:
1. http請求協議:http可不寫,https必須寫
2. 伺服器名稱或IP:不能有斜槓
3. 埠號:tomcat的預設8080可不寫,其他埠號必須寫
4. 路徑:開頭必須加斜槓,且首尾不能有空格
5.http請求取樣器的引數:勾選編碼後,只作用於url的encoding編碼(如url含中文)
6. 內容編碼:3處可設定
a.http訊息頭管理器:json格式請求體一定要在http資訊頭管理裡面設定格式
可設定編碼如 Content-Type=json; charset=uft-8;
application/x-www-form-urlencoded:預設表單格式(當請求體不是json時,可預設不寫);
b.內容編碼:加utf8,避免亂碼,僅作用於請求體
c. 表單格式在引數頁籤中寫內容時,勾選 ”編碼“,引數值就會進行 urlencoded 編碼,若值中有中文或特殊符號時,必須勾選編碼,可能進入伺服器內部後亂碼,建議都勾選編碼
7. response的亂碼:是伺服器返回的,因為jmeter.properties讀取的是作業系統(gbk)的語言,約1085行修改為sampleresult.default.encoding = 開發設定的編碼
(gb2312國標編碼:支援簡體中文,不支援繁體字;big5編碼:支援繁體字,不支援簡體字;gbk國際編碼:支援中文;uft8編碼:除數字字母外均支援)
8. 必填欄位與非必填欄位儘可能都寫上
9. 結果樹的結果順序按先收到的響應先顯示,並非先請求先顯示
自動重定向、跟隨重定向
1. 自動重定向:也會重定向,但是不會記錄中間的過程,無法提取中間過程中需要的資料
2. 跟隨重定向:預設勾選,請求會自動進行跳轉到新的地址上,而且會顯示重定向的過程,我們也能夠提取重定向過程中的資料
後置處理器,可以提取出,跟隨重定向過程中的資料
3. 若發生重定向,在檢視結果樹中會多一個摺疊的 +
結果樹中:紅色 + ,請求方法錯誤,可能摺疊
結果樹中:綠色 + ,請求方法正確,可能摺疊
使用keepAlive:長連線的標誌
現在的介面協議http版本是1.1,預設是長連線(連線建立起來,保持的時間長就是長連線,通過3次握手建立連線)
請求頭中含有 Connection: keep-alive,保持通道長時間連線
注意:
長連線建立起來後,會佔用發起方1個埠,被測伺服器要使用一個連線通道,這個埠數量,就可能是效能的一個瓶頸
(埠有限,windows可以支援理論值6.3w個埠,埠範圍1024-65534之間,但windows沒有開放這麼多埠)
伺服器的通道(也稱連線池),也可能是效能的一個瓶頸(被測的伺服器的通道,要有資源才能建立,不可能無限大)
解決方案:
1.取消keepAlive勾選,只是延緩了出錯的時間
2. 修改系統的埠相關配置(linux/windows作業系統修改)
對post使用multipart / form-data:看起來是表單,但又不是表單
與瀏覽器相容的頭:useragent
jmeter的作用域與優先順序
1. 優先順序最高:配置元件
典型的元件:csv資料檔案設定,訊息頭管理器,請求預設值,使用者定義變數
作用域:最先被執行
相同優先順序,執行順序,從上往下執行
2. 發起請求的元件:取樣器
測試計劃:jmeter中測試計劃,是指令碼的根路基
執行緒組:進行效能場景設計
取樣器:線上程組下面,是真正發起請求的元件,是真正幹活的
根據不同的協議有不同的取樣器
執行順序:setUp執行緒組-----》執行緒組-----》tearDown執行緒組 (setUp,tearDown,可設定執行次數)
3. 邏輯控制器:控制取樣器的邏輯,在取樣器之前執行
邏輯控制器被執行的前提是必須有取樣器,若無取樣器,則不執行
4. 定時控制器:作用於所有的取樣器前面,每個取樣器都會執行定時控制器
5. 前置處理器:在取樣器執行之前被執行,在請求之前做準備
經典處理器:使用者引數
6. 後置處理器:對取樣器的結果進行處理,在取樣器執行之後執行
經典處理器:json提取器,正則提取器
7. 斷言:對結果進行判斷,在取樣器執行之後被執行(與後置處理器同級別,從上往下執行)
8. 監聽器:
重難點:
執行順序: 有相同型別的元件,從上往下執行
測試計劃:
配置元件
邏輯控制器
定時器
取樣器
後置處理
斷言
監聽器
前置處理器