zoukankan      html  css  js  c++  java
  • 20191011-构建我们公司自己的自动化接口测试框架-testrun最重要的模块

    testrun模块呢就是最终自动化测试入口,调用前面封装的各个模块主要流程是:

    1. 获取测试集种待执行的测试用例

    2. 处理测试用例获取的数据,包括转换数据格式,处理数据的中的关联等

    3. 处理完数据后发生request,获取返回结果,同时处理返回结果

    4. 处理返回结果包括断言结果列表,提取变量,获取测试报告所需内容等

    代码如下:

    from ProVar.ProjConfigVar import *
    from Util.getTestSuit import *
    from Action.KeyAction import *
    from Util.TestDataHandler import *
    from Util.AssertResult import *
    from Util.html_report import *
    from Util.ClearData import *
    import  os
    import re
    #获取测试数据文件的绝对路径
    #获取待测接口测试集
    # 执行前先清除上次执行结果
    clear()
    # 开始运行
    test_suit = get_test_case_sheet_names(ExceldirPath)
    test_results_for_html_report  = []
    # 存储全局变量
    global_vars = {}
    #实例化一个Excel实例,用于回写每一个test_case的result到Excel
    excel_instance_for_result_write = Excel(ExceldirPath)
    for test_sheet_name in test_suit:
        flag = True
        # 请求接口sheet
        apiName = test_sheet_name[1]
        excel_instance_for_result_write.set_sheet_by_name(apiName)
        # 获取测试步骤测试用例集
        test_cases = test_cases_from_test_data_sheet(ExceldirPath,apiName)
        # 转换数据格式
        # test_cases = pre_data_hander(test_cases,global_vars)
        for test_case in test_cases:
            test_case = pre_data_hander(test_case,global_vars)
            start_time = time.time()
            test_case_serials,method,baseurl,header,auth,body,assert_content,var_get_reg,assert_word,test_case_name= test_case
            # print(var_get_reg)
            response= api_request(method,baseurl,header,auth,body,test_case_name)
            end_time=time.time()
            try:
                info("接口的响应结果是:%s" %response.text)
                # excel书写response的状态码和response内容
                excel_instance_for_result_write.write_cell_value(int(test_case[0]+1),Test_Case_executeResult_col_no+1,response.status_code)
                excel_instance_for_result_write.write_cell_value(int(test_case[0]+1),Test_Case_result_content_col_no+1,response.text)
                # excel书写测试执行时间
                excel_instance_for_result_write.write_current_time(int(test_case[0]+1),Test_Case_execute_time_col_no+1)
                if assert_content:#如果有断言sheet
                    info("断言表为:%s" % assert_content)
                    if assert_result(excel_instance_for_result_write,response,assert_content):
                        # excel书写断言结果
                        excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_assert_result_col_no + 1, "成功", "green",apiName)
                        # 写report需要的字段
                        test_results_for_html_report.append(
                            (test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "成功"))
                    else:
                        excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),
                                                                         Test_Case_assert_result_col_no + 1, "失败", "red",apiName)
                        # 写report需要的字段
                        test_results_for_html_report.append(
                            (test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
                        flag = False
                #  如果仅仅是单纯的验证某一个返回结果字段
                elif assert_word:
                    info("断言字段为:%s" % assert_word)
                    if re.search(assert_word,response.text):
                        # excel书写断言结果
                        excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_assert_result_col_no + 1, "成功", "green",apiName)
                        # 写report需要的字段
                        test_results_for_html_report.append(
                            (test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "成功"))
                    else:
                        excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),
                                                                         Test_Case_assert_result_col_no + 1, "失败", "red",apiName)
                        # 写report需要的字段
                        test_results_for_html_report.append(
                            (test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
                        flag = False
                #如果var_get_reg不为空,即要求提取返回变量
                if var_get_reg:
                    var_name = var_get_reg.split("||")[0]
                    regx = var_get_reg.split("||")[1]
                    # print(var_name,regx)
                    if re.findall(regx, response.text):
                        var_value = re.findall(regx, response.text)
                        # 去除重复数据
                        var_value = list(set(var_value))
                        exec("global_vars['%s']=%s" % (var_name, var_value))
                        info("从响应中提取的变量名%s,变量值为%s" % (var_name, var_value))
                        info("生成全局变量名: global_vars['%s']=%s" % (var_name, var_value))
                        # 将提取的变量写入excel
                        excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_var_result_col_no+1,str(var_value),None,apiName)
            except IndexError:
                info('提取变量失败:'+traceback.format_exc())
                excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_var_result_col_no+1,"Failed","red",apiName)
            except:
                # traceback.print_exc()
                excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),  Test_Case_executeResult_col_no+1, "失败","red",apiName)
                if not response:
                    error("请求接口系统无法连接")
                    # break
                    test_results_for_html_report.append(
                        (test_case_name,baseurl, body, response, int((end_time - start_time) * 1000), assert_content, "失败"))
                else:
                    test_results_for_html_report.append(
                        (test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
                flag = False
            info("接口请求的耗时为%d 毫秒" %((end_time - start_time)*1000))
        excel_instance_for_result_write.set_sheet_by_index(1)
        if flag:
            excel_instance_for_result_write.write_cell_value(int(test_sheet_name[0]) + 1, Test_Suit_execute_result_col_no+1, "成功","green")
        else:
            excel_instance_for_result_write.write_cell_value(int(test_sheet_name[0]) + 1, Test_Suit_execute_result_col_no+1, "失败","red")
        excel_instance_for_result_write.write_current_time(int(test_sheet_name[0]) + 1, Test_Suit_execute_time_col_no+1)
    # print(global_vars)
    html_name = '接口测试报告'
    report_html(test_results_for_html_report, html_name)
  • 相关阅读:
    一. js高级(1)-面向对象编程
    tips01- 定位
    h5c3 part6 flex
    h5c3 part5 background and transform
    template and pagination
    h5c3 part4
    h5c3 part3
    h5c3 part2
    h5c3 part1
    学习博客
  • 原文地址:https://www.cnblogs.com/hyj691001/p/11655240.html
Copyright © 2011-2022 走看看