• <td id="eeegg"><noscript id="eeegg"></noscript></td>
  • <table id="eeegg"><noscript id="eeegg"></noscript></table>
  • <option id="eeegg"><noscript id="eeegg"></noscript></option>
  • <bdo id="eeegg"><noscript id="eeegg"></noscript></bdo>
  • 您的位置:軟件測試 > 開源軟件測試 > 開源性能測試工具 > 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
    偷窥_盗摄
  • <td id="eeegg"><noscript id="eeegg"></noscript></td>
  • <table id="eeegg"><noscript id="eeegg"></noscript></table>
  • <option id="eeegg"><noscript id="eeegg"></noscript></option>
  • <bdo id="eeegg"><noscript id="eeegg"></noscript></bdo>