• 测试平台系列(70) 丰富断言类型


    大家好~我是米洛

    我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持。

    欢迎关注我的公众号测试开发坑货,获取最新文章教程!

    回顾

    上一节我们支持了SQL类型的构造方法。

    接下来我们要讲的是如何丰富我们的断言类型。

    基础断言

    我们之前的断言部分还是比较残缺的,就好像辟邪剑谱一样。今天我们就来尽量完善下断言的内容。

    先看看之前的断言类型:

    • 等于
    • 不等于
    • 属于

    但这些往往还不够,我们还需要新增一些。还记得我们之前写的如何比对2个JSON对象吗?我们今天也要把它运用到实战里面。

    编写utils/json_compare.py

    由于之前已经讲过json对比的思路,所以这边贴一下源码,并把JsonCompare类进行单例包装。

    import json
    
    from app.utils.decorator import SingletonDecorator
    
    
    @SingletonDecorator
    class JsonCompare(object):
    
        def compare(self, exp, act):
            ans = []
            self._compare(exp, act, ans, '')
            return ans
    
        def _compare(self, a, b, ans, path):
            a = self._to_json(a)
            b = self._to_json(b)
            if type(a) != type(b):
                ans.append(f"{path} 类型不一致, 分别为{type(a)} {type(b)}")
                return
            if isinstance(a, dict):
                keys = []
                for key in a.keys():
                    pt = path + "/" + key
                    if key in b.keys():
                        self._compare(a[key], b[key], ans, pt)
                        keys.append(key)
                    else:
                        ans.append(f"{pt} 在实际结果中不存在")
                for key in b.keys():
                    if key not in keys:
                        pt = path + "/" + key
                        ans.append(f"{pt} 在实际结果中多出")
            elif isinstance(a, list):
                i = j = 0
                while i < len(a):
                    pt = path + "/" + str(i)
                    if j >= len(b):
                        ans.append(f"{pt} 在实际结果中不存在")
                        i += 1
                        j += 1
                        continue
                    self._compare(a[i], b[j], ans, pt)
                    i += 1
                    j += 1
                while j < len(b):
                    pt = path + "/" + str(j)
                    ans.append(f"{pt} 在预期结果中不存在")
                    j += 1
            else:
                if a != b:
                    ans.append(
                        f"{path} 数据不一致: {a} "
                        f"!= {b}" if path != "" else
                        f"数据不一致: {a} != {b}")
    
        def _color(self, text, _type=0):
            if _type == 0:
                # 说明是绿色
                return """<span style="color: #13CE66">{}</span>""".format(text)
            return """<span style="color: #FF4949">{}</span>""".format(text)
    
        def _weight(self, text):
            return """<span style="font-weight: 700">{}</span>""".format(text)
    
        def _to_json(self, string):
            try:
                float(string)
                return string
            except:
                try:
                    if isinstance(string, str):
                        return json.loads(string)
                    return string
                except:
                    return string
    
    

    改写断言方式

    看看之前的断言方式:

    方式有点少,需要补充

    因为我们也不可能补充很多内容,所以我们只添加一些常见的

    我们新增一些,包含/不包含/包含于/不包含于/长度等于/长度大于/长度小于/JSON等于这样的校验方式。并且用emoji区分了是否成功。

    来看看效果吧~

    这样就稍微丰富了咱们的断言手段,但我们还有一些JSON包含等,以及文本比对相似度断言的方式还没派上用场,之后有机会再给大家展示。

    今天的内容就分享到这儿了,有兴趣的朋友们可以一起动手写起来呀!~

    (本期内容比较少,下期带来重磅的Python的定时任务系列)

    在线体验地址: http://test.pity.fun

    前端代码仓库: https://github.com/wuranxu/pityWeb

    后端代码仓库: https://github.com/wuranxu/pity

  • 相关阅读:
    vue 路由的实现 hash模式 和 history模式
    标准规范
    知识产权、项目收尾
    合同法、著作权、实施条例
    招投标法、政府采购法
    项目成熟度模型、量化项目管理
    信息系统综合测试与管理
    信息系统安全管理
    Spring Boot 6. 与数据访问
    Spring Boot 5. 与Docker
  • 原文地址:https://www.cnblogs.com/we8fans/p/15499146.html
Copyright © 2020-2023  润新知