当前位置: 首页 > news >正文

企业网站的建立不能缺少哪些细节/北京、广州最新发布

企业网站的建立不能缺少哪些细节,北京、广州最新发布,电商工资多少钱一个月,网站建设做微营销《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证8 导入官方契约测试集合9 契约测试集合的详细配置9.1 env-apiKey 的创建与设置9.2 env-workspaceId 的设置9.3 Mock 服务器及 env-server 的配置9.4 API 测试实例的配置…

book cover for the 2nd version

《API Testing and Development with Postman》最新第二版封面

文章目录

  • 第十三章 契约测试与 API 接口验证
    • 8 导入官方契约测试集合
    • 9 契约测试集合的详细配置
      • 9.1 env-apiKey 的创建与设置
      • 9.2 env-workspaceId 的设置
      • 9.3 Mock 服务器及 env-server 的配置
      • 9.4 API 测试实例的配置
      • 9.5 契约测试脚本的调试
    • 10 Postman 拦截器的用法
    • 11 契约测试的运维

写在前面
本文为第 13 章笔记的下篇,详细介绍了本书最新版中引入的契约测试模板的具体用法,并结合本地实测情况给出了大量截图。相信随着 Postman 官方对该模板的升级改造,具体的操作很可能和本文介绍的操作步骤有所不同,但这并妨碍我们了解契约测试的构建过程和相关细节。我们要学习的从来不是某个按钮的位置、某个脚本在哪儿书写,而是透过这些表象操作,能够从宏观层面构建完备的关于契约测试的知识体系。毕竟在 AI 时代的大背景下,我们应该学会主动和 AI 合作,不断调整自学的重点,不断更新 “重复造轮子” 的内涵。

(接上篇)

第十三章 契约测试与 API 接口验证

8 导入官方契约测试集合

虽然 API 标签页中的接口实例已经实现了 OpenAPI 规范和集合层的双向检查,但真正的契约测试还需要在请求前后以测试用例的形式确保各个接口的定义和功能相契合,还得要开发者针对不同的 API 集合编写大量性质相同的定制化脚本。正如第一版中看到的那样,这一步看似轻松,实现起来却非常繁琐。

为此,Postman 官方发布了一个专门用于契约测试的公共集合 Contract Test Generator,经过这几年的不断更新迭代,目前已经能够实现对目标集合实施无侵入式的契约测试,极大地省去了从零开始手写契约测试脚本的麻烦。该集合的灵感最初来自 GitHub 社区开发者 allenheltondev 于 2020 年 10 月 9 日贡献的一个开源项目 postman-contract-test-generator,由于解了大家的燃眉之急,开源后不久就被 Postman 官方复刻到 自己名下 进入长期维护并持续迭代。这就是开源的魅力——既方便了后来者,也让项目本身更加完善,同时也提高了开发者自身的影响力。本章唯一美中不足的,应该就是书中漏掉了大量的配置细节,实测时踩了不少的坑(当然也不排除从出书到实测这段时间差里,项目本身的更新迭代导致配置出现些许差异)。无论如何,我都将重新完整梳理一遍这个彩蛋级福利的用法,也算为开源社区略尽绵力吧。

首先从官方社区导入这个测试集合。在 Postman 顶部的搜索框中检索关键字 Contract Test Generator 就可以看到基于 OpenAPI v3.x 规范的测试集合 (Generator) Contract Tests - OAS3

图 13.9 在 Postman 的顶部搜索框检索契约测试生成工具

【图 13.9 在 Postman 的顶部搜索框检索契约测试生成工具】

点击后将打开对应的 API 首页,并通过右边的 Fork 按钮复刻到自己的帐号下:

图 13.10 从生成工具的文档首页点击 Fork 复刻到自己帐号下

【图 13.10 从生成工具的文档首页点击 Fork 复刻到自己帐号下】

然后在弹出的新页面确认 Fork 的相关配置,其中务必勾选与该集合关联的测试环境:

图 13.11 Fork 操作时务必勾选对应的测试环境(非常重要)

【图 13.11 Fork 操作时务必勾选对应的测试环境(非常重要)】

复制到自己名下后将在 Collection 导航页看到这样的结构:

