Jmeter导入DB数据再再优化

发表于:2017-5-04 11:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:niuzhigang    来源:博客园

  前言:分享和规定命名规范后,各位测试人员一致认为这样jmeter的jmx文件限制太死,主要体现六方面:
  第一:规定了一个jmx文件只能录入一个接口,这样会导致jmx文件很多
  第二:导入DB的jmx文件每轮迭代都需要更换版本号,会带来额外的工作
  第三:jmx文件严格要求了接口执行循序,会导致大家写好的用例会重新输出
  第四:importDB的jmx文件与接口的jmx文件对应也会很多,不能一个importDB的jmx完成所有接口的工作
  第五:删除了定义产品类型和页面类型字段,增加了接口类型字段
  第六:测试反馈终端类型、版本号、接口类型不需要通过importDB 的jmx文件传入而是通过http请求名称按照一定规则去获取
  因此针对上面四项不足,做了一些优化。
  技术方面方面改变主要体现在:
  第一:把终端类型、版本号、接口类型、接口名称、用例数目、用例成功数目、通过率这些字段,之前只有部分(接口类型、接口名称)是list结构,现在均改为list结构。
  第二:java set操作的sql只有详细表,而统计表是通过sql操作的(通过select详细表计算出来统计表每个字段值insert和update的)
  第三:联合唯一索引增加了一个字段creatTime,因为测试反应按照之前联合索引只能保留本轮迭代的数据,有之前的按照迭代保留数据,目前是按照当天保留数据(因此有之前精确到秒改为精确到日)
  第四:SQL的各个字段获取规则进行了限制
  jmeter线程请求命名规则:
  由于代码做了字段获取的规则,循环到”终端、版本、类型、校验、接口”关键字时认为是本jmx文件需校验的接口和用例
  终端类型获取规则:
  由于代码做了终端类型获取的规则,截取”终端”和“版本”中间的字符作为终端类型
  版本号获取规则:
  由于代码做了版本号获取的规则,截取”终端”和“版本”中间的字符作为版本号
  接口类型获取规则:
  由于代码做了接口类型获取的规则,截取”终端”和“版本”中间的字符作为接口类型
  接口名称获取规则:
  由于代码做了接口名称获取的规则,截取”校验”和“接口”中间的字符作为接口名称
  用例名称获取规则:
  由于代码做了用例名称获取的规则,截取”接口”后面的字符作为接口名称
  具体SQL key值的取值方法如下:
//获取符合规则的终端类型
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("校验")==true
&&caseAllName.contains("接口")==true){
TerminalType = caseAllName.substring(caseAllName.indexOf("终端")+2,caseAllName.indexOf("版本"));
terminalTypeArray.add(TerminalType);
}
}
return terminalTypeArray;
}
//获取符合规则的版本号
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("校验")==true&&caseAllName.contains("接口")==true){
version = caseAllName.substring(caseAllName.indexOf("版本")+2,caseAllName.indexOf("类型"));
excVersionArray.add(version);
}
}
return excVersionArray;
}
//获取符合规则的用例类型
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("校验")==true&&caseAllName.contains("接口")==true){
interfaceNameType = caseAllName.substring(caseAllName.indexOf("类型")+2,caseAllName.indexOf("校验"));
interfaceTypeArray.add(interfaceNameType);
}
}
//                System.out.println("获取接口名称:"+interfaceName);
return interfaceTypeArray;
}
//获取符合规则的接口名称
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("校验")==true&&caseAllName.contains("接口")==true){
interfaceName = caseAllName.substring(caseAllName.indexOf("校验")+2,caseAllName.indexOf("接口"));
interfaceNameArray.add(interfaceName);
//                     System.out.println("获取接口名称:"+interfaceName);
}
}
//
return interfaceNameArray;
}
//获取符合规则的每条用例执行名称
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("校验")==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;
}
//获取符合规则的每条用例执行结果
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("校验")==true&&caseAllName.contains("接口")==true){
String result = util.getString(i, 7);
caseResultArray.add(result);
}
}
return caseResultArray;
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号