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)

 

posted @ 2019-10-11 16:52  何发奋  阅读(301)  评论(0编辑  收藏  举报