如何在Loadrunner11中解決HTTP BASIC認證登錄報401的問題


在對Carte+kettle的性能測試過程中,通過在loadrunner中用web_set_user("cluster", "cluster","172.17.2.89:8080");可以登錄carte服務頁面,但是壓力測試過程中發現報告中產生了大量的HTTP 401請求。雖然這個錯誤不影響最終的測試,但是讓追求完美的我,感覺不舒服,總覺得哪里有個重要事情我沒搞明白。

 

通過Fiddler工具也能捕捉到這個401錯誤,但是登錄成功后,接着就是HTTP 200,這和loadrunner返回結果一致(先報401,接着就報200)。

 

 

 

這是為什么呢,難道是Carte服務有問題?帶着這個問題上網找相關資源,同時與開發一起探討,最終得到一個比較有說服力的解答如下:

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 關於BASIC認證的過程

1.  客戶端向服務器請求數據,請求的內容可能是一個網頁或者是一個其它的MIME類型,此時,假設客戶端尚未被驗證,則客戶端提供如下請求至服務器:

Get /index.html HTTP/1.0
Host:www.google.com

2.  服務器向客戶端發送驗證請求代碼401,服務器返回的數據大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="google.com"
Content-Type: text/html
Content-Length: xxx

3.  當符合http1.0或1.1規范的客戶端(如IE,FIREFOX)收到401返回值時,將自動彈出一個登錄窗口,要求用戶輸入用戶名和密碼。

4.  用戶輸入用戶名和密碼后,將用戶名及密碼以BASE64加密方式加密,並將密文放入前一條請求信息中,則客戶端發送的第一條請求信息則變成如下內容:

Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
注:xxxx....表示加密后的用戶名及密碼。

5.  服務器收到上述請求信息后,將Authorization字段后的用戶信息取出、解密,將解密后的用戶名及密碼與用戶數據庫進行比較驗證,如用戶名及密碼正確,服務器則根據請求,將所請求資源發送給客戶端

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

說明這個401錯誤是由HTTP BasicAuthenticator認證機制決定的,雖然得到了解答,但我還是不滿意,如何才能不報這個錯呢,對比了一下Jmeter,就發現Jmeter沒有這個問題,因為Jmeter通過加HTTP授權管理器就能解決,如下所示:

 

對比loadrunner的web_set_user函數,我們會發現,Loadrunner正是少了這個BASIC_DIGEST屬性,通過網上找資料,發現一個英文的資料有很明確的說明,參考鏈接如下

https://ptfrontline.wordpress.com/2009/12/23/loadrunner-http-401-authentication/

針對這上面英文資料說明,我就在web_set_user("cluster", "cluster","172.17.2.89:8080");后面再加一句web_set_sockets_option("INITIAL_BASIC_AUTH","1"); 然后回放腳本,不再報401錯誤,很正常的顯示出HTTP 200,而且直接馬上顯示完美的 Show status !  給自己鼓個掌!!!!!

 

最后提供一下http 基本認證登錄的腳本以供大家參考:

       web_set_user("cluster", 
                "cluster",  //r_decrypt("58cf7265b1677820107f74"), //可以選擇對密碼加密
                "172.17.2.89:8080");


      web_set_sockets_option("INITIAL_BASIC_AUTH","1");


      web_url("172.17.2.89:8080", 
                  "URL=http://172.17.2.89:8080/", 
                  "Resource=0", 
                  "RecContentType=text/html", 
                  "Referer=", 
                  "Snapshot=t2.inf", 
                  "Mode=HTTP", 
       LAST);

 


免責聲明!

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



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