背景
在實際測試日常中,產品有兩種登錄方式,一種是普通登錄方式,另一種則是Basic Auth方式登錄。兩種登錄對應着產品中不同的操作,對權限進行了一個划分。
Postman登錄
使用Postman登錄,如下方式入參,即可正常登錄成功
Jmeter登錄
同樣的一個登錄操作,換到jmeter中實現時,倒遇到了不小的麻煩,琢磨了些時間,終究是解決了,分享出來與大家共享。
1.遇到的問題
切換到jmeter進行登錄時,接口返回401,並報Unauthorized。401 是一個什么概念呢:“未經授權”。有兩種可能,一是賬戶密碼不對,二是請求格式或者 JMeter 相關設置存在問題。賬號密碼肯定是對的,那就是存在第二種問題了。
遇到問題了,顯示自己琢磨了一番,還是沒有解決,所以就來網絡上尋求幫助了。尋求一番下來,收獲還的確不小。
2.解決辦法1
解決思路:進行基本授權,需要添加值為 Basic base64(用戶名:密碼)的 Authorization 頭信息。
第一步: 添加 BeanShell PreProcessor
(前置處理器 > BeanShell PreProcessor),如下所示,說明:BeanShell PreProcessor 或者 JSR223 PreProcessor 任一均可
第二步:將以下腳本添加到 BeanShell PreProcessor
import org.apache.commons.codec.binary.Base64; byte[] encodedUsernamePassword = Base64.encodeBase64("username:password".getBytes()); vars.put("base64HeaderValue",new String(encodedUsernamePassword));
如下圖所示:
第三步:添加 HTTP 信息頭管理器
路徑:線程組>配置文件>HTTP 信息頭管理器
第四步:填寫正確的 Authorization 信息
header name 填: Authorization
header value 填:Basic ${base64HeaderValue} (第二步創建的變量)
如下圖所示:
第五步:添加 HTTP 請求
輸入獲取token的接口,如下:
第六步:查看結果
當創建 http 請求時,Authorization 將以 base64 編碼的字符串傳遞給服務器,成功發送請求后,在 Request Headers 中就可以看到 Authorization 的信息。
自 JMeter 3.2 以后,就不需要上述的方法了,有了更優化的解決方案,那就是解決辦法2。
3.解決辦法2
第一步: 添加 HTTP 授權管理器
(配置元件 > HTTP 授權管理器)
說明:它提供了自動將相關 Authorization
信息添加到 HTTP 請求 header 的功能。
第二步:添加授權信息
基本 URL:http://XXXXXXXX
用戶名:user
密碼:passwd
將 域 和 Realm 保留為空
Mechanism:BASIC_DIGEST
如下所示:
第三步:添加 HTTP 請求
輸入獲取token的接口,如下:
第四步:查看結果
Jmeter實現Basic Auth方式登錄,使用上述兩個辦法可以完美解決,希望對有疑惑的人有所幫助。個人還是喜歡第二種方式,第二種相對簡單一些。