图 13.12 复刻到自己帐号下看到的契约测试集合结构

【图 13.12 复刻到自己帐号下看到的契约测试集合结构】

9 契约测试集合的详细配置

该集合的工作原理也很简单,只要配置好测试环境中的相关参数,就能通过运行 Collection Runner 一次性得到目标集合的契约测试结果。当然,它只实现了契约测试最基本的校验逻辑,开发者可以在此基础上做进一步补充,比起从零开始编写已经好很多了。

以下是此次实测(截至 2025 年 2 月 5 日)需要补全的环境变量(先选中 Contract Test Environment 环境):

变量名变量值
env-apiKey当前个人帐号生成的有效 API 秘钥
env-workspaceId当前工作空间的唯一标识
env-server目标集合的服务器基础 URL,也可以是该集合对应的 Mock 服务器的基础 URL
env-apiId目标 API 的唯一标识
env-apiDefinitionId目标 API 定义唯一标识

书中只讲了前三个变量,其实还有很多隐含信息:

  • 为了配置示例 API 的 env-server,需要 先创建一个对应的 Mock 服务器,并填入该 Mock 服务器的 URL;否则使用导入时默认的 http://localhost:5000/budgeting/api 会报错;
  • 新版的 Generator 集合必须先发布一版 API,即指定一个 API 版本号,否则后面有个 Validate API In Workspace 请求也会报错;
  • 契约测试脚本中大量使用旧版 Postman 的断言写法,需要逐一改为最新的版本,导入必要的 npm 模块(例如 lodash 等);

下面逐一进行说明——

9.1 env-apiKey 的创建与设置

首先是 env-apiKey:为安全起见,生成的 Mock 服务器都设为私有服务器,用自己帐号生成的 API 秘钥进行加密。

图 13.13 点开 Postman 右上角的个人帐号图标,从浏览器进入对应的设置页面

【图 13.13 点开 Postman 右上角的个人帐号图标,从浏览器进入对应的设置页面】

图 13.14 找到 API keys 导航页,按 Generate API Key 按钮生成秘钥

【图 13.14 找到 API keys 导航页,按 Generate API Key 按钮生成秘钥】

图 13.15 输入一个秘钥名称,以便后续管理(如 DemoContractTesting)

【图 13.15 输入一个秘钥名称,以便后续管理(如 DemoContractTesting)】

图 13.16 复制秘钥妥善保管(注意:新生成的 API 秘钥只有一次机会可供复制,错过后只能重新生成)

【图 13.16 复制秘钥妥善保管(注意:新生成的 API 秘钥只有一次机会可供复制,错过后只能重新生成)】

图 13.17 秘钥生成后,可在列表中找到该记录,可从右边的隐藏菜单中重新生成或删除

【图 13.17 秘钥生成后,可在列表中找到该记录,可从右边的隐藏菜单中重新生成或删除】

然后就可以赋给 env-apiKey 变量(顺便将该变量的类型设为 secret):

img13.25

9.2 env-workspaceId 的设置

当前工作空间的 ID,从首页右侧的隐藏菜单项 Workspace info 获取:

img13.26

img13.27

img13.28

9.3 Mock 服务器及 env-server 的配置

找到 Collection 侧边栏,从测试集合 Budgeting API 的隐藏菜单中创建 Mock 服务器:

img13.29

img13.30

img13.31

然后填入环境变量:

img13.32

最后别忘了还要将该 URL 更新到 API 实例中的 YAML 定义文件中:

img13.33

以及最初导入 YAML 文件时自动创建的测试集合变量 baseUrl(这个坑非常隐蔽,浪费了很多次 Collection Runner 免费额度才发现问题):

img13.38

9.4 API 测试实例的配置

根据契约测试生成工具的最新版本,目标 API 实例需要先发布一个版本,具体操作如下:

img13.34

发布后的 API 实例首页如下图所示:

img13.35

接着,点击上图右侧的图标,找到 API 对应的唯一标识,以及 API 定义层的唯一标识(后续契约测试有用):

图 13.18 从 API 实例的详情信息栏找到对应 API 唯一标识与定义层标识

【图 13.18 从 API 实例的详情信息栏找到对应 API 唯一标识与定义层标识】

