記錄一下使用Jmeter在一次線程里需要多次調用同一個參數時的拼接方法
在對創建、編輯等接口使用Jmeter進行性能、穩定性測試時,需要造多個名稱相同,編號不同的參數。
例如:productName參數,對應字段分別為testCreate001、testCreate002、testCreate003……
原先是使用用戶參數+計數器組件,加上Jmeter自帶的__V{}函數,像這樣:
這種方法在我沒有將productName的字段testCreate參數化的時候很好用 ,無論怎么調用,在運行一次線程productName對應的字段總是testCreate001、testCreate002這樣。但后來為了測試更方便一些,我把productName做了參數化,放在了CSV文件里。此時我把用戶參數里productName對應的字段修改成了${__V(${productName}${n})},使用時發現了一個問題:
如果一個線程里使用了多次productName參數,每次調用的名稱都不一樣,第一次的時候是testCreate001001,第二次就變成了testCreate001001001001,因為調用的次數多,甚至看到了testCreate001001001001001001001001001001001001001001
思考了一下,應該是每次使用參數的時候,__V函數都在起作用。我需要讓這個參數在多次調用和循環的線程中顯示正常,嘗試用僅一次控制器,結果這個組件似乎對用戶參數不起作用,輸出的參數直接變成了testCreate,都沒有拼接。
最后的解決辦法:
既然__V函數這么不智能,只能自己來了。直接使用Beanshell代碼進行拼接。在線程的最前面放一個Beanshell Sampler,然后寫拼接代碼:
String productName = vars.get("productName"); String n = vars.get("n"); String productName = productName + n; vars.put("productName",productName);
最后輸出的參數都一致了,而且會跟着計數器的循環自增。