一、前言
最近工作和生活說忙也忙,說不忙也不忙,但就是已經感覺很長時間沒有get新的技術技能了,就是一丟丟的那種也沒有,哈哈哈,今天就來講一下最近get到的小技能吧。
工作中,由於某個需求需要幾百條數據去驗證某個接口,肯定不能手動加啦,基於測試周期緊張,直接考慮用jmeter的循環控制器輔助實現。
二、接口背景介紹
業務說明:點擊創建按鈕,彈出創建界面,輸入必填項後,點擊確定,返回創建數據成功。
1、創建接口
就是需要用該接口創建數據,對於接口的說明如下:
1)接口請求方法:PUT
2)必傳的入參需要變量的字段有:userCode,userId,userName,remarkid
3)其餘字段根據實際業務,可以傳固定值
思路tip:首先要確認變量字段,其次確認變量字段來源,最後確認如何能獲取到變量。當前的實例中,除了remarkid,其餘3個變量字段是從另外一個查詢接口讀取的,詳細見第2點。
2、查詢用戶接口
在創建界面,輸入用戶名稱時會調用【查詢用戶】接口,該接口返回的數據就是【創建】接口中所需要的入參字段,返回的json格式如下:
三、Loop Controller介紹
很早之前就已經在工作上用到過這個組件,今天突然發現我居然沒有針對這個組件寫詳細的博客,太尷尬了,那現在就簡單瞭解下這個組件的用法吧。
Loop Count:循環次數,分爲永遠、自定義次數——勾選Forever後,自定義次數置灰不允許輸入,未勾選,則可以
按字面意思,其實它就是循環該控制器下的請求,一般跟計數器配合使用,具體根據實際場景來。
如果非常熟悉Jmeter工具的,想必也知道線程組也可以設置循環次數,這兩者其實可以理解爲父子關係,比如循環控制器設置循環2次,線程組設置循環4次,則執行的結果如下: 線程一共循環運行了4輪,每輪會循環請求接口2次
四、方法1— Loop Controller循環調用接口
1、腳本結構如下
2、使用強大的JSON提取器,提取返回的字段
3、用戶查詢接口返回結果如下
在察看結果樹的Debug中可以看到提取的userCode,userId,userName,其中userCode_matchNr表示匹配到的總數
4、創建接口入參使用變量值
查詢接口是提取了返回字段的所有值,要引用變量的寫法就相當於 ${userCode_1},那總不能在入參裏寫死_1吧,因爲要循環創建的,得想辦法讓userCode_x,後面的_x是可以每次自增的,所以要結合counter計數器函數。
而__V就是要把它們嵌套起來,__V屬於嵌套函數,有興趣可以網上百度,如果不懂的話直接複製那串改一下變量就行。
remarkid在業務上是不允許重複的,所以這裏使用Random函數,即隨機數函數,讓它隨機生成一串數字即可。
"userCode":"${__V(userCode_${__counter(\,)},)}","userName":"${__V(username_${__counter(\,)},)}","userId":"${__V(userId_${__counter(\,)},)}","remarkid":"${__Random(1000,9000,)}"
5、循環控制器循環次數使用變量值
循環控制器中的自定義次數考慮到靈活性,使用查詢接口匹配到的總數(變量_matchNr),一共提取3個字段,所以用其中任意字段都行,引用格式: ${username_matchNr}
6、執行
完成以上步驟,就可以執行創建數據啦,執行結果我就不貼了。
五、方法2—Loop Controller循環調用JDBC
跟方法1的步驟是一樣的,只是方法2是通過調用jdbc request,即sql循環插入數據,這裏就不貼圖啦,具體看腳本結構,然後在jdbc裏寫條insert語句,將相應字段替換成引用變量即可。
注:執行insert,Query Type需要選擇【Prepared Update Statement】
六、方法3—BeanShell寫入excel,手動生成sql語句
1、BeanShell PostProcessor
這種其實也是通過sql插入,只不過是手動插入,在用戶查詢請求下添加BeanShell PostProcessor,腳本如下:
//指定需要寫入到哪個文件 FileWriter fs=new FileWriter("C:/Users/13710/Desktop/9000.csv",true); //創建一個字符緩存輸出流 BufferedWriter out = new BufferedWriter(fs); //另一種獲取變量值的寫法 //int b = Integer.valueOf("${username_matchNr}"); //System.out.println("接口返回的總數爲:"+b); for(int i=1;i<= ${username_matchNr};i++){ username= vars.get("username_"+i); userId = vars.get("userId_"+i); userCode = vars.get("userCode_"+i); out.write(username+","+userCode+","+userId); out.write(System.getProperty("line.separator")); System.out.println("輸出的值是:"+username); } out.close(); fs.close();
2、執行後自動生成.csv文件
可以看到excel裏有3列,因爲beanshell腳本拿到3個變量字段寫到了excel裏了
3、運用強大的excel功能生成sql語句
D4列是自己先寫一條sql哈,寫好後往下拖動就會自動生成其他的,其中需要變的均引用表格變量,格式:"&A1&"
溫馨tip:如果公式中的字符串過長,要用CONCATENATE函數
例子1(這個沒超的): =CONCATENATE("INSERT INTO contact(name, post,id)VALUES ("&A1&", '"&B1&","&C1&"');")
例子2(分成了4個字符串,因爲公式中每一個字符串都不能超過255字符):
4、將D4列直接複製到數據庫裏執行即可