『動善時』JMeter基礎 — 12、JMeter取樣器詳解:sampler

繁華似錦Fighting發表於2021-05-10

1、取樣器介紹

取樣器是用來模擬使用者操作的,向伺服器傳送請求以及接收伺服器的響應資料。

取樣器是線上程組內部的元件,也就是說取樣器只能線上程組中新增。

取樣器(Sampler)是效能測試中向伺服器傳送請求,記錄響應資訊,記錄響應時間的最小單元。(取樣器通常要進行這三個工作)

2、JMeter自帶的取樣器

  • HTTP Request:HTTP請求
  • Flow Control Action :測試活動
  • Debug Sampler :Debug取樣器
  • JSR223 Sampler :JSR223取樣器
  • AJP/1.3 Sampler :AJP/1.3取樣器
  • Access Log Sampler:Access Log取樣器
  • Bean Shell Sampler :Bean Shell取樣器
  • FTP Request :FTP請求
  • JDBC Request :JDBC Request
  • JMS Publisher:JMS釋出
  • JMS Point-to-Point :JMS點到點
  • JMS Subscriber :JMS訂閱
  • JUnit Request :JUnit請求
  • Java Request :Java請求
  • LDAP Extended Request :LDAP擴充套件請求預設值
  • LDAP Request :LDAP請求
  • OS Process Sampler :OS程式取樣器
  • SMTP Sampler :SMTP取樣器
  • TCP Sampler :TCP取樣器
  • Mail Reader Sampler:郵件閱讀者取樣器

說明:

  • 在測試工作中用的最多的可能就是“HTTP請求”。
  • 每一種不同型別的sampler可以根據設定的引數向伺服器發出不同型別的請求。
  • 在JMeter的所有Sampler中,Java Request SamplerBean Shell Sampler是兩種特殊的可定製的Sampler。

總結:

  • 取樣器的作用是向伺服器傳送請求,記錄響應資訊,記錄響應時間。
  • 多個取樣器按照它們在樹中出現的順序執行。

3、“HTTP請求”為例介紹一下取樣器

image

根據上圖解釋說明:

(1)HTTP Request:

  • 名稱(Name):取樣器名稱,也就是需要訪問介面的名稱。
    建議寫成請求介面的地址,例如:/login這樣在有多個取樣器的時候,左側列表就可以知道該取樣器是針對哪個介面的。
  • 註釋(Comments):對當前取樣器的解釋說明。

(2)Web伺服器:

  • 協議<Protocol(http)>:向目標伺服器傳送HTTP請求時的協議,可以是http或者是https或者File ,預設值為http協議 (根據需求定)。
  • 伺服器名稱或IP(Server Name or IP):HTTP請求傳送目標伺服器的域名或IP地址,例如www.baidu.com或者127.0.0.1
  • 埠號(Port Number):所訪問伺服器中應用所佔的埠,預設80埠。

(3)HTTP請求:

1)方法(Method):

傳送HTTP請求的請求方式。(可以根據介面文件獲得)

請求方式包括:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

2)路徑(Path):

目標介面的URL路徑(不包括伺服器地址和埠)。

也可以直接寫完整路徑(上面配置的IP+埠就可以省略了) ,不帶引數的api路徑。

3)內容編碼(Content encoding):

請求資料內容的編碼方式,預設值為iso8859編碼,但一般content encoding配置為UTF-8,來防止中文亂碼。

說明一下Content encoding屬性:

Accept-EncodingContent-Encoding是HTTP中用來對採用哪種編碼格式傳輸正文進行協定的一對頭部欄位。

工作原理如下:

1、首先瀏覽器(也就是客戶端)傳送請求時,通過Accept-Encoding帶上自己支援的內容編碼格式列表。

2、服務端在接收到請求後,從中挑選出一種用來對響應資訊進行編碼,並通過Content-Encoding來說明服務端選定的編碼資訊。

3、瀏覽器在拿到響應正文後,依據Content-Encoding進行解壓。

4)自動重定向:

如果選中該選項,當傳送HTTP請求後得到的響應是302/301時,JMeter會自動重定向到新的頁面,但是JMeter是不記錄重定向的過程內容。只能用於GET和HEAD方法,如果是POST或者PUT請求則取樣器不會傳送。

301、302響應碼說明:

官方的比較簡潔的說明:

  • 301 redirect:301 代表永久性轉移(Permanently Moved)
  • 302 redirect: 302 代表暫時性轉移(Temporarily Moved )

詳細來說,

它們的共同點301和302狀態碼都表示重定向,就是說瀏覽器在拿到伺服器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(使用者看到的效果就是他輸入的地址A瞬間變成了另一個地址B)

他們的不同在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜尋引擎在抓取新內容的同時也將舊的網址交換為重定向之後的網址;302表示舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜尋引擎會抓取新的內容而儲存舊的網址。

總結:

http 協議的 301 和 302 狀態碼都代表重定向。瀏覽器請求某url收到這兩個狀態碼時,都會顯示和跳轉到 Response Headers 中的Location。即在瀏覽器地址輸入 url A,卻自動跳轉到url B。

5)跟隨重定向:

Http Request取樣器的預設選項,當響應code是3xx時,自動跳轉到目標地址。與自動重定向不同,JMeter會記錄重定向過程中的所有請求響應,在檢視結果樹時可以看到伺服器返回的內容,如有多個跳轉則多個請求都會被記錄下來,此為預設選項。
自動重定向和跟隨重定向的區別只在於是否記錄多個跳轉的請求上

在JMeter預設選中跟隨重定向,但跟隨重定向自動重定向只能二選一。

