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

【玩转 Postman 接口测试与开发2_017】第13章:在 Postman 中实现契约测试(Contract Testing)与 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 测试实例的配置…...

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…...

【人工智能】通用人工智能 AGI

AGI 是 Artificial General Intelligence 的缩写,中文翻译为通用人工智能。与我们常见的**特定人工智能(Narrow AI)**不同,AGI 是一个更高深、更具野心的目标。 AGI(人工通用智能)的定义 通用人工智能&am…...

基于PostGIS的省域空间相邻检索实践

目录 前言 一、相关空间检索函数 1、ST_touches函数 2、ST_Intersects函数 3、ST_Relate函数 4、区别于对比 二、空间相邻检索实践 1、省域表相关介绍 2、相关省域相邻查询 3、全国各省份邻居排名 三、总结 前言 在当今数字化时代,地理空间数据的高效管理…...

Java 2024年面试总结(持续更新)

目录 最近趁着金三银四面了五六家公司吧,也整理了一些问题供大家参考一下(适合经验三年左右的)。 面试问题(答案是我自己总结的,不一定正确): 总结: 最近趁着金三银四面了五六家公…...

JDK9新特性

文章目录 新特性:1.模块化系统使用模块化module-info.java:exports:opens:requires:provides:uses: 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量:/var…...

性能测试中的数据库连接池优化

目录 一、配置连接池参数 二、配置连接池数量 三、监控连接池 数据库连接池的意义是让连接复用,通过建立一个数据库连接池(缓冲区)以及一套连接的使用,分配,管理策略,使得该连接池中的连接可以得到高效&…...

1. 初识spark

背景: 作为一名开发人员,用内存处理数据是每天都在做的事情。内存处理数据最大的优势就是方便,快捷,可以很快得到结果,但是内存总是有瓶颈的,不管你运行代码的机器有多大的内存,总是有更大规模…...

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…...

Redis --- 使用zset处理排行榜和计数问题

在处理计数业务时,我们一般会使用一个数据结构,既是集合又可以保证唯一性,所以我们会选择Redis中的set集合: 业务逻辑: 用户点击点赞按钮,需要再set集合内判断是否已点赞,未点赞则需要将点赞数1…...

排序算法——快速排序

代码仓库: 1037827920/AlgorithmZoo 快速排序 算法步骤 选择基准元素,从数组中选择一个元素作为基准,通常选择方式有: 第一个元素最后一个元素中间元素随机选择 分区操作,将数组元素根据基准分为两部分,…...

有用的sql链接

