接口测试框架开发实践:断言模块封装

Postman接口测试之断言,全网最细教程没有之一! 在 postman 中我们是在Tests标签中编写断言,同时右侧封装了常用的断言,当然 Tests 除了可以作为断言,还可以当做后置处理器来编写一些后置处理代码,经常应用于:【1】获取当前接口的响应,传递给下一个接口 【2】控制多个接口间的执行顺序。1、状态码断言1)判断接口响应的状态码:Status code: code is 200 2)判断接口响应码是否与预期集合中的某个值一致 3)判断状态码名称(也就是状态码后面的描述)是否包含某个字符串:Status code:code name has 阅读详情

传统断言

看一下我们之前用过的例子。

登陆接口测试数据 TEST_LOGIN.yaml


  http:

   method: POST

   path: https://account.xinli001.com/login?next=https://www.xinli001.com/user

   headers:

   Content-Type: application/x-www-form-urlencoded; charset=UTF-8

   X-Requested-With: XMLHttpRequest

   body:

   payload: password=xxxxx&username=xxxxx%40163.com

  expected:

   response:

   message: 登陆成功

   code: 0

将登陆接口作为setup()定义在conftest.py文件




  #!/usr/bin/env python

  # -*- encoding: utf-8 -*-

  '''

  @File : testcase_001.py

  @Time : 2021/06/20 12:07:09

  @Author : 软件质量保障

  @wechat : ISTE1024

  @Email : byteflow@163.com

  @Blog : https://www.zhihu.com/people/iloverain1024

  @Copyright : 侵权必究

  '''

  import pytest

  import yaml

  import requests

  class RequestHandler:

   def __init__(self):

   """session管理器:维持会话,可以让我们在跨请求时保存某些参数"""

   self.session = requests.session()

   def httpcore(self, method, url, params=None, data=None, json=None, headers=None, **kwargs):

   return self.session.request(method,url, params=params, data=data, json=json, headers=headers,**kwargs)

   def close_session(self):

   """关闭session"""

   self.session.close()

  @pytest.fixture(scope='function')

  def login():

   data = yaml.safe_load(open('testcases/data/TEST_LOGIN.yaml', encoding='utf-8'))

   http = data['http']

   method = http["method"]

   url = http["path"]

   headers = http["headers"]

   json = http["body"]['payload']

   req = RequestHandler()

   req.httpcore(method, url=url, headers=headers, data=json)

   return req

而测试用例需要的测试数据文件TEST_DATA_002.yaml定义如下:


  - case: 测试登陆查询回答内容001

   http:

   query:

   method: GET

   path: https://m.xinli001.com/get-my-answers.json

   headers:

   User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36

   body:

   payload:

   expected:

   response:

   total: 3

   answer_id: '5903852'

   code: 0

定义测试用例:




  #!/usr/bin/env python

  # -*- encoding: utf-8 -*-

  '''

  @File : testcase_001.py

  @Time : 2021/06/20 12:07:09

  @Author : 软件质量保障

  @wechat : ISTE1024

  @Email : byteflow@163.com

  @Blog : https://www.zhihu.com/people/iloverain1024

  @Copyright : 侵权必究

  '''

  import pytest

  import yaml

  # 用例重载

  def data_reload(request, data_key):

   data = request[data_key]

   method = data["method"]

   url = data["path"]

   headers = data["headers"]

   body = data["body"]

   return method, url, headers, body

  # 用例集读取

  def get_test_data(test_data_path):

   case = [] # 存储测试用例名称

   http = [] # 存储请求对象

   expected = [] # 存储预期结果

   data = yaml.safe_load(open(test_data_path, encoding='utf-8'))

   # test = data['tests']

   for td in data:

   case.append(td.get('case', ''))

   http.append(td.get('http', {}))

   expected.append(td.get('expected', {}))

   parameters = zip(case, http, expected)

   return list(parameters)

  @pytest.mark.parametrize("case, http, expected", get_test_data('testcases/data/TEST_DATA_002.yaml'))

  def test_main(case, http, expected, login):

   # 数据准备,这块可以再单独封装一层

   method, url, headers, body = data_reload(http, 'query')

   # 发起请求

   query_res = login.httpcore(method, url=url, headers=headers, data=body)

   print(query_res.json())

   # 传统断言方式:提取响应结果数据与预期结果比较

   assert query_res.json()['code'] == expected['response']['code']

   assert query_res.json()['data']['total'] == expected['response']['total']

   assert query_res.json()['data']['list'][2]['answer_id'] == expected['response']['answer_id']

