您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源性能測(cè)試工具 > Jmeter
Jmeter導(dǎo)入DB數(shù)據(jù)再再優(yōu)化
作者:niuzhigang 發(fā)布時(shí)間:[ 2017/5/4 14:49:13 ] 推薦標(biāo)簽:性能測(cè)試工具 Jmeter

  前言:分享和規(guī)定命名規(guī)范后,各位測(cè)試人員一致認(rèn)為這樣jmeter的jmx文件限制太死,主要體現(xiàn)六方面:
  第一:規(guī)定了一個(gè)jmx文件只能錄入一個(gè)接口,這樣會(huì)導(dǎo)致jmx文件很多
  第二:導(dǎo)入DB的jmx文件每輪迭代都需要更換版本號(hào),會(huì)帶來(lái)額外的工作
  第三:jmx文件嚴(yán)格要求了接口執(zhí)行循序,會(huì)導(dǎo)致大家寫好的用例會(huì)重新輸出
  第四:importDB的jmx文件與接口的jmx文件對(duì)應(yīng)也會(huì)很多,不能一個(gè)importDB的jmx完成所有接口的工作
  第五:刪除了定義產(chǎn)品類型和頁(yè)面類型字段,增加了接口類型字段
  第六:測(cè)試反饋終端類型、版本號(hào)、接口類型不需要通過(guò)importDB 的jmx文件傳入而是通過(guò)http請(qǐng)求名稱按照一定規(guī)則去獲取
  因此針對(duì)上面四項(xiàng)不足,做了一些優(yōu)化。
  技術(shù)方面方面改變主要體現(xiàn)在:
  第一:把終端類型、版本號(hào)、接口類型、接口名稱、用例數(shù)目、用例成功數(shù)目、通過(guò)率這些字段,之前只有部分(接口類型、接口名稱)是list結(jié)構(gòu),現(xiàn)在均改為list結(jié)構(gòu)。
  第二:java set操作的sql只有詳細(xì)表,而統(tǒng)計(jì)表是通過(guò)sql操作的(通過(guò)select詳細(xì)表計(jì)算出來(lái)統(tǒng)計(jì)表每個(gè)字段值insert和update的)
  第三:聯(lián)合索引增加了一個(gè)字段creatTime,因?yàn)闇y(cè)試反應(yīng)按照之前聯(lián)合索引只能保留本輪迭代的數(shù)據(jù),有之前的按照迭代保留數(shù)據(jù),目前是按照當(dāng)天保留數(shù)據(jù)(因此有之前精確到秒改為精確到日)
  第四:SQL的各個(gè)字段獲取規(guī)則進(jìn)行了限制
  jmeter線程請(qǐng)求命名規(guī)則:
  由于代碼做了字段獲取的規(guī)則,循環(huán)到”終端、版本、類型、校驗(yàn)、接口”關(guān)鍵字時(shí)認(rèn)為是本jmx文件需校驗(yàn)的接口和用例

  終端類型獲取規(guī)則:
  由于代碼做了終端類型獲取的規(guī)則,截取”終端”和“版本”中間的字符作為終端類型

  版本號(hào)獲取規(guī)則:
  由于代碼做了版本號(hào)獲取的規(guī)則,截取”終端”和“版本”中間的字符作為版本號(hào)

  接口類型獲取規(guī)則:
  由于代碼做了接口類型獲取的規(guī)則,截取”終端”和“版本”中間的字符作為接口類型

  接口名稱獲取規(guī)則:
  由于代碼做了接口名稱獲取的規(guī)則,截取”校驗(yàn)”和“接口”中間的字符作為接口名稱

  用例名稱獲取規(guī)則:
  由于代碼做了用例名稱獲取的規(guī)則,截取”接口”后面的字符作為接口名稱

  具體SQL key值的取值方法如下:
//獲取符合規(guī)則的終端類型
public static ArrayList<String>  getTerminalType(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseAllName = null;
String TerminalType = null;
ArrayList<String> terminalTypeArray = new ArrayList<String>();
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true
&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true
&&caseAllName.contains("接口")==true){
TerminalType = caseAllName.substring(caseAllName.indexOf("終端")+2,caseAllName.indexOf("版本"));
terminalTypeArray.add(TerminalType);
}
}
return terminalTypeArray;
}
//獲取符合規(guī)則的版本號(hào)
public static ArrayList<String>  getVersion(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseAllName = null;
String version = null;
ArrayList<String> excVersionArray = new ArrayList<String>();
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true&&caseAllName.contains("接口")==true){
version = caseAllName.substring(caseAllName.indexOf("版本")+2,caseAllName.indexOf("類型"));
excVersionArray.add(version);
}
}
return excVersionArray;
}
//獲取符合規(guī)則的用例類型
public static ArrayList<String>  getInterfaceType(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseAllName = null;
String interfaceNameType = null;
ArrayList<String> interfaceTypeArray = new ArrayList<String>();
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true&&caseAllName.contains("接口")==true){
interfaceNameType = caseAllName.substring(caseAllName.indexOf("類型")+2,caseAllName.indexOf("校驗(yàn)"));
interfaceTypeArray.add(interfaceNameType);
}
}
//                System.out.println("獲取接口名稱:"+interfaceName);
return interfaceTypeArray;
}
//獲取符合規(guī)則的接口名稱
public static ArrayList<String>  getInterfaceName(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseAllName = null;
String interfaceName = null;
ArrayList<String> interfaceNameArray = new ArrayList<String>();
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true&&caseAllName.contains("接口")==true){
interfaceName = caseAllName.substring(caseAllName.indexOf("校驗(yàn)")+2,caseAllName.indexOf("接口"));
interfaceNameArray.add(interfaceName);
//                     System.out.println("獲取接口名稱:"+interfaceName);
}
}
//
return interfaceNameArray;
}
//獲取符合規(guī)則的每條用例執(zhí)行名稱
public static ArrayList<String> getCaseName(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseAllName = null;
String caseName = null;
ArrayList<String> caseNameArray = new ArrayList<String>();
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true&&caseAllName.contains("接口")==true){
caseName = caseAllName.substring(caseAllName.indexOf("接口")+2,caseAllName.length());
//                 System.out.println("用例名稱為:"+caseName);
caseNameArray.add(caseName);
//                 System.out.println(caseNameArray);
}
}
return caseNameArray;
}
//獲取符合規(guī)則的每條用例執(zhí)行結(jié)果
public static ArrayList<String> getcaseIsPass(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
ArrayList<String> caseResultArray = new ArrayList<String>();
//         System.out.println(CaseNum);
String caseAllName = null;
for(int i=1;i<rowNum;i++){
caseAllName = util.getString(i, 2);
if(caseAllName.contains("終端")&&caseAllName.contains("版本")==true&&caseAllName.contains("類型")&&caseAllName.contains("校驗(yàn)")==true&&caseAllName.contains("接口")==true){
String result = util.getString(i, 7);
caseResultArray.add(result);
}
}
return caseResultArray;
}

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd