pytest + yaml 框架 -22.validate 校验返回结果的几种方式

2023-10-31

前言

validate 校验返回结果的几种方式总结

环境要求
Python 大于等于3.8版本,(低于python3.8版本不支持)
Pytest 大于等于 7.2.0

pip 安装插件, 最新版本v1.1.9

pip install pytest-yaml-yoyo

v1.1.9 版本做了以下优化

  • 1.validate 校验加了text 关键字获取全部body文本内容
  • 2.用例分层 api和 testcase 层 validate 校验优化,解决之前遗留的bug
  • 3.validate 校验方式更灵活,支持int类型校验字符长度和包含字符
  • 4.log 日志文件优化,只保留最近的5个日志文件

validate 校验

从response 对象属性取值可以是以下对象 [status_code, url, ok, headers, cookies, json, encoding, text]

其中status_code, url, ok, encoding, text 这几个对象可以直接取出

# 作者 上海-悠悠 微信:283340479
test_yoyo:
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: [status_code, 200]
    - eq: [url, http://httpbin.org/get]
    - eq: [ok, True]
    - str_eq: [encoding, 'None']
    - contains: [text, args]

其中 text 是获取接口返回的全部文本,也就是r.text 获取到的文本内容

运行日志


2023-03-21 21:16:09 [INFO]: validate 校验内容-> [{'eq': ['status_code', 200]}, {'eq': ['url', 'http://httpbin.org/get']},
 {'eq': ['ok', True]}, {'str_eq': ['encoding', 'None']}, {'contains': ['text', 'args']}]
2023-03-21 21:16:09 [INFO]: validate 校验结果-> eq: [200, 200]
2023-03-21 21:16:09 [INFO]: validate 校验结果-> eq: [http://httpbin.org/get, http://httpbin.org/get]
2023-03-21 21:16:09 [INFO]: validate 校验结果-> eq: [True, True]
2023-03-21 21:16:09 [INFO]: validate 校验结果-> str_eq: [None, None]
2023-03-21 21:16:09 [INFO]: validate 校验结果-> contains: [{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.18.4",
    "X-Amzn-Trace-Id": "Root=1-6419ae16-35a5895d42d28afb50ec9390"
  },
  "origin": "104.168.170.139",
  "url": "http://httpbin.org/get"
}
, args]

校验 headers 和 cookies

headers 和 cookies 的校验可以通过jmespath 取值表达式,以 headers.xxcookies.xx 的方式取值

使用示例

# 作者 上海-悠悠 微信:283340479

test_yoyo:
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: [headers."Content-Type", application/json]
    - eq: [cookies, {}]

因为取值的"Content-Type" 有特殊字符,jmespath 表达式取值的时候会报语法问题,用双引号包起来headers."Content-Type"

校验json类型的 body

返回的body 如果是json 格式,那么有两种取值语法

  • jsonpath 取值语法, 如:$.code, $..token
  • jmespath 取值语法,如: body.code

使用示例

# 作者 上海-悠悠 微信:283340479

test_yoyo:
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: [body.url, http://httpbin.org/get]
    - eq: [body.headers.Host, httpbin.org]
    - eq: [$..Host, httpbin.org]

运行日志

2023-03-21 21:13:25 [INFO]: validate 校验内容-> [{'eq': ['body.url', 'http://httpbin.org/get']},
 {'eq': ['body.headers.Host', 'httpbin.org']}, {'eq': ['$..Host', 'httpbin.org']}]
2023-03-21 21:13:25 [INFO]: validate 校验结果-> eq: [http://httpbin.org/get, http://httpbin.org/get]
2023-03-21 21:13:25 [INFO]: validate 校验结果-> eq: [httpbin.org, httpbin.org]
2023-03-21 21:13:25 [INFO]: validate 校验结果-> eq: [httpbin.org, httpbin.org]

body 正则提取

有些返回的body不是json格式,可以支持正则提取,也就是我们常用的正则语法: xxx(.+?)xxxxxx(.*?)xxx

使用示例

# 作者 上海-悠悠 微信:283340479
test_yoyo:
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: ['"url": "(.+?)"', "http://httpbin.org/get"]

运行日志

2023-03-21 21:19:49 [INFO]: validate 校验内容-> [{'eq': ['"url": "(.+?)"', 'http://httpbin.org/get']}]
2023-03-21 21:19:49 [INFO]: validate 校验结果-> eq: [http://httpbin.org/get, http://httpbin.org/get]

其它断言

一些数字类型的断言方式总结:
eq: 严格校验,字符串和数字类型
str_eq: 转字符串后判断相等
constains: 包含数字,可支持数字12345 包含 123
len_eq: 判断字符串或数字长度
gt: 判断数字大于

使用示例

# 作者 上海-悠悠 微信:283340479

test_assert:
-
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: ['123', '123']
    - str_eq: [123, '123']
    - constains: [123, '12']
    - constains: ['123', '12']
    - constains: [['hello', 'world'], 'hello']
    - len_eq: [123, 3]
    - len_eq: ['123', 3]
    - len_eq: ['abc', 3]
    - gt: [123, 100]

validate 可以支持的校验方式

validate 可以支持的校验方式

comparator 缩写 功能
equal “eq”, “equals”, “equal” 相等
less_than “lt”, “less_than” 小于
less_or_equals “le”, “less_or_equals” 小于或等于
greater_than “gt”, “greater_than” 大于
greater_or_equals “ge”, “greater_or_equals” 大于或等于
not_equal “ne”, “not_equal” 不等于
string_equals “str_eq”, “string_equals” 转字符串相等
length_equal “len_eq”, “length_equal” 长度相等
length_greater_than “len_gt”,“length_greater_than” 长度大于
length_greater_or_equals “len_ge”,“length_greater_or_equals” 长度大于或等于
length_less_than “len_lt”, “length_less_than” 长度小于
length_less_or_equals "“len_le”, “length_less_or_equals” 长度小于或等于
contains check_value 包含 expect_value
contained_by expect_value 包含check_value
type_match type类型匹配
regex_match 正则匹配re.match(expect_value, check_value)
startswith 字符串以xx开头
endswith 字符串以xx结尾
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytest + yaml 框架 -22.validate 校验返回结果的几种方式 的相关文章

随机推荐

  • windows10+vscode+anaconda+python3.7配置LiDAR-MOS动态物体点云开源项目

    之前用c 开发较多 最近开始尝试深度学习方面的工作 用到python合pytorch 经过4天的探索 终于能把测试代码跑起来了 记录下遇到的坑 1安装anaconda 这个不是本文重点 网上教程很多 2创建python虚拟环境 2 1使用v
  • STM32F103 USB虚拟成U盘功能

    STM32F103 USB虚拟成U盘功能 还在学习 中
  • 蓝桥杯省赛模拟题-智能门锁

    本文是对 坊间流传的 蓝桥杯省赛模拟题 智能门锁 的一种解法和思路 用的是蚂蚁科技的底层代码 其中有一个BUG虽然解决 但仍然不清除原因 数码管显示6个数组字符就会出问题 最多4个稳定 但是加入超声波底层就会都正常 不清楚这是什么原因造成的
  • yolo5 训练无人人机识别系统

    环境搭建 安装驱动 点击鼠标右键 如果出现NVIDIA图标 点开 出现如下图片 我的显卡是1650 根据显卡的型号去官网找相应的驱动下载就好了 驱动官网 安装好之后 打开命令行cmd 输入如下指令 nvidia smi 显示出如下数据即为安
  • 电机驱动的三种脉冲模式

    电机驱动的三种脉冲模式 脉冲 方向 脉冲 脉冲 A B正交脉冲
  • TLS certificate verification has been disabled

    git push 推送仓库报错 缺少了安全认证 所以解决方法是重启安全认证 git config global http sslVerify true
  • 电机控制常用PID控制算法

    本文分享自己在电机控制仿真中的建模方法 敬请批评指正 同名B站链接 Timer sir 电机控制常用PID控制算法 PID控制原理 位置式PID 增量式PID 抗饱和PID PID控制仿真 仿真模型 仿真结果 PID控制原理 将偏差的比例
  • 记一次ThreadLocal的使用注意点(线程池)

    Threadlocal的作用就不用多讲了 主要是一个map用于线程间的数据隔离 正常情况下 线程回收 那么这个线程对应的map值也会被回收 是ThreadLocal中被移除并非值本身被移除 如果是对象并且任然被引用 它是不会被回收的 基于上
  • SpringBoot使用Nacos作为配置中心服务和服务注册中心

    简介 从spring开始 所有的配置文件都放在项目中 如果需要修改配置文件内容 则需要登陆服务器重启服务 想象一下如果你有一百台服务的需要修改 那是不可想象的工作量 目前已有的配置中心 携程开源的Apollo 数据保存在mysql中 支持命
  • 【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 从甚高分辨率 VHR 航空和卫星
  • 快速实现 WIFI MQTT通信详解

    WIFI MQTT接入ONE NET云平台 一 本例程实现功能介绍 二 云平台操作流程 三 硬件接线图 材料清单 四 完整代码 代码解析 五 代码实验现象 前言 MQTT是一种基于TCP的物联网通信协议 在物联网领域应用非常广泛 基本上所有
  • kafka/bin/kafka-run-class.sh: line 342: exec: java: not found

    本来jps看了下 kafka和zookeeper都起来了 手痒 非要换宝塔的进程守护管理器 选目录为 home kafka 命令为 home kafka bin zookeeper server start sh home kafka co
  • 投票同款特效样式

    先看效果 再看代码 查看更多
  • STM32实现扫频功能

    简介 我们都知道 在信号发生器中 有一个扫频模式 指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出 扫频模式支持线性扫频 对数扫频 和步进扫频三种方式 起始频率和终止频率 起始频率和终止频率是频率扫描的频率上限和下限 信号发生器总
  • DB2时间日期函数_悟sphenic_新浪博客

    DB2时间日期函数 gt DAYNAME 返回一个大小写混合的字符串 对于参数的日部分 用星期表示这一天的名称 例如 Friday DAYOFWEEK 返回参数中的星期几 用范围在 1 7 的整数值表示 其中 1 代表星期日 DAYOFWE
  • react获取当前路由

    使用useHistory import useLocation from react router const location useLocation const routerName gt console log location pa
  • URL缓存机制

    class LRUCache class Node int key int value Node pre Node post public Node public Node int key int value this key key th
  • 券商如何借助企业微信、小程序、视频号提高营收转化?

    近年来 小程序 视频号 企业微信联合打造了一个新的商业通信圈 越来越多的品牌及券商企业都入驻其中 如今 具有直连12 亿微信客户优势的企业微信 商品交易总额近3万亿的小程序和日活跃用户数量超5亿的视频号已在公域流量沉淀私域方面形成了双箭头联
  • 使用StringRedisTemplate进行redis连接操作

    1 引入jar 需要jar有三个 如下
  • pytest + yaml 框架 -22.validate 校验返回结果的几种方式

    前言 validate 校验返回结果的几种方式总结 环境要求 Python 大于等于3 8版本 低于python3 8版本不支持 Pytest 大于等于 7 2 0 pip 安装插件 最新版本v1 1 9 pip install pytes