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 json: username: test password: 123456 validate: - check: content.data comparator: all_age_great expect: 18 - all_age_great: [content.data, 18]

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

2021年第七期《python接口自动化+测试开发》课程,4月18号开学(火热报名中!)

本期上课时间:4月18号-7月11号,每周六、周日晚上20:30-22:30

(0)

相关推荐