• mysql 存储过程 计算报表


    把用例执行情况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 ;
  • 相关阅读:
    ACS 20070108 更新
    道德沦丧 还是意识淡薄
    Alienwave.CommunityServer 20070103 更新
    无题
    《白马啸西风》之李文秀
    突然感觉自己像拉皮条的
    数据库日志文件(x.ldf)如何打开?
    调试.NET出错
    老大离开南京了
    最近太任性了
  • 原文地址:https://www.cnblogs.com/testway/p/5376358.html
Copyright © 2020-2023  润新知