1. 程式人生 > >jmeter接口測試-調用java的jar包-csv參數化請求-BeanShellPreProcessor生成驗簽作為請求驗證參數-中文亂碼----實戰

jmeter接口測試-調用java的jar包-csv參數化請求-BeanShellPreProcessor生成驗簽作為請求驗證參數-中文亂碼----實戰

nsh 放置 輸入 sys container 3-0 orm ans 結束

背景及思路:
需求:要做 創建新卡 接口的測試,要求:
1. 不需要每次手動修改請求參數。
方案:文中先用excle將數據準備好,導出為csv格式,再用jmeter的csv請求進行參數化
2. 卡號需要唯一;
方案:文中用jmeter的beanshell按時間戳加隨機數生成
3. 請求參數中有一個參數,會根據相應的請求參數生成(文中的sign值),接口請求會驗證sign是否和相應請求參數對應;
方案:
1. 文中將生成sign的源碼打包放在jmeter的lib\ext\ 下,
2. 再用jmeter的beanshell引用jar包,
3. 用同樣的規則生成sign保證其一致性。

-----下面正式開始實戰------:

  1. 將生成驗簽的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相應目錄準備工作做好了.-----

  1. 參數化 excle 準備數據
    2.1 excle 列出個參數及值


    技術分享圖片 6.png

2.2 另存為csv格式


技術分享圖片 7.png

2.3 用文本編輯器(如:editplus)打開文本,第一行為參數名,下面為參數,剪切第一行數據為jmeter csv參數行,實際數據去掉第一行數據


技術分享圖片 8.png

-------------至此----測試參數準備好了.----------------

  1. 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文件:

  1. 把“jsyntaxtextarea.font.family=Hack”這行的“#”註釋去掉 或者添加一行 用中文字體都行


    技術分享圖片 25.png
  2. sampleresult.default.encoding="utf-8"


    技術分享圖片 26.png
  3. 參數化的話 文件另存為utf-8 的話 ,編碼需要 utf-8,系統默認的話就不用


    技術分享圖片 27.png
    技術分享圖片 28.png
  4. http請求的 content encoding:utf-8


    技術分享圖片 29.png
  5. 生成加密的java源碼的方法中指定請求編碼類型: s.getBytes("utf-8")


    技術分享圖片 30.png


作者:Alisa168
鏈接:https://www.jianshu.com/p/86569ae63d96
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

jmeter接口測試-調用java的jar包-csv參數化請求-BeanShellPreProcessor生成驗簽作為請求驗證參數-中文亂碼----實戰