Ejemplo n.º 1
0
def get_data():
    read_excel = ReadExcel()
    data_list = []
    for row in range(2, read_excel.get_row_count() + 1):
        case_id = read_excel.get_case_id(row)
        method = read_excel.get_case_method(row)
        url = read_excel.get_case_url(row)
        if_execute = read_excel.get_case_if_execute(row)
        precondition = read_excel.get_case_precondition_id(row)
        depend_key = read_excel.get_case_depend_field(row)
        pattern = read_excel.get_case_regular_expression(row)
        expect = read_excel.get_case_expected_outcome_value(row)
        data_type = read_excel.get_case_response_data_type(row)
        if if_execute == "Y":
            data_list.append((case_id, method, url, if_execute, precondition,
                              depend_key, pattern, expect, data_type, row))
    return data_list
Ejemplo n.º 2
0
class RequestMethod(object):
    def __init__(self):
        # 通过requests的session方法实例化一个session对象
        self.session = requests.session()
        # 实例化一个read_excel对象,用来进行表格数据读取操作
        self.read_execl = ReadExcel()

    # # 封装一个方法可以获得响应吗
    # def get_response_code(self):
    #
    # 封装一个方法,发送get和post请求
    def get_or_post(self, method, url, params=None):
        # 根据传入方法参数的不同,通过使用session对象的不同方法使用不同的请求类型进行请求
        # 方法的返回值是一个response对象
        if method == 'GET':
            return self.session.get(url=url, params=params, verify=False)

        elif method == 'POST':
            return self.session.post(url=url, data=params, verify=False)

        else:
            raise ValueError('请求类型不支持')

    # 封装一个方法,请求结果获取响应body,可以用于正则提取,或者断言,如果返回json对象则返回字典数据,如果返回xml对象则返回text属性
    def get_case_actual_result(self, method, url, response_data_type, params=None):
        # 通过调用类方法get_or_post 来获得当前请求的响应对象
        current_response = self.get_or_post(method=method, url=url, params=params)
        # 将响应的解码为utf8
        current_response.encoding = 'utf-8'
        # 打印响应的文本
        # print(current_response.text)
        # 根据形参response_data_type的值,来返回不同的数据类型
        if response_data_type == 'JSON':
            # 调用response对象的.json方法获得当前响应的json返回数据 返回值为dict类型
            return current_response.json()

        elif response_data_type == 'XML':
            # 返回response对象的text属性,获得text文本 返回值为str类型
            return current_response.text

        else:
            # 如果没有获得想要的参数,则抛出一个传入值错误
            raise ValueError('不支持响应数据类型')

    # 声明一个方法根据前置用例id返回前置用例的行号 row
    def get_case_precondition_row(self, row):
        # 通过调用read_excel的get_case_precondition_id方法 获得当前用例的前置用例id
        precondition_id = self.read_execl.get_case_precondition_id(row=row)
        # 遍历所有行号
        for row_01 in range(2, self.read_execl.get_row_count() + 1):
            # 通过read_excel的get_case_id的到当前遍历行号的用例id
            current_case_id = self.read_execl.get_case_id(row=row_01)
            # 对比当前遍历行号的id与当前用例前置用例的id 如果相同则此行号为当前用例前置用例的行号
            if current_case_id == precondition_id:
                precondition_row = row_01
                # 返回该行号
                return precondition_row

    # 声明一个方法根据前置用例的行号,获得前置用例的响应的结果 pre_row 返回值为响应的text或json的result
    def get_case_precondition_response_result(self, precondition_row):
        # 通过read_excel的get_response_data_type方法 获得前置用例的返回数据类型
        pre_case_response_data_type = self.read_execl.get_case_response_data_type(row=precondition_row)
        # 通过read_excel的get_case_method方法 获得前置用例的请求方法
        pre_case_method = self.read_execl.get_case_method(row=precondition_row)
        # 通过read_excel的get_case_url方法 获得前置用例的请求url
        pre_case_url = self.read_execl.get_case_url(row=precondition_row)
        # 通过read_excel的get_case_parameters_value 根据前置用例行号 获得前置用例的参数值
        pre_case_params = self.read_execl.get_case_parameters_value(row=precondition_row)
        # 通过调用类的get_actual方法 获得前置用例请求的响应结果
        precondition_row_response_result = self.get_case_actual_result(method=pre_case_method, url=pre_case_url,
                                                                       response_data_type=pre_case_response_data_type,
                                                                       params=pre_case_params)
        # 返回前置用例请求的响应结果
        return precondition_row_response_result

    # 声明一个方法,从响应中根据正则表达式提取value,与依赖字段组成键值对返回 pre_row dict数据类型
    def get_depend_key_value_items(self, row):
        # 调用类的get_case_precondition_row方法 获得前置用例的行号
        # print('当前行数', row)
        precondition_row = self.get_case_precondition_row(row=row)
        # 通过调用read_excel的get_case_depend_field方法 获得前置用例的依赖字段的key值
        depend_field_key = self.read_execl.get_case_depend_field(row=precondition_row)
        # 通过调用类的get_case_precondition_response_result方法 传入前置用例的行号 获得前置用例的响应结果
        pre_case_response_result = self.get_case_precondition_response_result(precondition_row=precondition_row)
        # 通过调用read_excel的get_case_regular_expression传入前置用例行号 获得前置用例的正则表达式
        pre_regular_expression = self.read_execl.get_case_regular_expression(row=precondition_row)
        # 通过前置用例的正则表达式以及前置用例的响应结果,进行正则匹配,获得需求的依赖字段的值
        depend_field_value = re.findall(pattern=pre_regular_expression, string=pre_case_response_result)[0]
        # 以字典类型返回当钱用例的依赖字段的key与value
        # print(depend_field_key, depend_field_value)
        return {depend_field_key: depend_field_value}

    # 声明一个方法,把正则表达式提取到的键值对,更新到请求参数中 row
    def update_case_params_depend_field(self, row):
        # 通过调用read_excel的get_case_parameters_value传入当前参数的行号,获得更新前的参数
        require_params = self.read_execl.get_case_parameters_value(row=row)
        # 通过调用类的get_depend_key_value_items获得当前用例的依赖字段的键值对
        depend_filed = self.get_depend_key_value_items(row=row)
        # 通过字典的update方法将依赖字段跟新到当前用例的所需参数中
        require_params.update(depend_filed)
        # 返回更新了依赖字段键值对的参数 作为当前用例的参数
        return require_params
