예제 #1
0
class GetHeadersCookies:
    def __init__(self):
        self.op_json = OperationJson()

    def get_headers_value(self):
        return self.op_json.get_key_words("header")

    def get_cookies_value(self):
        return self.op_json.get_key_words("cookie")
예제 #2
0
 def __get_data_for_json(self, sheet_name, request_data_key):
     """通过excel中关键字去获取json数据"""
     sheetName = self.get_json_file_name(sheet_name)
     op_json = OperationJson(file_path=sheetName)
     data = op_json.get_key_words(request_data_key)
     return data
예제 #3
0
class RunTest(object):
    def __init__(self):
        read_conf = ReadConfig()  # 邮件发送开关
        self.is_on = read_conf.get_email_config_var('on_off')
        self.run_method = RunMethod()
        self.data = GetData()
        self.public_util = PublicUtil()
        self.headers_and_cookies = OperationJson()
        self.cookies = self.headers_and_cookies.get_key_words("cookie")
        self.headers = self.headers_and_cookies.get_key_words("header")

    def request_depend_logic(self, request_data, depend_case, depend_data,
                             depend_filed, sheet, row_count):

        if depend_case == False:
            error = "工作表{0}中的第{1}行的case_id字段的数据类型错误". \
                format(sheet, row_count + 1)
            log.error(error)
            return

        if not isinstance(depend_case, list):
            error = "工作表{0}中的第{1}行的case_id字段值外层数据不是列表类型的数据" \
                .format(sheet, row_count + 1)
            log.error(error)
            return

        if depend_data is None or depend_data == False:
            error = "工作表{0}中的第{1}行的depend_data字段值不可为空或者数据类型错误". \
                format(sheet, row_count + 1)
            log.error(error)
            return

        if not isinstance(depend_data, list):
            error = "工作表{0}中的第{1}行填写的depend_data字段值外层数据不是列表类型的数据". \
                format(sheet, row_count + 1)
            log.error(error)
            return

        if depend_filed is None or depend_filed == False:
            error = "工作表{0}中的第{1}行的depend_filed字段值不可为空或者数据类型错误!". \
                format(sheet, row_count + 1)
            log.error(error)
            return

        if not isinstance(depend_filed, list):
            error = "工作表{0}中的第{1}行的depend_filed字段值外层数据不是列表类型的数据". \
                format(sheet, row_count + 1)
            log.error(error)
            return

        if not (len(depend_case) == len(depend_data) == len(depend_filed)):
            error = "工作表{0}中的第{1}行填写的depend_case,depend_data,depend_filed三个外层列表的长度不相等" \
                .format(sheet, row_count + 1)
            log.error(error)
            return error

        for case_depend, data_depend, filed_depend in zip(
                depend_case, depend_data, depend_filed):

            if not isinstance(case_depend, list):
                error = "工作表{0}中的第{1}行的case_id字段值内层数据“{2}”不是列表类型的数据" \
                    .format(sheet, row_count + 1, case_depend)
                log.error(error)
                return

            if len(case_depend) != 2:
                error = "工作表{0}中的第{1}行的case_id字段值内层数据列表“{2}”的长度不等于2" \
                    .format(sheet, row_count + 1, case_depend)
                log.error(error)
                return

            if not isinstance(data_depend, list):
                error = "工作表{0}中的第{1}行的data_depend字段值内层数据“{2}”不是列表类型的数据" \
                    .format(sheet, row_count + 1, data_depend)
                log.error(error)
                return

            if not isinstance(filed_depend, list):
                error = "工作表{0}中的第{1}行的filed_depend字段值内层数据“{2}”不是列表类型的数据" \
                    .format(sheet, row_count + 1, filed_depend)
                log.error(error)
                return

            if len(data_depend) != len(filed_depend):
                error = "工作表{0}中的第{1}行的depend_data和depend_filed字段的内层列表数据{2}和{3}的长度不相等" \
                    .format(sheet, row_count + 1, data_depend, filed_depend)
                log.error(error)
                return

            depend_data = DependentData(request_data, case_depend, data_depend,
                                        filed_depend)
            request_data = depend_data.get_data_for_key()
        return request_data

    def run_case_logic(self):
        res = None
        pass_list = []
        fail_list = []
        result_path = self.data.get_save_result_path()  # 获取结果文件路径
        sheetName = self.data.get_sheet_names()  # 获取当前工作簿中所有工作表的名称
        for sheet in sheetName:
            self.data.get_sheet_data(sheet)  # 通过sheet页名称读取对应sheet页的数据
            row_counts = self.data.get_sheet_lines()  # 获取sheet页的总行数
            for row_count in range(1, row_counts):
                log.info("工作表:{0}-->行号:{1} {2}".format(sheet, row_count,
                                                       "=" * 200))
                is_run = self.data.get_is_run(row_count)
                if is_run:
                    url = self.data.get_request_url(row_count)
                    log.info("请求地址:  {}".format(url))

                    method = self.data.get_request_method(row_count)
                    log.info("请求方法:  {}".format(method))

                    request_data = self.data.get_request_data(sheet, row_count)
                    log.info("请求数据:  {}".format(request_data))

                    header = self.data.get_is_header(row_count)
                    log.info("请求头部:  {}".format(header))

                    cookies = self.data.get_is_cookie(row_count)
                    log.info("Cookies:  {}".format(cookies))

                    expect_list = self.data.get_expect_data(row_count)
                    log.info("预期结果:  {}".format(expect_list))

                    depend_case = self.data.get_is_case_depend(row_count)

                    if depend_case is not None:  # 处理依赖关系
                        log.info("开始处理接口之间的依赖关系流程{}".format(">" * 150))
                        log.info("依赖case:  {}".format(depend_case))

                        depend_data = self.data.get_depend_data(row_count)
                        log.info("依赖数据:  {}".format(depend_data))

                        depend_filed = self.data.get_depend_filed(row_count)
                        log.info("依赖字段:  {}".format(depend_filed))

                        request_data = self.request_depend_logic(
                            request_data, depend_case, depend_data,
                            depend_filed, sheet, row_count)
                        log.info("更新请求数据:{}".format(request_data))
                        log.info("结束处理接口之间的依赖关系流程{}".format("<" * 150))

                    res = self.run_method.run_method(method, url, request_data,
                                                     header, cookies)

                    if self.public_util.is_contain(expect_list, res):
                        self.data.write_real_result(sheet, row_count, 'pass')
                        pass_list.append([sheet, row_count])
                    else:
                        log.info("结果比对fail的响应{}".format(res))
                        self.data.write_real_result(sheet, row_count, res)
                        fail_list.append([sheet, row_count])

        return pass_list, fail_list, result_path

    def run(self):
        # 运行所有case
        result = list(self.run_case_logic())
        # 发送邮件
        if self.is_on == 'on':
            sendEmail = SendEmail()
            sendEmail.send_email(result[0], result[1], result[2])
            log.info("本次测试完成,已将测试结果通过邮件发送至各位,请注意查收!")
        else:

            log.info("邮件发送开关配置关闭,请打开开关后可正常自动发送测试报告")
class GetAuthorization:
    def __init__(self):
        self.session = requests.session()
        self.operation_json = OperationJson("../test_data/json_data/user.json")
        self.url = self.operation_json.get_key_words("login_url")
        self.data = self.operation_json.get_key_words("login_data")
        self.header = self.operation_json.get_key_words("header")
        self.cookie = {}
        self.context = {}


    def do_login(self):
        """登录操作"""
        res = self.session.post(url=self.url, data=self.data)
        status_code = res.status_code
        if status_code == 200:
            return res.json()
        else:
            return "登录失败"


    def api_authorize(self,data):
        res = requests.get(url=data)
        request_headers = res.request.headers
        cookie_jar = res.cookies
        response_cookie = utils.dict_from_cookiejar(cookie_jar)
        request_cookie = request_headers['Cookie']
        return request_cookie,response_cookie


    def data_transducer(self,string: str) -> dict:
        """
        :param string: token=eyJ0eXAiOiJK; auth_id=bd43fe2426081aa5a8b0a2773d006f70; auth_sys=d41d8cd98f00b204e9800998ecf8427e
        :return: {'token': 'eyJ0eXAiOiJK', 'auth_id': 'bd43fe2426081aa5a8b0a2773d006f70', 'auth_sys': 'd41d8cd98f00b204e9800998ecf8427e'}
        """
        dic = {}
        for s in string.split("; "):
            d = s.split("=")
            dic[d[0]] = d[1]
        return dic


    def get_authorization(self):
        do_login_res = self.do_login()
        link_url = do_login_res['info']
        api_authorize = list(self.api_authorize(link_url))

        request_cookie = self.data_transducer(api_authorize[0])
        response_cookie = api_authorize[1]

        self.cookie.update(response_cookie)
        self.cookie.update(request_cookie)
        token = self.cookie['token']
        self.cookie.pop("token")

        X_XSRF_TOKEN = response_cookie['XSRF-TOKEN']
        Authorization =  "Bearer " + token

        self.header['X-XSRF-TOKEN'] = X_XSRF_TOKEN
        self.header['Authorization'] = Authorization
        self.context['cookie'] = self.cookie
        self.context['header'] = self.header

        content = json.dumps(self.context,ensure_ascii=False,indent=2,sort_keys=True)

        file_path = "../test_data/json_data/header_cookie.json"
        self.operation_json.write_data(file_path,content)