改进版断言

我们知道deepdiff库提供grep功能,可以查询预期值是否存在于实际响应值中,即expect⊆actual。例子如下:


  from deepdiff import grep

  obj = {1: [{'2': 'b'}, 3], 2: [4, 5000, 51]}

  result = obj | grep(5)

  print(result)

  >> {}

我们可以遍历预期JSON串中的每个Key的值是否包含于实际响应中。这样避免了提取响应信息的繁杂操作,写法如下:


  # 改进版

   for key, value in expected['response'].items():

   actual = query_res.json() | grep(value)

   assert actual != {}

断言结果如下:

如果我们修改一下预期值:


  - case: 测试登陆查询回答内容001

   http:

   query:

   method: GET

   path: https://m.xinli001.com/get-my-answers.json

   headers:

   User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36

   body:

   payload:

   expected:

   response:

   total: 3

   answer_id: '5903853'

   code: 0

断言结果:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

​

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

基于 MCP 协议的接口测试:发送请求与响应断言,测试工程师看过来 客户端服务器和资源。客户端:负责发送请求至 MCP 服务器。客户端可以是任何支持 MCP 协议的程序,比如测试脚本或自动化工具。服务器:接收客户端的请求,解析并处理这些请求,然后与资源交互。资源:由 MCP 服务器访问的实际目标,比如数据库、文件系统或外部 API。严密的访问控制和高效的资源管理。通过服务器作为中间层,能够确保只有经过授权的用户可以访问特定资源。基于 MCP 协议的接口测试解决方案,结合分层架构和灵活的工具设计,为测试工程师提供了高效、安全的接口测试能力。在。 阅读详情

相关推荐

接口测试用例数据驱动&高级断言_rest_assured

https://testerhome.com/topics/15161 https://github.com/reese0329/rest_assured idea 引入包 Alt+Enter 参考 https://testerhome.com/topics/11731 接口测试大纲 接口测试的价值 移动互联网公司的一般架构简化模拟 真实的后端服务 接口...

sinat_34766121的博客 2434

基于pytest+allure的自动化测试(四)requests、yaml、断言封装

前言 为了减少自动化过程中的冗余代码,我们把一些常用的类、方法封装成自己想要的方法、类,本文简单介绍python的requests封装get、post,根据需要可配合加密、解密、日志等组件,本文把响应时间和响应文本结合返回 封装requests # -*- coding: utf-8 -*- # @CreateTime : 2020/8/6 22:41 # @Author : tester_ye # @File : Requests.py import requests from Data impor

weixin_44894271的博客 2364

​接口测试框架开发实践6:断言模块封装

​前文说到DeepDiff这个Python库,可以解决全字段断言难、接口响应嵌套层次多导致的实际结果提取难的问题。本文给大家介绍一下如何将其结合自动化框架做更精准的断言。 DeepDiff详细介绍参考:Python好酷|JSON字段校验库-DeepDiff 传统断言 看一下我们之前用过的例子。 登陆接口测试数据 TEST_LOGIN.yaml http: method: POST path: https://account.xinli001.com/login?next=..

所寫即所思|一个阿里质量人对测试的所感所悟。 648

自动化测试框架Pytest(八)——断言

断言是一种除错机制,用于验证代码是否符合编码人员的预期。 pytest自带的assert断言有以下几种语法:​​​​​​​ import time # 测试类名必须以Test开头,并且不能有init方法 class Test1: # • assert xx :判断xx为真 # • assert not xx :判断xx不为真 # • assert a in b :判断b包含a # • assert a == b :判断a 等于b # • assert a !=

m0_58026506的博客 2159

海康威视iSC平台视频流对接:RTSP、HLS、WS三种协议到底该怎么选?

本文深入分析海康威视iSC平台视频流对接中RTSP、HLS和WebSocket三种协议的优缺点,帮助开发者根据实时性、兼容性和网络环境做出最优选择。特别适合综合安防管理平台的Web视频监控系统开发,提升用户体验和系统性能。

weixin_28365523的博客 692

EDSR图像超分辨程序复现(踩坑及解决记录)

EDSR图像超分辨程序复现(踩坑及解决记录)

Sunny_Coder的博客 3642

Day 11--robot api with yaml: RequestsLibrary之断言

robot api with yaml 简单断言

风起帆扬了 557

告别PlatformIO!用Arduino IDE搞定ESP32上的micro-ROS 2.0.5(Humble版)

本文详细介绍了如何从PlatformIO迁移到Arduino IDE以支持ESP32上的micro-ROS 2.0.5(Humble版)。内容涵盖环境配置、项目转换、常见问题解决及高级优化技巧,帮助开发者顺利过渡并充分利用Arduino IDE的官方支持优势。

weixin_33709590的博客 378

用更适合yaml的方式对requests响应进行断言

最近一直在捣鼓 gh action 和 k8s,学习了大量的 yaml 使用示例。不知不觉对 yaml 有了更深的感受,于是尝试做了一个新工具,旨在用更适合 yaml 的方式对 requests 响应进行断言理想中用于接口测试的 yaml 大概是这样子。

python_sanmu的博客 1416

瑞数jsvmp算法还原流程讲解

​ 又是很久没写文章了,今天水一篇文章吧,鉴于之前有看到过别人的文章被警告的案例,所以这篇文章就仅写一下还原瑞数vmp的大概流程吧(仅记录下自己还原的思路)

博客 6608

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

使用Python自带的assert模块进行接口测试结果断言封装

例如,我们可以使用assert.isinstance()函数来检查一个变量的类型是否为预期的类型,或者使用assert.not_equal()函数来检查两个变量的值是否不相等。通过编写自定义的断言函数和组合使用assert模块的各种功能,我们可以编写出更加丰富和实用的测试用例。我们可以通过编写自定义的断言函数来扩展assert模块的功能。在上面的代码中,我们定义了一个名为AssertUtil的类,该类包含了三个用于断言的方法:assert_code、assert_body和assert_in_body。

AI 爪客,专注 AI 智能体与 Skill 研发落地,斩获腾讯云、讯飞、小米等多场 AI 赛事奖项,分享 Agent 实战干货与工程化经验。 817

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3418

Python接口自动化测试:断言封装详解

Python中的断言封装主要涉及到了requests和jsonpath两个库的使用。通过这两个库,我们可以方便地发送HTTP请求,解析JSON数据,以及进行断言。希望这篇文章对于Python中断言封装的理解有所帮助。

nhb687096的博客 1058

《QGIS快速入门与应用基础》108:CGCS2000对应的投影坐标系

本文详细解析了CGCS2000地理坐标系对应的各类投影坐标系,包括高斯-克吕格3°带/6°带、UTM、地方独立投影和Web墨卡托投影。文章系统阐述了各投影类型的分带规则、参数设置、精度特性及适用场景,并提供了EPSG编码对照表和QGIS操作指南。通过"基准+投影"的绑定机制,这些投影坐标系实现了平面坐标与经纬度的精准转换,满足从大比例尺工程测量到Web地图服务等不同应用需求。内容涵盖投影原理、坐标格式、变形控制等关键技术要点,为GIS开发者和测绘人员提供了实用的参考信息。

LuckyHanMo的博客 543

同步调相机启动与并网控制技术方案

同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。

huanghm88的专栏 308

python断言assert实例_python接口测试assert断言

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!unittest.texttestrunner(verbosity=2).run(suite) 在一个测试用例中,会有期望结果这个说法,来验证这个测试用例是通过还是失败,在unittest的测试框架中,也提供了assert,我们先来看python中的断言assert,来修改下源码,看...

weixin_39722921的博客 1650

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Postman接口测试之断言

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。2)响应结果如果是json,断言响应体(json)中某个键名对应的值:Response body : JSON value check。3)断言响应体等于XXX字符串:Response body : is equal to a string。

shihuaizxc的博客 2038

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 线上系统遭遇性能Bug时的应急处理与长期优化策略
下一篇: 使用BS4和Selenium实现高级网页数据采集的实战指南(爬取知乎数据)
程序员可可
博客等级 码龄2年 3536粉丝 428原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值