把用例執行情況mysql表匯總起來
proc_write_report 匯總執行用例表中的測試數據 寫入report 表,report表包括字段
report_id(自增)execution_flag,class_name,method_name, module,case_name,execution_amount, pass_amount,fail_amount,fail_reason,`time`,`comment`
DELIMITER $$ USE `test_cases`$$ DROP PROCEDURE IF EXISTS `proc_write_report`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_write_report`(IN p_table_name VARCHAR(80),IN p_class_name VARCHAR(80),IN p_method_name VARCHAR(80),IN p_execution_flag VARCHAR(80)) BEGIN DECLARE var_class_name VARCHAR(180) DEFAULT NULL; -- 測試類名 DECLARE var_method_name VARCHAR(180) DEFAULT NULL; -- 測試方法名 DECLARE var_module VARCHAR(180) DEFAULT NULL; -- 測試模塊 中文 DECLARE var_case_name VARCHAR(180) DEFAULT NULL; -- 測試用例名稱 中文 DECLARE var_pass_amount INT DEFAULT 0; -- 通過用例數量 DECLARE var_fail_amount INT DEFAULT 0; -- 失敗用例數量 DECLARE var_fail_reason VARCHAR(2000) DEFAULT NULL; -- 失敗原因 DECLARE var_comment VARCHAR(2000) DEFAULT NULL; -- 備注 DECLARE var_sql_string VARCHAR(2000) DEFAULT NULL; -- sql 語句 SET @var_cass_name = p_class_name; SET @var_method_name = p_method_name; -- 獲取成功用例數 SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 1 "); -- SELECT @var_sql_string; CALL p_get_select_row_number(@var_sql_string,@var_pass_amount); -- SELECT @var_pass_amount; -- 獲取失敗用例數 SET @var_sql_string = CONCAT("select * from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 "); -- SELECT @var_sql_string; CALL p_get_select_row_number(@var_sql_string,@var_fail_amount); -- SELECT @var_fail_reason; -- 獲取用例模塊中文名稱 SET @var_sql_string = CONCAT("SELECT DISTINCT test_module_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"' AND test_method = '",p_method_name,"'"); -- select @var_sql_string; CALL proc_get_table_column_content(@var_sql_string,@var_module); -- SELECT @var_module; -- 獲取用例方法中文名稱 SET @var_sql_string = CONCAT("SELECT DISTINCT test_case_name FROM ",p_table_name," WHERE execution_flag = '",p_execution_flag,"' AND test_method = '",p_method_name,"'"); -- select @var_sql_string; CALL proc_get_table_column_content(@var_sql_string,@var_case_name); -- SELECT @var_module; -- select * from `execution_send_express_sf`; SET @var_sql_string = CONCAT("select distinct actual_result from ",p_table_name," where test_method = '",p_method_name,"' and execution_flag = '",p_execution_flag,"' and test_class = '",p_class_name,"' and is_select = 1 and is_pass = 0 and is_execution = 1"); -- SELECT @var_sql_string; CALL proc_get_table_column_content(@var_sql_string,@var_fail_reason); -- SELECT @var_fail_reason ; IF (SELECT COUNT(*) FROM report WHERE execution_flag = p_execution_flag AND class_name = p_class_name AND method_name = p_method_name ) THEN UPDATE report SET class_name = p_class_name, method_name = p_method_name, module = @var_module, case_name = @var_case_name, execution_amount = (@var_pass_amount + @var_fail_amount), pass_amount = @var_pass_amount , fail_amount = @var_fail_amount, fail_reason = @var_fail_reason, `COMMENT` = @var_comment, `TIME` = NOW() WHERE execution_flag = p_execution_flag AND class_name = p_class_name AND method_name = p_method_name ; ELSE INSERT INTO report(execution_flag,class_name,method_name, module,case_name,execution_amount, pass_amount,fail_amount,fail_reason,`time`,`comment`) VALUES (p_execution_flag,p_class_name,p_method_name, @var_module,@var_case_name,(@var_fail_amount + @var_pass_amount), @var_pass_amount,@var_fail_amount,@var_fail_reason,NOW(),@var_comment ); END IF; END$$ DELIMITER ;
獲取查詢語句影響的行數,輸入查詢,輸出行數
DELIMITER $$ USE `test_cases`$$ DROP PROCEDURE IF EXISTS `proc_get_select_row_number`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p_get_select_row_number`(IN p_select_sql VARCHAR(500), OUT p_count INT(8) ) BEGIN -- 聲明 DECLARE cnt INT DEFAULT 0; DECLARE stmt VARCHAR(200); -- 賦值 SET @stmt = CONCAT(p_select_sql); -- prepare PREPARE s1 FROM @stmt; -- 執行 EXECUTE s1; -- 獲取查詢影響的行數 SET @cnt = FOUND_ROWS(); -- 輸出影響函數 SELECT @cnt INTO p_count ; END$$ DELIMITER ;
proc_get_table_column_content存儲過程,
把某個字段里面查找出來的多個值,循環取出,賦值追加拼接到另外一個變量里面去,輸入的查詢語句最多只有一個字段
DELIMITER $$ USE `test_cases`$$ DROP PROCEDURE IF EXISTS `proc_get_table_column_content`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_get_table_column_content`(IN select_sql_string VARCHAR(1000), OUT return_string VARCHAR(5000)) BEGIN DECLARE no_more_contents INT DEFAULT 0; DECLARE var_id INT; -- 保存單個內容 DECLARE var_content VARCHAR(200) DEFAULT NULL; -- 保存所有類容 DECLARE var_all_content VARCHAR(5000) DEFAULT NULL; -- 保存查詢語句 DECLARE var_sql VARCHAR(1000) DEFAULT NULL; -- 定義游標 DECLARE dept_csr CURSOR FOR SELECT * FROM tmp_table; -- 錯誤處理 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_contents=1; -- 使用臨時表 -- 刪除臨時表 DROP TEMPORARY TABLE IF EXISTS tmp_table; -- 組裝創建臨時表語句 SET var_sql = CONCAT('CREATE TEMPORARY TABLE tmp_table ',select_sql_string); SET @var_sql=var_sql; -- select var_sql; -- 預處理要執行的動態SQL PREPARE stmt FROM @var_sql; -- 執行SQL語句 EXECUTE stmt; -- 釋放掉預處理段 DEALLOCATE PREPARE stmt; SET no_more_contents=0; -- 打開游標 OPEN dept_csr; contentloop: LOOP FETCH dept_csr INTO var_content; -- 如果沒有值,退出循環 IF no_more_contents = 1 THEN LEAVE contentloop; END IF; -- select var_content; -- 循環取值,並且把不同的值追加賦給同一個變量 -- SELECT var_content; -- SELECT var_all_content AS A; IF var_all_content IS NULL THEN SET var_all_content = var_content; ELSEIF (var_content IS NOT NULL) && (LENGTH(var_content)!=0) THEN SET var_all_content = CONCAT(var_all_content,'、',var_content); END IF; -- SELECT var_all_content AS B; -- select var_all_content; -- 循環結束 退出循環 IF no_more_contents = 1 THEN LEAVE contentloop; END IF; -- SELECT var_all_content AS A; END LOOP contentloop; -- 關閉游標 CLOSE dept_csr; SET no_more_contents=0; SELECT var_all_content INTO return_string; DROP TEMPORARY TABLE tmp_table; END$$ DELIMITER ;