6)使用keep Alive:

當該選項被選中時,JMeter和目標伺服器之間使用Keep-Alive方式進行HTTP通訊,預設選中。

HTTP請求中Keep-Alive模式說明:

如果一個瀏覽器對某一個域名有多個請求,就會進行頻繁的建立連線和斷開連線。所以HTTP 1.0中出現了Connection: keep-alive屬性,用於建立長連線,即我們所說的Keep-Alive模式。

Keep-Alive模式更加高效,因為避免連線頻繁建立和釋放的開銷。

7)對POST使用multipart/form-data:

使用multipart/from-dataapplication/x-www-form-urlencoded方式傳送HTTP POST請求,預設不選中。

說明POST請求表單提交的編碼型別:

multipart/from-dataapplication/x-www-form-urlencoded用來控制請求向伺服器傳送表單資料之前如何對其進行編碼。

enctype屬性 說明
application/x-www-form-urlencoded 預設編碼方式, key1=value1&key2=value2。
multipart/form-data 普通表單提交,以及表單檔案上傳。
text/plain 以純文字形式進行編碼,其中不含任何控制元件或格式字元,該方式不常用。

8)與瀏覽器相容的頭(Browser-compatible headers)

當勾選multipart/form-data時,勾選此項會截掉HTTP請求頭中的Content-TypeContent-Transfer-Encoding,而只傳送Content-Disposition部分。

(4)同請求一起傳送引數:

1)引數(Parameters):

在請求中傳送帶引數的URL ,JMeter提供了一個簡單的對引數化的方法。使用者可以將URL中所有引數設定在本表中,表中的每一行是一個引數值對(對應RUL中的 名稱1=值1)。

編碼這個選項最好勾選,因為如果引數值內含有ASCII Control Chars或者Non-ASCII characters或者其他符號的話,如果不勾選會導致傳送失敗(亂碼問題),勾選的話會自動將含有的這些特殊符號進行編碼。

image

2)訊息體資料(Body Data):

通請求一起傳送的資料訊息,這裡可以支援多種資料格式 json、xml等。

例如:

引數格式:name=zhangsan&age=15的形式。(引數以純文字形式)

引數格式:json形式。(需要配置http資訊頭管理器,新增Context-Type = application/json)

注意:Parameters和Body Data只能選用其中一種方式傳送引數。

3)檔案上傳(Files Upload):

在請求中傳送檔案。通常HTTP檔案上傳行為可以通過這種方式模擬,引數名稱就是傳送檔案對應的引數,MINE Type為資源媒體型別。

image

4、高階頁面選項介紹

image

根據上圖解釋說明:

(1)客戶端實現:

  • 實現(Implementation):傳送http請求的方式。可選項為Java和HttpClient4,預設為HttpClient4。

    HttpClient4是Java工具包實現的請求方式,是基於.net工具包二次定製,效率高。

    如果是上傳檔案的話一定要選擇,否則請求傳送成功了,其實檔案並未上傳成功。

  • 超時(毫秒)<Timeouts(milliseconds)>:超時設定。

    連結(Connect):連線超時時間,單位為毫秒;

    響應(Response):響應等待超時時間,單位為毫秒;

(2)從HTML檔案嵌入資源:

  • 從HTML檔案獲取所有內含的資源(Retrieve All Embedded Resources)

    當該選項被選中時,JMeter在發出HTTP請求並獲得響應的HTML檔案內容後,還對該HTML進行解析,並獲取HTML中包含的所有資源(圖片、flash等),預設不選中。

    如果使用者只希望獲取頁面中的特定資源,可以在後邊的URLs must match文字框中,填入需要下載的特定資源表示式,這樣只有能匹配指定正規表示式的URL指向資源會被下載。

  • 並行下載(Parallel downloads):是否使用自設資源池,勾選後可設定大小。

  • 數量(Number):資源池大小,預設設定為6。

  • 網址必須匹配(URLs must match):URL匹配過濾,填寫此項則只會下載與此內容項匹配的url的資源。

    例如:要獲取http://example.com/下的所有資源,使用正規表示式http://example.com/.*

(3)源地址:

只用於http協議且Implementation為HttpClient4的情況,此屬性用於啟用IP欺騙,會重寫了這個http請求使用的預設本地IP地址。

用於JMeter主機具有多個IP地址的情況。該值可以是主機名、IP地址或網路介面裝置,如“ey0”或“l0”或“wlan0”

可以設定多個,防止IP地址被服務端拉黑。

  • IP/主機名(IP/Hostname):使用特定的IP地址或(本地)主機名。
  • 裝置(Device):選擇該介面的第一個可用地址,該裝置可以是IPv4或IPv6。
  • 裝置IPV4:選擇名稱裝置的IPv4地址。
  • 裝置IPV6:選擇名稱裝置的IPv6地址。

(4)代理伺服器:

不想用本機的地址來傳送Http請求,而想使用代理伺服器時則填寫。

  • 伺服器名稱或IP:代理伺服器的名稱或者IP地址。
  • 埠號:該代理的埠號。
  • 使用者名稱:使用該代理的使用者名稱。
  • 密碼:使用者密碼。

(5)儲存響應為MD5雜湊:

選中該項,在執行時僅記錄服務端響應資料的MD5值,而不記錄完整的響應資料。在需要進行資料量非常大的測試時,建議選中該選項,以減少取樣器記錄響應資料的開銷。

到這裡“HTTP請求”這個取樣器介紹完了,每個取樣器的頁面和用法都不用,這裡不能一一進行說明,以後再用到哪種取樣器(Samplers)會單獨講解。

參考:

相關文章