5 加载 excel 用例

1 用例结构

  • flow:表示各个功能点用例组成的流程

  • 其他 sheet 页:表示各个功能点用例

  • 其他 sheet 页每一行:表示此功能点用例步骤

 

 

2 加载用例核心

  • 三重 for 循环进行加载
  • 第一层 for 循环 flow sheet 中所有需要执行的流程
  • 第二层 for 循环所有用例的 sheet 页
  • 第三层 for 循环所有用例 sheet 页的 step
  • 最后将结果写回 flow sheet 页的执行结果列
from testcases.docase import do_case
from utils.excelparse import ExcelParser
from utils.logger import logger

def load_case(browser, book_name, sheet_name):

    # 报告数据收集
    all_num = 0
    pass_num = 0
    fail_num = 0
    table_list = []

    book = ExcelParser(book_name)
    book.get_sheet(sheet_name)
    # 最大行和列
    rows = book.get_max_row()
    # 第一行为列名
    # 从第二行开始循环检测需要执行的 flow
    # flows
    for i in range(2, rows + 1):
        do_or_not = book.get_cell_value(i, 4)
        flow_result = 'NT'

        # 判断是否执行
        if "Y" == do_or_not:
            # 报告数据收集
            all_num += 1
            # flow 名
            flow_name = book.get_cell_value(i, 2)
            # 包含用例
            case_list = book.get_cell_value(i, 3).split(",")
            # case/sheet 逐个执行
            for case in case_list:
                print("用例名:" + case)
                # 操作 case 对应的 sheet
                book.get_sheet(case)
                case_rows = book.get_max_row()
                # case step 逐行执行
                for j in range(2, case_rows + 1):
                    # 控件名
                    ele_name = book.get_cell_value(j, 2)
                    # 控件类型
                    element = book.get_cell_value(j, 3)
                    # xpath
                    xpath = book.get_cell_value(j, 4)
                    # 操作类型
                    option = book.get_cell_value(j, 5)
                    # 操作值
                    value = book.get_cell_value(j, 6)
                    # 控件执行结果为 FAIL,结束 case 的执行
                    flow_result = do_case(browser, case, ele_name, element, xpath, value)
                    print('步骤名:' + ele_name + "  " + flow_result)
                    logger.append().error(case + "  " + ele_name + "  " + flow_result)
                    if "FAIL" == flow_result:
                        # 出错后,不执行此用例
                        logger.append().error(case + "  " + ele_name + "  " + flow_result)
                        break
                    elif "NT" == flow_result:
                        print('步骤名:' + ele_name + "  " + ele_name + "没有进行任何操作!")
                        logger.append().error(case + "  " + ele_name + "没有进行任何操作!")
                if "FAIL" == flow_result:
                    # 出错后,不执行此 flow
                    break
            # 写入测试结果
            book.get_sheet(sheet_name)
            print("=============================")
            book.set_cell_value(i, 5, flow_result)
            # 报告数据收集
            if "FAIL" == flow_result:
                fail_num += 1
            else:
                pass_num += 1
            tmp_id = book.get_cell_value(i, 1)
            tmp_flow_name = book.get_cell_value(i, 2)
            tmp_cases = book.get_cell_value(i, 3)
            tmp_flow_result = book.get_cell_value(i, 5)
            table_list.append((tmp_id, tmp_flow_name, tmp_cases, tmp_flow_result))
            # print(book.get_cell_value(1, 2))
        # 不需要执行则略过
        else:
            book.set_cell_value(i, 5, "NT")
            continue
    # 保存测试结果
    book.save_file()
    # 退出驱动,关闭窗口
    browser.quite()
    # 返回 book,此时 sheet 指定的是 flows
    return all_num, pass_num, fail_num, table_list

 

posted @ 2021-02-09 18:38  栗子测试开发  阅读(89)  评论(0)    收藏  举报