一、CSV Data Set Config
以中信銀行的基金搜索接口為例,在線程組鼠標右鍵選擇”添加”->”配置元件”->”CSVDataSetConfig”
文件名:可以輸入?yún)?shù)文件的絕對路徑或相對路徑,參數(shù)文件可以保存在txt或csv文件里。
文件編碼:大部分情況下都是UTF-8,如果出現(xiàn)中文亂碼可以嘗試下GBK。
變量名:接口請求時,引用這個參數(shù)化的變量名稱,多個變量用英文逗號隔開。
忽略首行:若參數(shù)文件的數(shù)據(jù)量較小,可以設置成FALSE。若較多建議設置成TRUE(實際上就是表頭).
分隔符:參數(shù)文件里多個參數(shù)之間用分隔符隔開,默認情況下是英文逗號,但是如果你的參數(shù)帶逗號比如第一個參數(shù)是”hello,wego”,第二個參數(shù)是”你好,我們走”,此時若使用默認分隔符,系統(tǒng)會認為有4個參數(shù),第一個是hello第二個是wego,第三個是你好,第四個是我們走;這時要修改CSVDataSetConfig里的分隔符,觀察發(fā)現(xiàn)兩個參數(shù)中都不含”==”,所以我們可以把分隔符改成==,分隔符如何設置全憑個人喜好,只要參數(shù)中沒有這個符號即可。
后面4個不常用,使用默認配置就行了。
輸入CSV Set Config的變量名,并用${}把變量名包在大括號里,第一次請求,key會讀取“股票”,type會讀取“1”,5次全部讀取完后,會循環(huán)讀取,直到所有進程結(jié)束。
可以看到第三次請求調(diào)用的就是第三組的參數(shù)A和3。
二、用戶定義變量
這次我們加一個接口,產(chǎn)品搜索接口,產(chǎn)品搜索界面如下:
用戶定義變量有2個地方可以設置,第一個是測試計劃,第二個是配置元件。首先看一下測試計劃,點擊測試計劃節(jié)點,點擊添加,輸入變量名稱和變量值,接口應用變量的方式和CSV一樣,${key}
第二個配置元件,線程組鼠標右鍵”添加”->”配置元件”->”用戶定義變量”
兩者區(qū)別在于測試計劃中設置的變量,是針對所有線程,所有請求的。而配置元件添加的用戶定義變量,是根據(jù)他的上級節(jié)點決定的。若上級節(jié)點是線程,則只對這個線程起作用,若上級節(jié)點是請求,則只對這個請求起作用,若上級節(jié)點是測試計劃,則對所有線程的所有請求都起作用。比如圖中的配置元件,就只對“Thread Group”這個線程組起作用。
三、計數(shù)器
線程組鼠標右鍵,”添加”->”配置元件”->”計數(shù)器”
Starting value: 開始值
Maximum value: 最大值
Increment: 遞增值,每次增長值,在基金搜索接口中有一個參數(shù)是fundType,代表基金類型,取值范圍是1到5,所以我們這里設置開始值是1,最大值是5,每次遞增1。
Number format: 數(shù)字格式,若不填寫,則會從初始值到最大值之間以自然數(shù)的方式遞增,比如1,2,3,4,5。上面的截圖中,我輸入了00,所以系統(tǒng)會為我補齊到2位,在請求時會是00,01,02,03,04,05。
Exported Variable Name: 引用變量名稱,這里輸入count,在接口請求時,我們輸入${count}。
Track counter independently for each user: 與每用戶獨立的跟蹤計數(shù)器。我們把線程組設置線程數(shù)2,循環(huán)數(shù)2。若這里勾選用戶獨立計數(shù),就是線程1循環(huán)2次,請求發(fā)送時,fundType字段分別請求的是1和2。線程2循環(huán)2次,請求發(fā)送時,fundType字段分別請求的是1和2。若這里不勾選用戶獨立計數(shù),則4次請求,fundType字段分別請求的是1、2、3、4。
Reset counter on each thread Group Iteration: 在每個線程組迭代上重置計數(shù)器。若勾選則4次請求的fundType字段全都是1,這兩個都勾選的時候,一般都是線程組內(nèi)有循環(huán),每次循環(huán)的時候會遞增。否則這樣設置就沒有意義了。
四、請求默認值
線程組鼠標右鍵,”添加”->”配置元件”->”HTTP默認請求”
可以看到有很多種默認請求,中信銀行是一個web系統(tǒng),所以這里測試使用的是http或https請求,這里我就說一下http默認請求值的使用方法,其他默認請求的使用思路基本相同。不做贅述。
實際測試中,會有多個環(huán)境,比如測試環(huán)境,開發(fā)環(huán)境,生產(chǎn)環(huán)境A,生產(chǎn)環(huán)境B等等。為了實現(xiàn)環(huán)境的快速切換,我們不能每次切換環(huán)境,都去把所有的請求地址修改一遍。正確的做法是把所有請求的ip、端口、協(xié)議、編碼都清空,添加一個http默認請求值,在默認請求值里面輸入ip、端口、協(xié)議、編碼。當有多個環(huán)境時,可以配置多個http默認請求值。保留一個為啟用狀態(tài),其余全部禁用。
若多個請求中,有相同的參數(shù),比如截圖中“搜索有關的請求”線程組下的所有請求,都有兩個參數(shù)pageSize和currentPage,這樣的參數(shù)也可以在請求中直接刪除,添加到http默認請求值。
五、Beanshell采樣器或JSR223采樣器
線程組鼠標右鍵,”添加”->”取樣器”->”BeanShell取樣器”,在采樣器內(nèi)輸入vars.put("responseFormat","JSON");如下圖:
括號中第一個引號內(nèi)的字符串是變量名,第二個引號內(nèi)的字符串是變量值,在接口發(fā)送請求時,使用${responseFormat},就可以實現(xiàn)參數(shù)化。
JSR223采樣器功能類似,只是提供了更多的腳本語言可以選擇,如果選擇beanshell那么就等于是beanshell采樣器了,jmeter官方的使用說明中推薦使用groovy語言,理由是性能較好,但是我實際測試過,如果只是執(zhí)行賦值語句,只是把beanshell采樣器當做定義參數(shù)化來使用,beanshell采樣器性能還是略高于JSR223+groovy的。
六、后置處理器json和正則表達式
有時我們需要的參數(shù)是動態(tài)的,這時候就需要把第一個請求的響應結(jié)果提取出來,作為第二個請求的參數(shù)發(fā)送出去,后置處理器可以解決這個問題,常用的有正則表達式提取器,若接口返回的數(shù)據(jù)是json字符串,也可以用json提取器。以中信銀行基金為例,先搜索,然后查看第一個基金的詳情頁。
鼠標右鍵第一個請求,”添加”->”后置處理器”->”正則表達式提取器”。
引用名稱:就是變量名。例如輸入number
正則表達式:使用正則表達式在響應結(jié)果中提取數(shù)據(jù),例如截圖中想要提取的數(shù)據(jù)是"prodNo":"000043"中的000043,那么正則表達式可以寫成"prodNo":"(.*?)",這樣就會把004698賦值給number,后面的請求使用${number}就可以獲取到000043了。
模板:格式為,
...以此類推,意思是若正則表達式匹配到多個值,則返回第幾個值,
代表第一個。缺省值:若正則表達式?jīng)]有匹配到數(shù)據(jù),則返回缺省值中的數(shù)據(jù)。
第二種是json提取器,鼠標右鍵第一個請求,”添加”->”后置處理器”->”json提取器”。
Namesofcreatedvariables:是變量名,多個用分號隔開。
Jsonpathexpressions:json路徑。根據(jù)請求的響應結(jié)果,輸入json路徑,例如基金搜索接口,使用$.content.resultList[*].prodNo可以匹配到第一頁10條數(shù)據(jù)的基金代碼
MathNo.:若1個路徑提取了多個參數(shù),匹配第x個參數(shù)。上面匹配到了10條數(shù)據(jù),我們?nèi)〉谝粭l就輸入1。
Defaultvalues:缺省值。
七、函數(shù)
舉3個比較典型的例子,其他函數(shù)可在官網(wǎng)的使用說明中,自己查看學習。
第一個,線程內(nèi)傳參,以隨機數(shù)為例:
點擊菜單欄”工具”->”函數(shù)助手”,選擇”Random”,這是一個隨機函數(shù),輸入最小值1,最大值5,變量名R,點擊生成,“{__Random(1,5,R)},之后使用則可以輸入${R}。作用是隨機生成1到5之間的整數(shù)。
第二個,線程內(nèi)傳參,函數(shù)助手里,選擇setProperty(全局變量),變量名輸入number,值輸入0408,生成${__setProperty(number,0408,)},這樣可以在不同線程之間引用這個變量了,應用方式為${__P(number)},也可以把0408改成動態(tài)獲取,例如結(jié)合上面的json提取器提取到的number,想讓number跨線程傳參就可以寫成${__setProperty(n,${number},)},就是把0408這個靜態(tài)的值寫成動態(tài)的${number},把第一個變量名改成n,保證2個變量不重名,其他線程應用時,寫成${__P(n)}。
第三個,變量名嵌套變量名,V函數(shù)。
例如系統(tǒng)中有三個變量分別是number_1,number_2,number_3,設置一個計數(shù)器count,此時若想應用這3個變量,直接寫{count}},系統(tǒng)是無法識別的。要使用變量名嵌套函數(shù),V函數(shù)。正確寫法是${_V(number${count})}。
八、總結(jié)第1-4種是第一類配置元件,第5種是第二類采樣器,第6種是第三類前置處理器與后置處理器,第7種是第四類函數(shù)。Jmeter參數(shù)化4類中常用的7種方法,各有各的好處。
原文:http://download.51testing.com/wenzhang/51Testing_wenzhang59_1.pdf