原 jmeter效能測試---登入百度進行搜尋
在做web程式效能測試時,loadrunner和jmeter是兩款常用的工具,兩者比較起來,jmeter非常輕巧,且開源免費,上手快。這裡簡單介紹下jmeter的使用,以登入百度進行搜尋為例。
jmeter執行需要jdk環境,這個不多做介紹。軟體介面:
-
右擊“測試計劃”,新增一個執行緒組
執行緒組介面可以配置執行緒的數量,“Ramp-Up Period(in seconds):"這個引數是
配置這些執行緒組在多少時間內完全啟動(可以把時間設定長點,這樣防止一開始就對伺服器造成很大壓力),還可以配置迴圈次數,後面還有排程器配置。
-
分析一下登入百度的過程,首先訪問http://www.baidu.com,百度分配給你一個baiduid的cookie;點選“登入”按鈕,瀏覽器會帶著相關引數和cookie去請求nsclick.baidu.com;之後百度為了防止csrf攻擊(csrf詳細解析見:
-
ok,開始了,線上程組內新建一個http請求, 填寫域名、埠等資訊
訪問百度後,伺服器會立刻分配一個BAIDUID的cookie,我們需要提取這個cookie,完成後續的認證,右擊這個http請求,新增一個正則表示式提取器
它的頁面應該類似這樣填寫:
cookie在返回包中的訊息頭中,選中訊息頭,cookie 名字為BAIDUID,正則表示式用來匹配訊息頭中的cookie,http訊息頭中的cookie是這個樣子:BAIDUID=EB8A76382372306096A079F34C1C84EA:FG=1; H_PS_PSSID=1690_1438_1541_1542_1662_1582,表示式BAIDUID=(.*); 可以提取出其中的cookie value(如果不瞭解正則表示式,可以參見:
-
ok,下一步,點選百度頁面右上角的“登入”,用httpfox或者瀏覽器自帶的網路檢視去找相應的引數。對應到jmeter中,就是再新建一個http請求,get方法。應該如下填寫:
引數共8個,要分別填寫在表格裡,其中有個引數t,指的是當前的Unix時間戳,jmeter提供一些函式,我們可以直接呼叫 ${__time()}這個就是呼叫jmeter的系統函式獲取本地時間。
-
呃,忘了一步,第三步中我們用正則表示式,提取出了返回訊息http頭中的cookie,我們需要將這個cookie,放到jmeter的訊息管理器中,這樣在jmter在傳送http請求時會自動帶上相應cookie,右擊“執行緒組”新增cookie管理器元件:
新增完畢,進行配置,應該是這樣樣子的:
名稱是cookie 的key,要和http訊息頭中的名字對應;值是我們從正則表示式中提取的cookie value,${BAIDUID}是指取出BAIDUID這個變數的值(要和正則表示式頁面的名字對應),下面兩個是後面用到的。cookie的域和路徑依次填好。
-
繼續,我們點選了登入按鈕,百度為了防止csrf攻擊,會給我們一個token(這個token在我們提交密碼時一起提交過去),我們要在jmeter中再新建一個http 請求,來獲取這個token,get方法。相應引數如圖:
我們仍舊需要一個正則表示式來獲取這個token,注意這個token並沒有放在返回訊息的http頭中,而是在響應訊息中的js程式碼中,故firefox中我們無法看到,這裡我用的是burp suite這個工具(具體使用方法參見:http://www.yeetrack.com/?p=173),在看到那段javascript程式碼後,我們用正則表示式進行提取:
-
獲取完這個token,我們就可以提交使用者名稱和密碼了。再次新建一個http請求,構造一個post請求,應該是這樣:
注意由於是https連線,故埠為443,引數一共16個,自己去firefox中依次檢視並新增到表格中,這裡對於ppui_logintime這個引數有些不明白,應該是和本地時間有關,不太確定,隨便填寫了一個,校驗通過了,如果你有更深的理解,歡迎討論。
post請求之後,伺服器校驗使用者名稱密碼是否匹配,如果通過,伺服器會發送cookie到瀏覽器,ok,再次用正則表示式提取,這次需要提取兩個cookie,SAVEUSERID和BDUSS(不要忘記將這兩個新增到cookie管理器中)
-
OK ,至此登入動作結束,我們可以試驗一下,執行之前我們先新增一個“檢視結果樹”來統計執行結果。
點選中上方的執行按鈕。你的結果應該類似這樣:
我們可以看到每個包的傳送和相應情況,檢查一下是否登入成功。看下面截圖,返回訊息為瀏覽器設定cookie,程式碼登入通過。
-
好了,登入成功,我們來提交個搜尋的請求。新建一個http請求,如下圖
當然如果我們要搜尋的關鍵詞很多,也可以從外面的檔案中讀取,方法是:線上程組中新增一個csv data set config,這個元件專門用來讀取外部的文字檔案。
keyword.txt中的關鍵字要用制定的字元隔開,這樣在執行時文字中的關鍵字會被載入到keyword變數中,我們就可以在指令碼中通過${keyword}來引用。
-
最後在新增上結果統計的元件,來分析web程式的效能。
最後分享自己的指令碼,http://wangpan.baidu.com/share/link?shareid=149068&uk=537055152。我是在登入動作中加了個一次控制器,讓每個執行緒的登入動作只執行一次,搜尋可以執行多次,如果你下載使用,將其中傳送使用者名稱、密碼的post包中的username和password引數修改成自己的賬號即可,然後在d盤下新建keyword.txt,裡面放著用逗號隔開的關鍵詞即可。 本文由易蹤網原創,如果你喜歡本文,請關注易蹤網。