• httprunner 2.x学习13-自定义校验器(comparator)


    前言

    当我们需要对返回的结果做较复杂的校验时候,httprunner自带的校验方法无法满足我们的需求,可以自己写校验方法。

    validator 校验器

    httprunner 校验返回结果有2种格式

    • {"comparator_name": [check_item, expect_value]}
    • {"check": check_item, "comparator": comparator_name, "expect": expect_value}

    我们平常用的比较多是是上面这种,直接拿到返回结果,校验与期望结果是否一致

    validate:
            - eq: [status_code, 200]
            - less_than: [status_code, 400]
            - equals: [content.code, 0]
            - equals: [content.msg, success!]
            - length_equals: [content.datas, 2]
            - greater_than_or_equals: [content.datas.0.age, 18]
    

    如果我们需要更复杂一点的校验,上面的就不能满足需求了,比如我要判断返回的结果,所有的年龄都是大于等于18的,但是返回的数据是不固定的,可以是2个也可以是3个

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    {
        "code": 0,
        "data": [
            {
                "age": 20,
                "create_time": "2019-09-15",
                "id": 1,
                "mail": "283340479@qq.com",
                "name": "yoyo",
                "sex": "M"
            },
            {
                "age": 21,
                "create_time": "2019-09-16",
                "id": 2,
                "mail": "123445@qq.com",
                "name": "yoyo111",
                "sex": "M"
            }
        ],
        "msg": "success!"
    }
    

    自定义校验器(comparator)

    当自带的断言方法无法满足需求的时候,可以自己在 debugtalk.py 写函数,自定义校验方法

    # debugtalk.py
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    # 获取data数据,断言每个数据的age字段大于等于expect_age
    def all_age_great(data, expect_age):
        """ all age great then expect_age
        """
        for info in data:
            assert info.get('age') >= expect_age
    

    于是 yaml 用例可以这样写

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    config:
        name: test_demo
        base_url: http://127.0.0.1:8000
        variables: {}
    
    teststeps:
    -
        name: test_demo case1
        request:
            url: /api/test/demo
            method: GET
            headers:
                Content-Type: application/json
                User-Agent: python-requests/2.18.4
        validate:
        -    check: content.data
             comparator: all_age_great
             expect: 18
        -    all_age_great: [content.data, 18]
    

    以上2种方式都是支持的。以上解决方法来源于源作者https://zhuanlan.zhihu.com/p/31994479


    httprunner 2.x实战教程点我 ->立即报名

  • 相关阅读:
    「七天自制PHP框架」第四天:模型关联
    「七天自制PHP框架」第三天:PHP实现的设计模式
    「七天自制PHP框架」第二天:模型与数据库
    一个例子简要说明include和require的区别
    解读Laravel,看PHP如何实现Facade?
    Laravel是怎么实现autoload的?
    Laravel表单提交
    Laravel的console使用方法
    PHP控制反转(IOC)和依赖注入(DI)
    PHP解耦的三重境界(浅谈服务容器)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14675762.html
Copyright © 2020-2023  润新知