Ejemplo n.º 3
0
    #     print('当前响应数据类型')
    #     print(read_excel.get_case_id(row=row))
    #     print(my_request.get_actual_result(method=method, url=url, response_data_type=content_type, params=params))

    for row in range(4, request_method.read_execl.get_row_count() + 1):
        # 根据列表是否运行字段 如果字段的值为Y 那么执行当前行号用例
        if request_method.read_execl.get_case_if_execute(row=row) == "Y":
            print("现在开始执行第%d行的用例" % row)
            # 获得当前行号用例的方法
            method = request_method.read_execl.get_case_method(row)
            # 获得当前行号的url
            url = request_method.read_execl.get_case_url(row)
            # 获得当前用例的前置用例的id
            precondition_case_id = request_method.read_execl.get_case_precondition_id(row)
            # 获得当前用例的响应数据类型
            content_type = read_excel.get_case_response_data_type(row)
            # print("前置用例是:%s" % precondition_case_id)
            # 如果当前行号用例有前置用例 则调用request_method对象的update_case_params_depend_field方法 获得更新后参数
            if precondition_case_id:
                params = request_method.update_case_params_depend_field(row)
                # print(params)
            # 如果没有前置用例 则直接读取列表中的参数值
            else:
                params = request_method.read_execl.get_case_parameters_value(row)
            # 打印请求所需要的每个参数
            print(method, url, params)
            # 通过类的获得实际结果方法 将各个参数传入 霍霍响应的实际结果
            actual_result = request_method.get_case_actual_result(method=method, url=url, params=params,
                                                                  response_data_type=content_type, )
            # 打印实际结果