然后粘贴到环境变量中:

img13.37

9.5 契约测试脚本的调试

完成测试环境 Contract Test Environment 的配置后,为了提高 Collection Runner 的一次性通过率,接下来需要手动发送一遍契约测试集合中的每个请求,一边学习不同的测试脚本的写法,一边打开 Postman 的控制台,根据警告信息完善脚本。实测时发现的主要问题包括:

  • Using "_" is deprecated. Use "require('lodash')" instead.
    • 解决方案:新版 lodash 模块需要显式声明,需要在脚本开头处添加一句:const _ = require('lodash');
  • Using "postman.setNextRequest" is deprecated. Use "pm.execution.setNextRequest()" instead.
    • 解决方案:按提示改为最新版写法即可:pm.execution.setNextRequest()

接着,就可以启动 Collection Runner 了:

img13.39

【图 13.19 完成环境配置和脚本微调后,就可以启动契约测试集合的 Collection Runner 了】

第一次运行后,部分请求测试不通过:

图 13.20 首次运行后,部分请求校验未通过(有意为之)

【图 13.20 首次运行后,部分请求校验未通过(有意为之)】

根据断言提示,主要发现三类问题:

  1. Schema 对象名称的首字母没有大写:
    1. Schema 'item' begins with an uppercase letter | AssertionError: expected 'i' to equal 'I'
    2. Schema 'items' begins with an uppercase letter | AssertionError: expected 'i' to equal 'I'
    3. Schema 'itemId' begins with an uppercase letter | AssertionError: expected 'i' to equal 'I'
  2. 缺失 description 属性问题:Schema property 'item.transaction_date' has a description between 10 and 100 characters | AssertionError: expected { type: 'string', format: 'date' } to have property 'description'
  3. 缺失 example 属性问题:Schema property 'item.transaction_date' has an example | AssertionError: expected { type: 'string', format: 'date' } to have property 'example'

根据这些断言提示,回到 YAML 定义文件逐一修改后(重要提醒:不仅是定义的地方要改,所有引用了该定义的地方也要同步更新):

img13.42

再次运行 Runner

图 13.21 按要求修改 YAML 文件后,再次运行 Collection Runner 进行验证(全部通过测试)

【图 13.21 按要求修改 YAML 文件后,再次运行 Collection Runner 进行验证(全部通过测试)】

10 Postman 拦截器的用法

拦截器的作用:可用于捕获契约测试中实际用到的集合请求。

拦截器可作为逆向工程的一部分反观实际调用的接口请求,但由于需要安装 Chrome 插件,用户体验较差,仅供参考。

11 契约测试的运维

契约测试的主要目的:确保 API 提供者在修改 API 时不会违反接口契约。

责任划分:API 消费端可 偶尔运行 契约测试;主要责任仍在 供应端

契约测试的运行

  • 供应端:
    • 这些测试应作为 API 开发团队的构建流程的一部分运行。
    • 可参考第 9 章构建基于命令行的契约测试运行模式。
  • 消费端:
    • 不需要在每次更改时运行测试,因为用户界面的更改通常不会影响 API 的工作方式。
    • 可利用 Postman 的监视器机制定期检查 API 是否仍符合合同,参考第10章(使用 Postman 监控 API)。

契约测试失败的原因分析

  1. 存在 bug:需更新代码,修复 Bug。
  2. 需求变更:API 可能需要以违反契约的形式进行更改。此时需要相关方进行沟通并更新契约。

契约测试的共享

  • 必要性:合同测试需要由提供者和消费者共同访问和维护。
  • 共享方式
    • 创建一个专门的工作空间(Workspace)来存储和共享合同测试。
    • 设置工作空间的可见性为团队,并邀请相关人员加入。
    • 共享合同测试集合到该工作空间,并分配不同的角色权限(如管理员、查看者、编辑者)。
  • 注意事项:免费版 Postman 账户有请求共享限制,大量合同测试可能需要升级到付费计划。

后记
Postman 官方发布并长期维护的契约测试集合 (Generator) Contract Tests 极大地简化了 API 接口契约测试的难度,让测试人员和开发者有个可以学习参考的基础模板;尽管如此,也要清醒地意识到,想要真正发挥好契约测试的作用,还得多方参与,从长计议。毕竟当中的很多问题并非几行测试脚本就可以轻松解决的。

