您的位置:软件测试 > 开源软件测试 > 开源性能测试工具 > Jmeter
Jmeter读取执行Case插入DB生成报表和备份记录
作者:niuzhigang 发布时间:[ 2017/4/24 11:35:55 ] 推荐标签:性能测试工具 Jmeter

  前言:由于通过jmeter写的接口自动化木有数据导入和统计分析功能,因此做了二次开发,目的是读取每条case获取接口名称和用例名称,通过获取的case执行结果进行计算,得到详细接口的用例通过率存入DB,并解析出每条case的执行结果存入DB。
  流程图如下:

  由于包含case的详细数据和接口的统计数据,因此目前暂定2张表。
  具体表结构如下:
  接口统计表:

  用例执行结果详细表:

  首先是如何让jmeter生成一定格式的csv文件。那么问题一:如何把执行结果生成CSV文件?问题二如何生成一定格式的CSV文件?
  解决方案问题一:
  在"察看结果树"监听器加入存储路径(在文件名写入 路径+文件名):如:

  执行jmx文件后会生成一个excResult.csv文件。如:

  解决方案步骤二:
  满足一定格式是满足如下格式:

  那么如何满足此格式呢?
  在jmeter的"察看结果树"监听器Configure配置下取消掉"Save As XML"

  好了,到此初步的要求已经达到。
  剩下的是开发脚本,如何读取csv文件并插入DB
  代码部分不上传了,有兴趣的同学可以私聊
  上传下如何插入DB吧、数据统计吧
  数据统计代码如下:
public static int getSucNum(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
int caseNum = rowNum -1;
int sucNum = 0;
List list = new ArrayList();
for(int i=1;i<rowNum;i++){
String caseName = util.getString(i, 2);
String result = util.getString(i, 7);
list.add(caseName);
list.add(result);
if(result.equals("true")==true){
sucNum +=1;
}
}
return sucNum ;
}
//计算百分比
public static  String percent(int sucCaseNum, int allCseNum){
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String result = numberFormat.format((float) sucCaseNum / (float) allCseNum * 100);
return result;
}
public static String  getPryKey(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
String secTitle = util.getString(1, 2);
//            System.out.println("获取检查的接口名称:"+secTitle);
String subTitle = secTitle.substring(2, secTitle.length());
//            System.out.println("获取接口名称:"+subTitle);
return subTitle;
}
//获取插入DB的接口执行结果(通过率)
public static String  getExcRate(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
int caseNum = rowNum -1;
int sucNum = 0;
for(int i=1;i<rowNum;i++){
String caseResult = util.getString(i, 7);
//                System.out.println("用例执行结果为:" + caseResult);
if(caseResult.equals("true")==true){
sucNum +=1;
}
}
String caseRate = CsvUtil.percent(sucNum, caseNum)+"%";
//            System.out.println("用例通过率为:"+caseRate);
return caseRate;
}
//获取插入DB的secordaryTitle&excResult(用例名称)&(true or false)
public static void  getSecKey(String path) throws Exception{
CsvUtil util = new CsvUtil(path);
int rowNum = util.getRowNum();
String caseName = null;
for(int i=1;i<rowNum;i++){
caseName = util.getString(i, 2);
//                System.out.println("用例名称为:"+caseName);
String caseResult = util.getString(i, 7);
//                System.out.println("用例执行结果为:" + caseResult);
}
}
  插入DB的代码:
//插入统计数据
public static boolean insertTotalDB(String primaryTitle,String excVersion,String excTerminal,String excRate,int caseTotalNum,int caseSucNum){
try {
Class.forName("com.mysql.jdbc.Driver");
String databaseName = "test";// 已经在MySQL数据库中创建好的数据库。
String userName = "mobtest";// MySQL默认的root账户名
String password = "tuniu520";// 默认的root账户密码为空
String connUrl = "jdbc:mysql://10.10.30.200:3306/";//连接地址
Connection conn = DriverManager.getConnection(connUrl + databaseName, userName, password);
PreparedStatement st = null;
Statement stmt = conn.createStatement();
String sql = "create table if NOT EXISTS AutoTest_TotalInterface(id int NOT NULL auto_increment primary key ,permaryTitle varchar(255) ,excVersion varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App' ,excRate varchar(255) ,caseTotalNum int,caseSucNum int,creatTime timestamp NULL DEFAULT CURRENT_TIMESTAMP )";
// 创建数据库中的表,
int result = stmt.executeUpdate(sql);
if (result != -1) {
sql = "insert into AutoTest_TotalInterface(permaryTitle,excVersion,excTerminal,excRate,caseTotalNum,caseSucNum) values(?,?,?,?,?,?)";
st = conn.prepareStatement(sql);
st.setString(1, primaryTitle);
st.setString(2, excVersion);
st.setString(3, excTerminal);
st.setString(4, excRate);
st.setInt(5, caseTotalNum);
st.setInt(6, caseSucNum);
st.executeUpdate();
sql = "SELECT * FROM AutoTest_TotalInterface";
System.out.println(stmt.executeQuery(sql));
ResultSet rs = stmt.executeQuery(sql);
System.out.println("id primaryTitle sexcVersion excTerminal excRate caseTotalNum caseSucNum creatTime");
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4) + " " + rs.getString(5) + " " + rs.getString(6) + " " + rs.getString(7)+ " " + rs.getString(8));
}
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd