『動善時』JMeter基礎 — 20、JMeter配置元件【HTTP Cookie管理器】詳細介紹


1、HTTP Cookie管理器介紹

在接口測試中,某些接口的調用,需要帶入已有Cookie,比如有些接口需要登陸后才能訪問。

JMeter接口請求中使用Cookie有如下兩種方式:

  1. 直接在HTTP信息頭管理器組件中添加Cookie頭域信息,適用於已經知道請求所用Cookie數據的情況。
  2. 使用JMeter的Cookie管理機制,既可以手動添加,同時JMeter也會將操作流程中獲取的參數自動保存,因此可以通過調用前置接口來完成Cookie獲取。

官方提示

If there is more than one Cookie Manager in the scope of a Sampler,
there is currently no way tospecify which one is to be used.
Also. a cookie stored in one cookie manager is not available to
any other manager so use multiple Cookie Managers with care.

如果一個取樣器范圍內不止一個Cookie管理器,則當前無法指定要使用哪個Cookie管理器。 另外存儲在一個Cookie管理器中的Cookie信息,與其他任何Cookie管理器之間均不能相互引用,因此請謹慎使用多個Cookie管理器。

2、HTTP Cookie管理器界面詳解

添加HTTP Cookie管理器組件的操作:選中“線程組”右鍵 —> 添加 —> 配置元件 —> HTTP Cookie管理器

HTTP Cookie管理器界面如下:

image

界面詳細說明

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

(1)Options選項

  1. Clear cookies each iteration:如果勾選Clear cookies each iteration?(每次反復清除Cookies?)此項,意味着線程在每次請求結束后,都會將本次請求產生的Cookie進行清除,下次請求時重新獲取。
  2. Cookie Policy:選擇Cookie的管理策略。建議選擇StandardStandard strict。這兩種策略兼容性設計要求是適應盡可能多的不同的服務器,也就是兼容性更好。

(2)存儲在Cookie管理器中的Cookie(User-Defined Cookies) :

  1. Name:Cookies包含對值的name。
  2. Value:Cookies包含對值的value。
  3. Domain:接收HTTP請求的服務器的域名。
  4. Path:路徑,地址URI,就相當於定義哪個路徑下,以及子路徑可以使用這個Cookie。
  5. Secure:安全性,默認不勾選為false。
  6. Add:新增一條Cookie。
  7. Delete:刪除選中的Cookie。
  8. Load:從本地目錄加載已有的Cookie。
  9. Save:手動添加的Cookie存儲到本地目錄。

3、JMeter中對Cookie的管理

在使用Cookie管理器時,沒有選擇對應的策略 會導致Cookie傳遞不了

HTTP Cookie管理器的作用:用於管理測試計划運行時的所有的Cookie。

(1)Cookie的存儲

JMeter中對Cookie的管理,可以自動存儲是,也可以手動存儲。

1)自動存儲

  • Cookie管理器會自動記錄每一個請求所產生的Cookie,在后邊對同源站點進行的請求中,都可以使用對應的Cookie進行發送,每個Cookie都有自己的存儲區域。每一個cookie是完全獨立的,即當遇到非同源站點時請求所帶的cookie將不一樣。
  • Cookie管理器的行為與瀏覽器中存儲和發送Cookie的行為是一致的。
  • 注意:JMeter中這種自動收集的Cookie不會在Cookie管理器中進行展示,但是運行后通過查看結果樹可以查看到Cookie信息,接受到的Cookie會被自動存儲在線程變量中,在2.3.2版本之后不再存儲,如果你想要Cookie管理器自動存儲收集到 的cookie,你需要修改JMeter.property文件。

保存Cookie數據到線程變量中:

修改jmeter/bin/jmeter.properties文件。

CookieManager.save.cookies=true   # 取消注釋,false修改成true

默認線程中變量名為COOKIE_ + Cookie名

JMeter.property文件中的CookieManager.name.prefix= 屬性,能夠用來修改默認的COOKIE_開頭。

提示:默認情況下,空值的Cookie會被忽略。可以通過設置 JMeter 屬性來更改此設置 CookieManager.delete_null_cookies = false

2)手動存儲:

手動添加的Cookie具有全局性,會在發送請求時自動附加到所有的請求中,即被所有的請求所共享

手動添加Cookie的方式有兩種:

  1. 在Cookie管理器組件界面中一個一個的添加;
  2. 直接利用瀏覽器的插件(如火狐的firebug)導出。然后通過load按鈕將Cookie進行導入。使用Firefox的firebug插件導出的Cookie信息,和JMeter中配置的Cookie樣式幾乎同樣。

提示:自定義 Cookie 的過期時間會很長。

手動存儲Cookies示例

比較簡單的做法是使用Firefoxfirebug插件導出Cookies信息。

如下圖所示:

image

然后,在把Cookies數據文件導入到JMeter的HTTP Cookie管理器組件中。

如下圖所示:

image