相关文章:

【玩转 Postman 接口测试与开发2_017】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(下)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证8 导入官方契约测试集合9 契约测试集合的详细配置9.1 env-apiKey 的创建与设置9.2 env-workspaceId 的设置9.3 Mock 服务器及 env-server 的配置9.4 API 测试实例的配置…...

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的:画热图,分区,给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…...

React图标库: 使用React Icons实现定制化图标效果

React图标库: 使用React Icons实现定制化图标效果 图标库介绍 是一个专门为React应用设计的图标库,它包含了丰富的图标集合,覆盖了常用的图标类型,如FontAwesome、Material Design等。React Icons可以让开发者在React应用中轻松地添加、定制各…...

Python sider-ai-api库 — 访问Claude、llama、ChatGPT、gemini、o1等大模型API

目前国内少有调用ChatGPT、Claude、Gemini等国外大模型API的库。 Python库sider_ai_api 提供了调用这些大模型的一个完整解决方案, 使得开发者能调用 sider.ai 的API,实现大模型的访问。 Sider是谷歌浏览器和Edge的插件,能调用ChatGPT、Clau…...

DeepSeek、哪吒和数据库:厚积薄发的力量

以下有部分来源于AI,毕竟我认为AI还不能替代,他只能是辅助 快速迭代是应用程序不是工程 在这个追求快速迭代、小步快跑的时代,我们似乎总是被 “快” 的节奏裹挟着前进。但当我们静下心来,审视 DeepSeek 的发展、饺子导演创作哪吒…...

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)

文章目录 引言1. 概述2. 领域驱动设计(DDD)分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构:洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构:解耦核心业务与外部系统4.1 六边形架…...

第 1 天:UE5 C++ 开发环境搭建,全流程指南

🎯 目标:搭建 Unreal Engine 5(UE5)C 开发环境,配置 Visual Studio 并成功运行 C 代码! 1️⃣ Unreal Engine 5 安装 🔹 下载与安装 Unreal Engine 5 步骤: 注册并安装 Epic Game…...

【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】

【华为OD-E卷 - 磁盘容量排序 100分(python、java、c、js、c)】 题目 磁盘的容量单位常用的有M,G,T这三个等级, 它们之间的换算关系为1T 1024G,1G 1024M, 现在给定n块磁盘的容量&#xff0c…...

【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)

编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...

5-Scene层级关系

Fiber里有个scene是只读属性,能从fiber中获取它属于哪个场景,scene实体中又声明了fiber,fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中,可以通过entity获取对应的scene root fiber等属性…...

JVM执行流程与架构(对应不同版本JDK)

直接上图(对应JDK8以及以后的HotSpot) 这里主要区分说明一下 方法区于 字符串常量池 的位置更迭: 方法区 JDK7 以及之前的版本将方法区存放在堆区域中的 永久代空间,堆的大小由虚拟机参数来控制。 JDK8 以及之后的版本将方法…...

本地部署 DeepSeek-R1:简单易上手,AI 随时可用!

🎯 先看看本地部署的运行效果 为了测试本地部署的 DeepSeek-R1 是否真的够强,我们随便问了一道经典的“鸡兔同笼”问题,考察它的推理能力。 📌 问题示例: 笼子里有鸡和兔,总共有 35 只头,94 只…...

请求响应(接上篇)

请求 日期参数 需要在前面加上一个注解DateTimeFormat来接收传入的参数的值 Json参数 JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 RequestBody 标识 通过RequestBody将JSON格式的数据封装到实体类…...

数组排序算法

数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据,通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据,教学用途InsertO(n)…...

防火墙的安全策略

1.VLAN 2属于办公区;VLAN 3属于生产区,创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…...

2025Java面试题超详细整理《微服务篇》

什么是微服务架构? 微服务框架是将某个应用程序开发划分为许多独立小型服务,实现敏捷开发和部署,这些服务一般围绕业务规则进行构建,可以用不同的语言开发,使用不同的数据存储,最终使得每个服务运行在自己…...

中位数定理:小试牛刀> _ <2025牛客寒假1

