查詢計划(天氣查詢)
這是一個入門計划,僅使用jmeter進行查詢功能的計划,可參考http://www.cnblogs.com/TankXiao/p/4045439.html有代碼可下載。不過我還是以自己的學習再講解一下。
實際編寫web測試時,你會發現:只有熟悉HTTP,才能理解Jmeter的實現方式,才能更好的去使用它,因為它就是模擬http的。
計划目標:根據城市名稱,獲取城市代碼,然后獲取到天氣信息
分析步驟:
第一步: 發送請求到http://toy1.weather.com.cn獲取城市代碼
比如上海,http://toy1.weather.com.cn/search?cityname=上海
從這個請求的response 中獲取到上海的城市代碼.
(上海的地區代碼是101020100)
第二步: 發送請求: http://www.weather.com.cn/weather2d/101020100.shtml 可以得到該城市的天氣數據
我用到的JMETER點有:自定義變量、關聯(正則表達式)、斷言
1. 第一步:創建線程組
JMETER的所有任務都必須線程處理,可以理解為WEB的請求就是一個線程組,所以需要模擬線程組來實現功能。
操作:添加——Threads(Users)——線程組,如圖所示
釋:
名稱:自定義的線程組名稱。
線程數:即設置發送請求的用戶數,即並發數。
Ramp-Up Period(in seconds):所有線程啟動起來的總時間,單位為妙。如果未指定ramp-up period ,也就是說ramp-up period 為零, JMeter 將立即建立所有線程。假設ramp-up period 設置成T 秒, 全部線程數設置成N個, JMeter 將每隔T/N秒建立一個線程。
循環次數:請求的重復次數,如果選擇永遠,則一直請求;輸入次數,則根據指定次數重復請求;如果為1,則僅執行一次請求。
Delay Thread creation until needed:直到需要時延遲線程的創建。
調度器:選中之后可以配置啟動時間、結束時間,立即或者預定的啟動及結束時間;
持續時間,即測試計划持續多長時間,會覆蓋結束時間;
啟動延遲,即測試計划延遲多長時間啟動,會覆蓋啟動時間。
2. 第二步:創建一個請求,獲取城市代碼
首先:創建自定義變量
我們可以直接把需要查詢的“城市”寫在url地址進行請求(相當於一個常量),也可以設置為參數進行傳遞請求(相當於變量)
這里就介紹怎么創建自定義變量
定義一個變量叫 city. 使用它的時候用 ${city}
操作:添加——配置原件——用戶定義的變量,如圖所示。然后設置變量名稱為city,值為上海
然后:創建一個HTTP請求
操作:添加——Sampler——HTTP請求,如圖所示
輸入http的請求信息,如下圖所示
請求名稱:citycode。
發送一個Get 方法的http 請求: http://toy1.weather.com.cn/search?cityname=${city}
釋:
名稱:自定義的HTTP請求的名稱。
服務器名稱或IP:必填,內容為HTTP請求的Host頭域信息,表示請求url的原始服務器或網關的位置(域名)。
HTTP請求:這里測試web查詢,所以協議一般默認的都是http。方法,根據http請求使用的方法選擇。Content encoding當參數值會有特殊字符時,最好設置一下,一般為utf-8.
路徑:主要指跟在服務器名稱或IP后的參數信息。
最后:創建HTTP信息頭管理器
為什么要創建http信息頭呢,我前面說了jmeter就是模擬http發送請求的,但是它畢竟不是http,所以測試某些系統的時候,可能會檢測http請求的某些信息,比如這里的系統,可能會檢測到http的header,如果不包含,可能跳轉出現302.
操作:選擇http請求,右鍵——添加——配置元件——HTTP信息頭管理器。
輸入信息頭的值,這里輸入的是Referer的值,也可以添加其他。
補充:添加響應斷言、斷言結果
響應斷言操作:選擇http右鍵添加——斷言——響應斷言。
斷言響應內容是否包含上海的字符串。
釋:
模式匹配規則:選擇“包括”“匹配”時,支持正則表達式;當為Equals和Substring時,則為完全匹配。
斷言結果操作:選擇線程組右鍵添加——監聽器——斷言結果
3. 第三步:創建結果樹
創建結果樹,當然就是為了看執行結果了,當然還有其他接聽結果的,請自行選擇。
操作:右鍵線程組添加——監聽器——查看結果樹。
點擊執行按鈕就可以執行前面編寫的citycode請求信息了,通過為綠色,出現問題為紅色。
如圖,響應數據就是我們需要城市代碼信息了,同時第2步會對內容進行斷言。
得到了響應數據,但是內容很多。我們只需要上海對應的“城市代碼”,那么怎么得到呢?
4. 第四步:關聯,正則表達式提取器
所謂關聯, 就是第二個Requst, 使用第一個Request中的數據(后置關聯)
我們這里,就是需要將城市代碼提取出來,給第二個http用,用來獲取天氣。
操作:右鍵線程名稱——后置處理器——正則表達式提取器,
通過第3步可以看到響應主體內容的格式,我們只要根據格式填寫下面的即可。
釋:
引用名稱:下一個請求要引用的參數名稱,如填寫title,則可用${title}引用它。
正則表達式:():括起來的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太貪婪,在找到第一個匹配項后停止。
模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給title。如:$1$表示解析到的第1個值
匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0
缺省值:如果參數沒有取得到值,那默認給一個值讓它取。
5. 第五步:創建第二個請求,獲取天氣
創建第二個http請求,請求信息為 http://www.weather.com.cn/weather2d/${citycode}.html
其中${citycode} 中的數據, 是從第4步正則表達式獲取的
此時,再重復第第三步,清空上次結果,再,則可以獲取到響應的天氣信息,這樣的一個計划就完成了。