『SQL』常考面试题(2——窗口函数)_sql的窗口函数面试题-CSDN博客 史上最强sql计算用户次日留存率详解(通用版)及相关常用函数 -2020.06.10 - 知乎 (zhihu.com) 1280. 学生们参加各科测试的次数 - 力扣(LeetCode&…...

手写MVVM框架-构建虚拟dom树

MVVM的核心之一就是虚拟dom树,我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称(英文大写)ele, // 对应真实节点children,…...

C++单例模式

单例模式是一种设计模式,它保证一个类只有一个对象。因此单例模式要私有化构造函数,禁用拷贝构造以及赋值重载。同时还要提供一个静态成员函数获取单例对象。 单例模式有两种实现方式:饿汉模式和懒汉模式 饿汉模式:创建静态单例…...

SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言

目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件: 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL(Data Definition Language):数据定义语言 1、操…...

RabbitMQ 可靠性投递

文章目录 前言一、RabbitMQ自带机制1、生产者发送消息注意1.1、事务(Transactions)1.2、发布确认(Publisher Confirms)1.2.1、同步1.2.2、异步 2、消息路由机制2.1、使用备份交换机(Alternate Exchanges)2.…...

Java常见的技术场景面试题

一、单点登录这块怎么实现的? 单点登录概述 单点登录:Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统 在以前的时候,一般我们就单系统,所有的功能都在同一个系统上。…...

使用 Postman 进行 API 测试:从入门到精通

使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…...

用python实现进度条

前言 在Python中,可以使用多种方式实现进度条。以下是几种常见的进度条格式的实现方法: 1. 使用 tqdm 库 tqdm 是一个非常流行的库,可以轻松地在循环中显示进度条。 from tqdm import tqdm import time# 示例:简单的进度条 fo…...

android 自定义通话录音

在 Android 开发中,实现通话录音功能通常涉及到对系统通话的拦截和录音。由于通话录音涉及到用户隐私和安全性,Android 系统对此有严格的限制和要求。在 Android 10(API 级别 29)及以上版本中,直接访问通话录音功能变得…...

WebSocket——环境搭建与多环境配置

一、前言:为什么要使用多环境配置? 在开发过程中,我们通常会遇到多个不同的环境,比如开发环境(Dev)、测试环境(Test)、生产环境(Prod)等。每个环境的配置和需…...

【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案

项目背景介绍 铁路货运企业需要对物流单进行长期存档,以便后续查询和审计。不同的物流单可能包含不同的关键信息,通过自定义指定多个区域进行识别重命名,可以使存档的图片文件名具有统一的规范和明确的含义。比如,将包含货物运单…...

在线教程丨YOLO系列10年更新11个版本,最新模型在目标检测多项任务中达SOTA

YOLO (You Only Look Once) 是计算机视觉领域中最具影响力的实时目标检测算法之一,以其高精度与高效性深受业界青睐,广泛应用于自动驾驶、安防监控、医疗影像等领域。 该模型最早于 2015 年由华盛顿大学研究生 Joseph Redmon 发布,开创了将目…...

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了 &…...

Ubuntu安装VMware17

安装 下载本文的附件,之后执行 sudo chmod x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle安装注意事项: 跳过账户登录的办法:断开网络 可能出现的问题以及解决…...

在Debian 12上安装VNC服务器

不知道什么标题 可以看到这个文章是通过豆包从国外网站copy的,先这样写着好了,具体的我有时间再补充,基本内容都在这里了。 在Debian 12上安装VNC服务器 简介 VNC(Virtual Network Computing,虚拟网络计算&#xf…...

设计模式Python版 外观模式

文章目录 前言一、外观模式二、外观模式示例三、抽象外观类四、抽象外观类示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&am…...

Selenium 浏览器操作与使用技巧——详细解析(Java版)

目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具,能够…...

论文解读:《基于TinyML毫米波雷达的座舱检测、定位与分类》

摘要 本文提出了一种实时的座舱检测、定位和分类解决方案,采用毫米波(mmWave)雷达系统芯片(SoC),CapterahCAL60S344-AE,支持微型机器学习(TinyML)。提出了波束距离-多普勒…...

e2studio开发RA2E1(5)----GPIO输入检测

e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…...

数据结构:队列篇

图均为手绘,代码基于vs2022实现 系列文章目录 数据结构初探: 顺序表 数据结构初探:链表之单链表篇 数据结构初探:链表之双向链表篇 链表特别篇:链表经典算法问题 数据结构:栈篇 文章目录 系列文章目录前言一.队列的概念和结构1.1概念一、动态内存管理优势二、操作效率与安全性…...

idea中git的简单使用

提交,推送直接合并 合到哪个分支就到先切到哪个分支...

Java中的object类

1.Object类是什么? 🟪Object 是 Java 类库中的一个特殊类,也是所有类的父类(超类),位于类继承层次结构的顶端。也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。 🟦Java里面除了Object类,所有的…...

html2canvas绘制页面并生成图像 下载

1. 简介 html2canvas是一个开源的JavaScript库,它允许开发者在用户的浏览器中直接将HTML元素渲染为画布(Canvas),并生成图像。以下是对html2canvas的详细介绍: 2. 主要功能 html2canvas的主要功能是将网页中的HTML元…...

Certum OV企业型通配符SSL

随着网络攻击手段的不断演变,仅仅依靠HTTP协议已无法满足现代企业对数据安全的需求。SSL证书,特别是经过严格验证的组织验证型SSL证书,成为了保护网站数据传输安全、提升用户信任度的标配。 一、Certum OV企业型通配符SSL概述 Certum&#…...

2024年Web前端最新Java进阶(五十五)-Java Lambda表达式入门_eclipse lambda(1),面试必备

对象篇 模块化编程-自研模块加载器 开源分享:【大厂前端面试题解析核心总结学习笔记真实项目实战最新讲解视频】 Arrays.sort(players, sortByName); // 1.3 也可以采用如下形式: Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2))); ??其…...

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…...

V103开发笔记1-20250113

2025-01-13 一、应用方向分析 应用项目: PCBFLY无人机项目(包括飞控和手持遥控器); 分析移植项目,应用外设资源包括: GPIO, PWM,USART,GPIO模拟I2C/SPI, ADC,DMA,USB等; 二、移植项目的基本…...

Page Assist - 本地Deepseek模型 Web UI 的安装和使用

Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…...

Cookie及Session---笔记

目录 Cookiecookie简介cookiesession的认证方式tpshop完整登录实现-cookie Sessionsession简介session自动管理cookietpshop完整登录实现-sessioncookie和session的区别获取响应结果指定内容 Cookie cookie简介 工程师针对HTTP协议是无连接无状态特性所设计的一种技术&#x…...

【Block总结】DASI,多维特征融合

论文信息 HCF-Net(Hierarchical Context Fusion Network)是一种新提出的深度学习模型,专门用于红外小目标检测。该论文于2024年3月16日发布,作者包括Shibiao Xu、ShuChen Zheng等,主要研究机构为北京邮电大学。该模型…...

LabVIEW的智能电源远程监控系统开发

在工业自动化与测试领域,电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作,存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网(IIoT)技术,实现电源设备…...

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿,命名为“PPT.pptx”(“.pptx”为扩展名)新建幻灯片 开始→版式“PPT_素材.doc…...

《迪拜AI展:探寻中东人工智能发展的璀璨新篇》

迪拜:AI 浪潮下的闪耀明珠 迪拜,这座位于阿拉伯半岛东部、波斯湾东南岸的城市,犹如一颗璀璨的明珠,在中东地区散发着独特的魅力。它是阿拉伯联合酋长国的第二大城市,也是迪拜酋长国的首府 ,凭借优越的地理位…...

axios如何利用promise无痛刷新token

目录 需求 需求解析 实现思路 方法一: 方法二: 两种方法对比 实现 封装axios基本骨架 instance.interceptors.response.use拦截实现 问题和优化 如何防止多次刷新token 同时发起两个或以上的请求时,其他接口如何重试 最后完整代…...

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

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

TensorFlow 简单的二分类神经网络的训练和应用流程

展示了一个简单的二分类神经网络的训练和应用流程。主要步骤包括: 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与部署 加载和应用已训练的模型 1. 数据准备与预处理 在本例中,数据准备是通过两个 Numpy 数…...

蓝桥杯备考:模拟算法之字符串展开

P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态 #include <iostream> #include <cctype> #include <algorithm> using namespace std; int p1,p2,p3; string s,ret; void add(char left,char right) {string tmp;for(char ch left1;…...

[创业之路-282]:《产品开发管理-方法.流程.工具 》-1- 优秀研发体系的特征、IPD关注的4个关键要素、IPD体系的7个特点

目录 一、优秀研发体系的特征 二、IPD关注的4个关键要素 1. 组织管理 2. 市场管理 3. 流程管理 4. 产品管理 三、IPD体系的7个特点 1、产品开发是投资行为&#xff1a; 2、基于市场的产品研发&#xff1a; 3、平台化开发&#xff0c;大平台&#xff0c;小产品&#x…...

Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践

title: Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践 date: 2025/2/5 updated: 2025/2/5 author: cmdragon excerpt: 随着 JavaScript 在服务器端编程中的兴起,Node.js 已成为构建高性能网络应用程序的重要平台。PostgreSQL 则以其强大的特性以及对复杂数据结构的…...