给定数轴上的n个点,找出一个到它们的距离之和尽量小的点(即使我们可以选择不是这些点里的点,我们还是选择中位数的那个点最优) 结论:这些点的中位数就是目标点。可以自己枚举推导(很好想) (对于 点的数量为…...

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调

Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D),旨在赋予预训练的大语言模型(…...

如何开发一个大语言模型,开发流程及需要的专业知识

开发大型语言模型(LLM)是一个复杂且资源密集的过程,涉及多个阶段和跨学科知识。以下是详细的开发流程和所需专业知识指南: 一、开发流程 1. 需求分析与规划 目标定义:明确模型用途(如对话、翻译、代码生成…...

【数据采集】基于Selenium采集豆瓣电影Top250的详细数据

基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…...

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的,而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8,它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…...

多无人机--强化学习

这个是我对于我的大创项目的构思,随着时间逐渐更新 项目概要 我们的项目平台来自挑战杯揭绑挂帅的无人机对抗项目,但是在由于时间原因,并未考虑强化学习,所以现在通过大创项目来弥补遗憾 我们项目分为三部分,分为虚…...

UE制作2d游戏

2d免费资产: Free 2D Game Assets - CraftPix.net 需要用到PaperZD插件 官网下载后启用即可 导入png素材 然后全选 - 创建Sprite 创建 人物基类 设置弹簧臂和相机 弹簧臂设置成旋转-90 , 取消碰撞测试 设置子类Sprite 拖到场景中 绑定设置输入映射,让角色移动跳跃 神似卡拉比…...

说一下JVM管理的常见参数

Java虚拟机&#xff08;JVM&#xff09;有许多常见参数&#xff0c;用于控制其行为和性能。以下是一些常见的JVM参数及其说明&#xff1a; 1. 内存管理参数 -Xms<size> START 设置初始堆内存大小。例如&#xff0c;-Xms512m表示初始堆大小为512MB。 -Xmx<size>…...

【FPGA】 MIPS 12条整数指令【2】

目录 仿真 代码 完整代码 实现slt 仿真 ori r1,r0,1100h ori r2,r0,0020h ori r3,r0,ff00h ori r4,r0,ffffh addi r5,r0,ffff slt r6,r5,r4 slt r6,r4,r3 代码 EX Slt:regcData ($signed(regaData)<$signed(regbData))?1b1:1b0; ID Inst_slt:be…...

机器学习--python基础库之Matplotlib (2) 简单易懂!!!

python基础库之Matplotlib&#xff08;2&#xff09; python基础库之Matplotlib0 准备1 散点图的绘制2 柱状图绘制3 其他 python基础库之Matplotlib 上篇文章机器学习–python基础库之Matplotlib (1) 超级详细!!!主要讲解了python的基础库matplotlib中绘图的流程以及折线图的…...

mybatis plus 持久化使用技巧及场景

mybatis plus提供了很多强大的持久化工具&#xff0c;新手容易对这些工具使用困难&#xff0c;下面我总结了一下mybatis plus持久化的使用技巧及使用场景。 一、持久化 官方文档&#xff1a;https://baomidou.com/guides/data-interface/ &#xff08;一&#xff09;通过ser…...

JVM监控和管理工具

基础故障处理工具 jps jps(JVM Process Status Tool)&#xff1a;Java虚拟机进程状态工具 功能 1&#xff1a;列出正在运行的虚拟机进程 2&#xff1a;显示虚拟机执行主类(main()方法所在的类) 3&#xff1a;显示进程ID(PID&#xff0c;Process Identifier) 命令格式 jps […...

记录 | 基于MaxKB的文字生成视频

目录 前言一、安装SDK二、创建视频函数库三、调试更新时间 前言 参考文章&#xff1a;如何利用智谱全模态免费模型&#xff0c;生成大家都喜欢的图、文、视并茂的文章&#xff01; 自己的感想 本文记录了创建文字生成视频的函数库的过程。如果想复现本文&#xff0c;需要你逐一…...

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测&#xff0c;到2025年全球 AI 安全解决方案市场规模将突破200亿美元&#xff0c;年复合增长率超过30%&#xff0c;而Gartn…...