(2)Cookie的管理策略

  1. Standard策略:默認使用,選擇StandardStandard strict。這種策略兼容性設計要求是適應盡可能多的不同的服務器,也就是兼容性更好。
  2. RFC2109策略:RFC2109是W3C組織第一次推出的官方Cookies標准。理論上,所有使用版本1-Cookies的服務端都應該使用此標准。HttpClient已經將此標准設定為默認。遺憾的是,許多服務端不正確的實現了標准或者仍然使用Netscape標准。所有有時感到此標准太多於嚴格。
    RFC2109是HttpClient使用的默認Cookies協議。
    總結:RFC2109為官方HTTP狀態管理規范,並被RFC 2965取代的老版本,即過時的嚴格策略。
  3. RFC2965策略:RFC2965定義了版本2並且嘗試去彌補在版本1中Cookie的RFC2109標准的缺點。RFC2965是,並規定RFC2965最終取代RFC2109
    總結:RFC2965為官方HTTP狀態管理規范。
  4. Netscape策略:Netscape是最原始的Cookies規范,同時也是RFC2109的基礎。盡管如此,還是在很多重要的方面與RFC2109不同,可能需要特定服務器才可以兼容。
  5. Browser Compatibility策略:這種兼容性設計要求是適應盡可能多的不同的服務器,盡管不是完全按照標准來實現的。如果你遇到了解析Cookie的問題,你就可能要用到這一個規范。
    有太多的web站點是用CGI腳本去實現的,而導致只有將所有的Cookies都放入Request header才可以正常的工作。這種情況下最好設置http.protocol.single-cookie-header參數為true。
    總結:這是一個瀏覽器兼容性的策略。
  6. Ignore Cookies策略:此規格忽略所有Cookie 。被用來防止HttpClient接受和發送的Cookie。
  7. best-match策略:最佳匹配Meta(元)策略。Meta(元)Cookie規范采用了一些基於又HTTP響應發送的Cookie格式的Cookie策略。它基本上聚合了以上所有的實現到以一個類中。

概括總結

  • Cookie Policy:Cookie策略,從JMeter3.0開始默認是Standard,具體是跟服務器端的實現方式有關的,各公司可能不一樣,我試用了其它的幾個選項都獲取不到Cookie,只有Netscape策略才能獲取到。所以當你獲取Cookie有問題時,也可以檢查一下這個選項。
  • 存儲在Cookie管理器中的Cookie:在這里可以添加用戶自定義的Cookie,並且會被作用域內的所有線程共享。

4、補充:Cookie的屬性介紹

Cookie的主要屬性如下

  • name:唯一的Cookie名稱。通常來講Cookie的名稱是不區分大小寫的。
  • value:Cookie變量的值,最好為Cookie的namevalue屬性進行URL編碼。
  • DomainDomain屬性指定瀏覽器發出 HTTP 請求時,哪些域名要附帶這個 Cookie,也就是Cookie的有效區域,該區域發送的請求中都會包含這個Cookie信息。
    如果沒有指定該屬性,瀏覽器會默認將其設為當前 URL 的一級域名,比如www.example.com會設為example.com,而且以后如果訪問example.com的任何子域名,HTTP 請求也會帶上這個 Cookie。如果服務器在Set-Cookie字段指定的域名,不屬於當前域名,瀏覽器會拒絕這個 Cookie。
  • PathPath屬性指定瀏覽器發出 HTTP 請求時,哪些路徑要附帶這個 Cookie。只要瀏覽器發現,Path屬性是 HTTP 請求路徑的開頭一部分,就會在頭信息里面帶上這個 Cookie。比如,PATH屬性是/,那么請求/docs路徑也會包含該 Cookie。當然,前提是域名必須一致。
  • ExpiresExpires屬性指定一個Cookie具體的到期時間,到了指定時間以后,瀏覽器就不再保留這個 Cookie。它的值是 UTC 格式,可以使用Date.prototype.toUTCString()進行格式轉換。
    如果不設置該屬性,或者設為null,Cookie 只在當前會話(Session)有效,瀏覽器窗口一旦關閉,當前 Session 結束,該 Cookie 就會被刪除。
    另外,瀏覽器根據本地時間,決定 Cookie 是否過期,由於本地時間是不精確的,所以沒有辦法保證 Cookie 一定會在服務器指定的時間過期(會存在偏差)。
  • Max-AgeMax-Age屬性指定從現在開始 Cookie 存在的秒數,比如60 * 60 * 24 * 365(即一年)。過了這個時間以后,瀏覽器就不再保留這個 Cookie。
    如果同時指定了ExpiresMax-Age,那么Max-Age的值將優先生效。
    如果Set-Cookie字段沒有指定ExpiresMax-Age屬性,那么這個 Cookie 就是 Session Cookie,即它只在本次對話存在,一旦用戶關閉瀏覽器,瀏覽器就不會再保留這個 Cookie。
  • secure:安全標識。它是一個布爾值,指定在網絡上如何傳輸Cookie。
    Cookie默認是不安全的,是通過一個普通的HTTP連接傳輸。
    指定secure標識為True后,只有在使用SSL鏈接時候才能發送到服務器,如果是HTTP鏈接則不會傳遞該信息。就算設置了secure 屬性也並不代表他人不能看到你機器本地保存的 Cookie 信息,所以不要把重要信息存放入Cookie 中就對了。
  • HttpOnly:告知瀏覽器不允許通過腳本document.cookie去更改這個值,同樣這個值在document.cookie中也不可見。但在HTTP請求中仍然會攜帶這個cookie。注意這個值雖然在腳本中不可獲取,但仍然在瀏覽器安裝目錄中以文件形式存在。(這項設置通常在服務器端設置)

提示:其中namevalue屬性是必選項,其它屬性都是可選項。

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM