zoukankan      html  css  js  c++  java
  • 【优化框架】优化断言,断言返回结果是否包含特定字符串

    • 优化断言,断言返回结果是否包含特定字符串

      题记:由于断言库无法满足断言某个值,所以新增一个断言方法

    • demo.py
        def __contain_text(self, check_data):
            """
            断言数据中是否存在该字段
            :param check_data:
            :return:
            """
            if check_data in self.response_data.text:
                logger.info(
                    '断言类型 [__contain_text] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                              ))
                return self.pass_result
            else:
                logger.error(
                    '断言类型 [__contain_text] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                               ))
                return self.fail_result

    
    
    • 优化check_utils.py中的方法

    check_utils.py

    # -*- coding: utf-8 -*-
    # @Time : 2021/12/13 14:07
    # @Author : Limusen
    # @File : check_utils
    
    import json
    import re
    from common.logs_utils import logger
    
    
    class CheckUtils:
    
        def __init__(self, response_data):
            """
            :param response_data: 响应结果
            """
            self.response_data = response_data
            self.function = {
                "none": self.none_check,
                "json_key": self.key_check,
                "json_key_value": self.key_value_check,
                "body_regexp": self.body_regexp_check,
                "header_key_check": self.header_key_check,
                "header_key_value_check": self.header_key_value_check,
                "response_code_check": self.response_code_check,
                "contain_text": self.__contain_text
            }
            self.pass_result = {  # 通过结果
                "code": 0,
                "response_code": self.response_data.status_code,
                "response_reason": self.response_data.reason,
                "response_headers": self.response_data.headers,
                "response_body": self.response_data.text,
                "message": "测试用例执行通过",
                "check_result": True
            }
            self.fail_result = {  # 失败结果 2 表示断言失败
                "code": 2,
                "response_code": self.response_data.status_code,
                "response_reason": self.response_data.reason,
                "response_headers": self.response_data.headers,
                "response_body": self.response_data.text,
                "message": "测试用例断言失败,测试用例执行不通过",
                "check_result": False
            }
    
        def none_check(self):
            """
            断言类型为空的情况
            :return:
            """
            logger.info("断言类型 [none],不进行断言,本次断言通过")
            return self.pass_result
    
        def key_check(self, check_data):
            """
            检查键是否相同
            :param check_data: 需要检查的字段,注意得是字符串才行,因为要分割
            :return: True说明断言成功,False说明断言失败
            """
            # 字符串逗号分割
            key_list = check_data.split(",")
            tmp_result = []
            # 取出需要断言的字段
            for check_key in key_list:
                # 如果 check_key 在json串的键当中,则添加True,不是则添加False
                if check_key in self.response_data.json().keys():
                    tmp_result.append(True)
                else:
                    tmp_result.append(False)
            if False in tmp_result:
                logger.error('断言类型 [key_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data))
                # 只要有一个不符合 用例全部失败
                return self.fail_result
            else:
                logger.info("断言类型 [key_check],检查键值,实际结果:{}, 期望结果:{} 相符,断言成功".format(self.response_data.text, check_data))
                return self.pass_result
    
        def key_value_check(self, check_data):
            """
            检查键值对是否一致
            :param check_data:
            :return:
            """
            key_dict = json.loads(check_data)
            tmp_result = []
    
            for check_key in key_dict.items():
                if check_key in self.response_data.json().items():
                    tmp_result.append(True)
                else:
                    tmp_result.append(False)
            if False in tmp_result:
                logger.error(
                    '断言类型 [key_value_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                                 ))
                return self.fail_result
            else:
                logger.info('断言类型 [key_value_check] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data))
    
                return self.pass_result
    
        def body_regexp_check(self, check_data):
            """
            根据正则表达式断言
            :param check_data:
            :return:
            """
            if re.findall(check_data, self.response_data.text):
                # 能找到check_data的值则算通过
                logger.info(
                    '断言类型 [body_regexp_check] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                                  ))
                return self.pass_result
            else:
                logger.error(
                    '断言类型 [body_regexp_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                                   ))
                return self.fail_result
    
        def header_key_check(self, check_data):
            """
            检查头部信息是否包含某个值  可以参照key_check()
            :param check_data:
            :return:
            """
            # 字符串逗号分割
            key_list = check_data.split(",")
            tmp_result = []
            # 取出需要断言的字段
            for check_key in key_list:
                # 如果 check_key 在json串的键当中,则添加True,不是则添加False
                if check_key in self.response_data.headers.keys():
                    tmp_result.append(True)
                else:
                    tmp_result.append(False)
            if False in tmp_result:
                logger.error(
                    '断言类型 [header_key_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                                  ))
                # 只要有一个不符合 用例全部失败
                return self.fail_result
            else:
                logger.info(
                    '断言类型 [header_key_check] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                                 ))
                return self.pass_result
    
        def header_key_value_check(self, check_data):
            """
            检查头部键值对是否一致 参照key_value_check()
            :param check_data:
            :return:
            """
            key_dict = json.loads(check_data)
            tmp_result = []
    
            for check_key in key_dict.items():
                if check_key in self.response_data.headers.items():
                    tmp_result.append(True)
                else:
                    tmp_result.append(False)
            if False in tmp_result:
                logger.error(
                    '断言类型 [header_key_value_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                                        ))
                # 只要有一个不符合 用例全部失败
                return self.fail_result
            else:
                logger.info(
                    '断言类型 [header_key_value_check] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                                       ))
                return self.pass_result
    
        def response_code_check(self, check_data):
            """
            检查返回状态码
            :param check_data:
            :return:
            """
            if self.response_data.status_code == int(check_data):
                logger.info(
                    '断言类型 [__response_code_check] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                                      ))
                return self.pass_result
            else:
                logger.error(
                    '断言类型 [__response_code_check] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                                       ))
                return self.fail_result
    
        def __contain_text(self, check_data):
            """
            断言数据中是否存在该字段
            :param check_data:
            :return:
            """
            if check_data in self.response_data.text:
                logger.info(
                    '断言类型 [__contain_text] ==》实际结果:{}, 期望结果:{} 相符,断言成功'.format(self.response_data.text, check_data
                                                                              ))
                return self.pass_result
            else:
                logger.error(
                    '断言类型 [__contain_text] ==》实际结果:{}, 期望结果:{} 不相符,断言失败'.format(self.response_data.text, check_data
                                                                               ))
                return self.fail_result
    
        def run_check(self, check_type, except_result):
            """
            :param check_type: 检查的类型
            :param except_result: 检查的字段
            :return:
            """
            if check_type == "none" or except_result == "":
                return self.function["none"]()
            else:
                return self.function[check_type](except_result)
    
    
    if __name__ == '__main__':
        import requests
    
        url = "https://api.weixin.qq.com/cgi-bin/token"
        get_params = {"grant_type": "client_credential", "appid": "wxb637f897f0bf1f0d",
                      "secret": "501123d2d367b109a5cb9a9011d0f084"}
    
        response = requests.get(url=url, params=get_params)
        # print(response.headers)
    
        ck = CheckUtils(response)
        # print(ck.none_check())
        # print(ck.run_check('json_key', "access_token,expires_in"))
        # print(ck.run_check('json_key_value', '{"expires_in": 7200}'))
        # print(ck.run_check("body_regexp", '"access_token":"(.+?)"'))
        # print(ck.run_check("header_key_check", "Connection"))
        # print(ck.run_check("header_key_value_check", '{"Connection": "keep-alive"}'))
        # print(ck.run_check("response_code_check", "200"))
        print(ck.run_check("contain_text","access_token"))
    • 在excel表格中新增contain_text字段

    新增断言类型为contain_text

  • 相关阅读:
    性能测试篇 :Jmeter HTTP代理服务器录制压力脚本
    使用JMeter录制手机App脚本
    WEB接口测试之Jmeter接口测试自动化 (二)(数据分离)
    【Python】Python读取文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 20: illegal multibyte sequence
    【Python】学习笔记九:面向对象拓展
    【Python】学习笔记七:函数
    【Python】学习笔记五:缩进与选择
    【Python】学习笔记三:序列
    【Python】学习笔记二:基本数据类型
    【Python】学习笔记一:Hello world
  • 原文地址:https://www.cnblogs.com/yushengaqingzhijiao/p/15744019.html
Copyright © 2011-2022 走看看