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

前言

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

validator 校验器

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

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

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实战教程点我 ->立即报名

posted @   上海-悠悠  阅读(744)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-04-19 python测试开发django-55.xadmin使用markdown文档编辑器(django-mdeditor)
2018-04-19 appium+python自动化31-android_uiautomator定位
2018-04-19 appium+python自动化32-android_uiautomator定位进阶版
2018-04-19 appium+python自动化33-解锁九宫格(TouchAction)
2018-04-19 Appium+python自动化23-Android夜神模拟器
2018-04-19 appium+python自动化28-name定位
2018-04-19 appium+python自动化30-list定位(find_elements)
点击右上角即可分享
微信分享提示