jmeter接口測試-調用java的jar包-csv參數化請求-BeanShellPreProcessor生成驗簽作為請求驗證參數-中文亂碼----實戰
背景及思路:
需求:要做 創建新卡 接口的測試,要求:
1. 不需要每次手動修改請求參數。
方案:文中先用excle將數據準備好,導出為csv格式,再用jmeter的csv請求進行參數化
2. 卡號需要唯一;
方案:文中用jmeter的beanshell按時間戳加隨機數生成
3. 請求參數中有一個參數,會根據相應的請求參數生成(文中的sign值),接口請求會驗證sign是否和相應請求參數對應;
方案:
1. 文中將生成sign的源碼打包放在jmeter的lib\ext\ 下,
2. 再用jmeter的beanshell引用jar包,
3. 用同樣的規則生成sign保證其一致性。
-----下面正式開始實戰------:
-
將生成驗簽的java源碼生成jar包,並將jar包放置在 \lib\ext目錄下
1.1 將生成sign規則的java類 打jar包 包路徑:com.util.lt
1.png
1.2 選擇JAR file
2.png
1.3 放置在jmeter的 lib\ext\下面 取名為 AppLoginUtils
3.png
1.4 如果對路徑不熟悉的話,可以將剛剛生成的jar包放在D盤, 解壓,查看目錄路徑
4.png
進 META-INF
5.png
-----至此---java生成jar包並放在jmeter相應目錄準備工作做好了.-----
-
參數化 excle 準備數據
2.1 excle 列出個參數及值
6.png
2.2 另存為csv格式
7.png
2.3 用文本編輯器(如:editplus)打開文本,第一行為參數名,下面為參數,剪切第一行數據為jmeter csv參數行,實際數據去掉第一行數據
8.png
-------------至此----測試參數準備好了.----------------
-
jmeter 開始進行測試 添加線程組
9.png
3.1 jmeter設置csv參數 variableNames行數據為上面剪切的第一行數據
10.png
11.png
3.2 BeanShell PreProcessor 添加腳本生成需要的信息字段(生成cardNo為時間戳唯一數 為後續生成sign做準備)
12.png
13.png
腳本如下:
<pre>
import java.sql.Date; import java.text.SimpleDateFormat; Long timeStamp = System.currentTimeMillis(); //獲取當前時間戳 SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss"); //定義時間格式 String timeNow = sdf.format(new Date(timeStamp)); // 時間戳轉換成定義好的時間格式 //(數據類型)(最小值+Math.random()(最大值-最小值+1)) //從1到9999的int型隨機數 String cardNo = timeNow + (int)(1+Math.random()(9999-1+1)); //vars.get("name"); 從jmeter中獲得變量值 //vars.put("key","value"); 數據存到jmeter變量中 vars.put("cardNo",cardNo); //將生成的當前時間加隨機數生成的唯一字符串保存到jemter變量cardNo中 log.info("------------日誌開始----------------"); log.info("cardNo is:"+cardNo); log.info("------------日誌結束----------------");View Code
</pre>
3.3 BeanShell PreProcessor 調用jar包的方法 生成sign值
同上添加 BeanShell PreProcessor 步驟,
12.png
111.png
腳本如下:
<pre>
1 import java.util.*; 2 import com.util.lt.AppLoginUtils; 3 4 public static getSign(String cardNo){ 5 Map paras = new HashMap(); 6 //取出剛剛csv參數化的數據,放到map中 7 paras.put("sex",vars.get("sex")); 8 paras.put("xxx", vars.get("xxx")); 9 paras.put("xxxx", vars.get("xxxx")); 10 paras.put("xxxxx", vars.get("xxxxx")); 11 paras.put("type",vars.get("type")); 12 paras.put("operator", vars.get("operator")); 13 paras.put("cardNo",cardNo); //傳參 14 paras.put("codeName", vars.get("codeName")); 15 paras.put("operatorName", vars.get("operatorName")); 16 paras.put("xxxxxx", vars.get("xxxxxx")); 17 18 //調用 上面java打包的 生成驗簽碼的方法 19 String sign = AppLoginUtils.getParametersToString(paras,"xxxxxxxxxxxxxxxxxxxxxxx"); 20 vars.put("sign",sign); //將生成的sign存到jmeter變量sign中,供後續請求用 21 return sign; 22 } 23 24 //vars.get("name"); 從jmeter中獲得變量值 25 //vars.put("key","value"); 數據存到jmeter變量中 26 27 log.info("------------日誌開始----------------"); 28 //下面供調試使用 使用上面 beanshell生成的 cardNo作為請求參數 以此保證使用的是一套數據 29 log.info("sign is:"+ getSign("${cardNo}")); 30 log.info("------------日誌結束----------------");View Code
</pre>
3.4 http請求 輸入相應的地址 端口號 路徑 編碼格式
14.png
3.4.1 parameters請求信息形式:
15.png
3.4.2 或者用 bodydata請求信息形式(與上面的請求形式二選一 其中一個可以右鍵--禁用):
16.png
3.5 添加 debug sample 進行測試調試用 (可不用添加)
17.png
3.6 添加監控器 查看結果樹 聚合報告:
18.png
3.6.1監測的請求:
19.png
20.png
3.6.2 監測的返回:
21.png
3.6.3 監測的 debug Sample:
22.png
23.png
-------至此----一個完整的調用和監控結束了.-------
接下來是 在做的過程中的一些註意點:
一. 怎麽調試:
1.可以用beanShellSample 進行請求,debugSample 在查看結果樹中 進行調試 。
2.也可以打印日誌 log.info() 進行調試,需要先打開查看日誌的選項:
24.png
二. 編碼問題:
jmeter亂碼 修改jmeter\bin\jmeter.properties文件:
-
把“jsyntaxtextarea.font.family=Hack”這行的“#”註釋去掉 或者添加一行 用中文字體都行
25.png -
sampleresult.default.encoding="utf-8"
26.png -
參數化的話 文件另存為utf-8 的話 ,編碼需要 utf-8,系統默認的話就不用
27.png
28.png -
http請求的 content encoding:utf-8
29.png -
生成加密的java源碼的方法中指定請求編碼類型: s.getBytes("utf-8")
30.png
作者:Alisa168
鏈接:https://www.jianshu.com/p/86569ae63d96
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
jmeter接口測試-調用java的jar包-csv參數化請求-BeanShellPreProcessor生成驗簽作為請求驗證參數-中文亂碼----實戰