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

接口测试——接口协议抓包分析与mock_L1

目录:

  1. 接口测试价值与体系
  2. 常见的接口协议
  3. 接口测试用例设计
  4. postman基础使用
  5. postman实战练习

1.接口测试价值与体系

接口测试概念

  • 接口:不同的系统之间相互连接的部分,是一个传递数据的通道
  • 接口测试:检查数据的交换、传递和控制管理过程

 

 接口测试的价值

  • 传统的测试方法成本急剧上升
  • 测试效率下降

 

分层测试体系

  • 越往上,发现 Bug 的时间越晚,成本越高
  • 接口测试(Service)相比 UI 测试,可以更早发现问题,更快的质量反馈

 

接口测试学习路线

 

接口测试与 mock 学习路线

形式章节描述
知识点接口测试价值与体系了解接口测试的知识体系与学习路线
知识点常见的接口协议了解常见接口协议、重点掌握 HTTP 协议
知识点接口测试用例设计掌握接口测试用例设计思路
知识点postman 基础使用掌握 postman 的安装和基础使用
实战postman 实战练习使用 postman 完成接口测试
知识点抓包工具 charles掌握 charles 的安装和基础配置
知识点抓包工具 fiddler掌握 fiddler 的安装和基础配置
知识点抓包工具证书配置抓包工具证书配置 https 协议数据抓包
实战App 抓包实战练习对雪球实现抓包
实战接口测试实战练习结合 postman 完成对宠物商店的接口测试
知识点弱网测试使用 charles 完成弱网测试
知识点mock 的价值与意义了解 mock 测试的价值与意义
实战mock 实战练习雪球 mock 实战练习
知识点使用 curl 发送请求【选修】了解 curl 命令的参数
知识点tcpdump 与 wireshark 的使用【选修】了解 tcpdump 与 wireshark 的基本使用

2.常见的接口协议

网络模型

 OSI七层模型:

  1. 物理层:物理层负责传输比特流,即0和1的电信号或光信号。它涉及到电气、机械和定时接口的规范,如电缆、集线器和中继器的使用。这一层的主要目的是确保原始数据可以在各种物理媒体上传输。
  2. 数据链路层:数据链路层负责将比特流组合成帧,并对帧进行错误检查和寻址。它定义了如何在网络硬件之间传输帧,包括如何使用物理层提供的服务来传输帧。这一层还包括诸如以太网、令牌环和点对点协议等具体的协议。
  3. 网络层:网络层负责将数据包从源地址发送到目的地址。它处理路由和转发,负责在数据链路层的基础上选择最佳路径,并将数据包从一个网络传输到另一个网络。网络层协议包括互联网协议(IP)、互联网控制消息协议(ICMP)和传输控制协议(TCP)。
  4. 传输层:传输层负责在源端和目的端之间建立、管理和终止会话。它将数据分段并重新组装,以确保数据的完整性和可靠性。同时,它还提供了错误检查和流量控制功能。传输层协议主要有传输控制协议(TCP)和用户数据报协议(UDP)。
  5. 会话层:会话层负责建立、管理和终止网络连接上的会话。它负责同步和对话控制,以及数据交换和分布式事务的处理。会话层还包括诸如远程过程调用(RPC)和SQL等协议。
  6. 表示层:表示层负责对数据进行编码和解码,以确保发送方和接收方之间的数据格式一致。它处理诸如数据压缩、加密和解密等数据转换操作。表示层协议包括MIME、TLS和SET等。
  7. 应用层:应用层负责处理用户和应用程序之间的通信。它为用户提供了网络服务接入点,允许应用程序使用网络进行通信。应用层协议包括HTTP、FTP、SMTP、DNS和Telnet等,这些协议为用户提供了访问网络资源的接口。

TCP/IP四层模型:

  1. 网络接口层(比特):这一层是物理层和数据链路层的统称,负责在物理媒体上传输原始的比特流。主要涉及电缆、集线器和中继器等硬件设备的规范和管理。
  2. 网络层(数据帧):网络层负责将数据包从源地址发送到目的地址。它处理路由和转发,负责在数据链路层的基础上选择最佳路径,并将数据包从一个网络传输到另一个网络。本层的功能通常由IP协议来实现。
  3. 传输层(数据包):传输层负责在源端和目的端之间建立、管理和终止会话。它将数据分段并重新组装,以确保数据的完整性和可靠性。同时,它还提供了错误检查和流量控制功能。本层的功能通常由TCP或UDP协议来实现。
  4. 应用层(数据段):应用层负责处理用户和应用程序之间的通信。它为用户提供了网络服务接入点,允许应用程序使用网络进行通信。本层的协议非常丰富,包括HTTP、FTP、SMTP、DNS和Telnet等,这些协议为用户提供了访问网络资源的接口。

 五层体系结构:

  1. 应用层:这一层包括了所有能与用户直接交互的程序,比如网页浏览器、电子邮件客户端、聊天工具等等。应用层的协议包括HTTP、FTP、SMTP、POP3、IMAP等。
  2. 传输层:这一层的任务是确保数据能够在源端和目的端之间进行交换。传输层协议包括TCP和UDP两种,其中TCP是一种基于连接的协议,能够确保数据在发送端和接收端之间传输完整;而UDP则是一种无连接协议,它不会确保数据在发送端和接收端之间传输完整。
  3. 网络层:网络层负责确定数据包在网络中的路径,其协议包括IP、ICMP和ARP等。IP协议负责将数据包发送到正确的目的地;ICMP协议负责报告网络中的问题,例如丢失的数据包;ARP协议用于在网络中查找IP地址。
  4. 数据链路层:这一层的任务是在两台计算机之间传输数据。常见的协议包括以太网和无线局域网,以太网是最常用的数据链路层协议,它使用网线将计算机连接到网络;无线局域网使用无线信号将计算机连接到网络。
  5. 物理层:这一层包括了所有物理媒体,比如电缆、集线器、中继器等等。物理层的协议包括RS-232、USB和Fiber Channel等,RS-232是一种通过串行线将计算机连接到网络的协议;USB是一种通过USB接口将计算机连接到网络的协议;Fiber Channel是一种通过光纤将计算机连接到网络的协议。

常见接口协议

 

RPC 协议

  • RPC(Remote Procedure Call)
  • 以本地代码调用的方式实现远程执行
  • 主要用于公司内部的服务调用
  • 优点:传输效率更高、性能损耗更低、自带负载均衡策略、更好的服务治理能力
  • 常见的 RPC 协议
    • Dubbo:Java 基础之上的高性能 RPC 协议
    • gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB 是一个语言中立、平台中立的数据序列化框架
    • Thrift:与 gRPC 类似的多语言 RPC 框架

 HTTP 协议

  • 请求
    • 请求行:method url protocol
    • 请求方法:GET、POST、PUT、DELETE、HEAD
    • 请求头: Host Cookie User-Agent
    • 请求参数 query
    • 请求体:JSON XML FORM
  • 响应:
    • 响应状态行
    • 响应头
    • 响应体

URI 和 URL

  • URI,统一资源标识符,用来唯一的标识一个资源。
  • URL,统一资源定位符,它是一种具体的 URI
  • URL 结构:https://www.baidu.com/s?wd=海贼王&rsv_spt=1
    1. 协议:http
    2. 域名:www.baidu.com
    3. 端口:跟在域名后面,域名和端口之间使用“:”作为分隔符,非必须,如果省略端口部分将采用默认端口
    4. 路径:/s
    5. 请求参数:wd=海贼王&rsv_spt=**1

HTTP 请求报文

> GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
> Host: baidu.com
> Accept-Encoding: deflate, gzip
> Connection: keep-alive
> Pragma: no-cache
> Cache-Control: no-cache
> User-Agent: Mozilla/5.0 
(Macintosh; Intel Mac OS X 10_15_0)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36
> Accept: image/webp,image/apng,image/*,*/*;q=0.8
> Referer: https://sougou.com/
> Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
> Cookie: user_id=xx;_homeland_session=xx;
>

 HTTP 响应报文

< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 12 Mar 2020 09:13:44 GMT
< Content-Type: image/png
< Content-Length: 11390
< Connection: keep-alive

 HTTP 响应状态码

  • 1xx 临时响应,表示通知信息,请求收到了或正在进行处理
  • 2xx 表示成功,接受或知道了
    • 200 成功
  • 3xx 表示重定向,要完成请求还必须才去进一步的行动
    • 301 永久移动
    • 302 临时移动
  • 4xx 表示客户端请求错误
    • 403 未授权
    • 404 未找到
  • 5xx 表示服务端错误
    • 500 服务器内部错误
    • 503 服务不可用

RESTful 架构

  • Restful:Representational State Transfer
  • 借助于 HTTP 协议的基本请求方法代表资源的状态切换
    • GET:获取资源
    • POST:新增或者更新
    • PUT:更新资源
    • DELETE:删除资源

3.接口测试用例设计

接口测试流程

接口测试用例设计思路

 

接口测试用例要素

  • 用例名称
  • 接口地址
  • 请求方式
  • 前置条件
  • 请求头部
  • 请求参数
  • 响应状态码
  • 预期响应结果 

4.postman基础使用

Postman 介绍

  • 快速构建请求
  • 提供响应结果的比较功能
  • 查看测试结果
  • 批量运行
  • 设置环境变量

Postman 安装

  • 官网下载地址
    • https://www.postman.com/downloads

Postman 使用

  • 发送 GET 请求
    • 新建请求
    • 填写请求方式:GET
    • 填写请求参数: para_key = para_value
  •  发送 POST 请求
    • 请求方式:POST
    • 请求参数
      • FORM 格式:Body –> form-data
        • JSON 格式:Body –> raw –> JSON
      • 文件格式:Body –> form-data –> File

 操作头信息

  • 添加请求头
  • 修改请求头

 

查看接口响应

  • 响应体
  • 响应头
  • 响应状态

5.postman实战练习

测试流程:

  • 宠物商店接口文档分析
  • 接口测试用例设计
  • Postman 完成接口测试

宠物商店接口文档分析

  • 接口文档:https://petstore.swagger.io
  • 宠物的增删改查

接口测试用例设计

  • 宠物的增删改查冒烟测试用例

 

文档地址:template: 用来存放开发模版 - Gitee.com 

 Postman 完成接口测试

  • 创建测试集
  • 编写断言
  • 运行测试集
  • 查看测试结果 

新增宠物 

 

查询宠物

 

更新宠物:

 

删除宠物:

断言

  • 验证响应状态码
  • 验证响应体中是否包含某个字符串
  • 验证 JSON 中的某个值是否等于预期的值
  • 验证响应体是否与某个字符串完全相同
  • 验证响应头信息中的 Content-Type 是否存在
  • 验证响应时间是否小于某个值
// Status Code:Code is 200
// 验证响应状态码
pm.test("响应状态码为 200", function () {pm.response.to.have.status(200);
});// Response Body:contains string 
// 验证响应体中是否包含某个字符串
pm.test("响应体中包含预期的字符串", function () {pm.expect(pm.response.text()).to.include("doggie");
});// Response Body:JSON value check
// 验证 JSON 中的某个值是否等于预期的值
pm.test("宠物名称为 doggie", function () {var jsonData = pm.response.json();pm.expect(jsonData[0].name).to.eql("doggie");
});// Response Body:Is equal to a string
// 验证响应体是否与某个字符串完全相同
pm.test("响应体正确", function () {pm.response.to.have.body("response_body_string");
});// Response Body:Content-Type header check
// 验证响应头信息中的 Content-Type 是否存在
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});// Response time is less than 200ms
// 验证响应时间是否小于某个值
pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(200);
});

新增宠物断言:

json压缩转义成字符串:

 

查询宠物断言:

更新宠物断言:

json压缩转义成字符串:

删除宠物断言:

 运行测试集

  • 测试集页面 -> Run 按钮

 

宠物商店运行结果:

 

查看测试结果:

 

变量

  • Postman 中变量的种类与作用域
    • Data:在测试集中上传的数据
    • Environment:环境范围
    • Collection:集合范围
    • Global:全局范围
    • Local:在脚本中设置的变量

 变量定义

  • 全局变量:Environments -> Globals
  • 测试集变量:测试集页面 -> Variables
  • 环境变量:Environments -> +

 

全局变量: 

全局变量的使用:

变量的使用

  • 请求 URL, Params 参数或 Body 表格或JSON/XML 文本中通过 {{变量名}} 使用
  • 在 Pre-request Script 和 Tests 脚本中使用封装好的语句获取或者设置对应变量

 全局变量的使用:

Pre-request Script

在脚本中获取全局变量 

 

测试集变量:

测试集变量的使用:

 

环境变量

环境变量的使用:

 变量的优先级

  • 优先级从高至低为:Data -> Enviroment -> Collection -> Global -> Local

相关文章:

接口测试——接口协议抓包分析与mock_L1

目录&#xff1a; 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口&#xff1a;不同的系统之间相互连接的部分&#xff0c;是一个传递数据的通道接口测试&#xff1a;检查数据的交换、传递和控制…...

四种常用的自动化测试框架

一直想仔细研究框架&#xff0c;写个流水账似的测试程序不难&#xff0c;写个低维护成本的测试框架就很难了&#xff0c;所以研究多种测试框架还是很有必要的&#xff0c;知道孰优孰劣&#xff0c;才能在开始编写框架的时候打好基础&#xff0c;今天读到了KiKi Zhao的翻译文章&…...

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…...

Unity 安装及运行MLAgents

1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…...

LightDB-A 兼容oracle支持mod操作符

LightDB-A 兼容oracle支持mod操作符 LightDB-A 为了兼容oracle&#xff0c;从23.3版本开始支持mod操作符&#xff0c;其语义同 ‘%’ 操作符&#xff0c;使用案例如下&#xff1a; select 5 mod 2;?column? ----------1 (1 row)select 0 % 0; ERROR: division by zerosel…...

SpringMVC之自定义注解

目录 一、Java注解 1.1 注解简介 1.2 注解分类 1.3 JDK基本注解 1.4 JDK元注解 1.5 自定义注解 1.5.1 标记注解 1.5.2 元数据注解 1.6 如何自定义注解 二、自定义注解的基本案例 2.1 案例一&#xff08;获取类、方法以及属性上的注解&#xff09; 2.1.1 Ingerited的…...

QT:使用普通按钮、网格布局管理器、标签、行编辑器、水平布局管理器、垂直布局管理器做一个小项目

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //普通按钮 #include <QGridLayout> //网格布局管理器 #include <QLabel> //标签 #include <QLineEdit> //行编辑器 #include <QHBoxLayo…...

【小沐学写作】程序员必备技能:在线协作文档汇总

文章目录 1、简介2、微软Office在线文档2.1 功能简介2.2 使用费用2.3 用户体验 3、石墨文档3.1 功能简介3.2 使用费用 4、腾讯文档4.1 功能简介4.2 使用费用 5、语雀5.1 功能简介5.2 使用费用 6、飞书6.1 功能简介6.2 使用费用 7、印象笔记7.1 功能简介7.2 使用费用 结语 1、简…...

「工具|数据接口」免费公开的REST API 如何借助github搭建自己的fake API接口

本文主要介绍日常开发、测试、教学或者分享中&#xff0c;可能遇到的模拟数据问题。分享免费开发的测试数据接口&#xff0c;以及如何利用github快速搭建定制化的接口数据&#xff0c;避免使用真实数据的风险以及自己现编数据的麻烦。 文章目录 一、场景说明二、免费公开的Fak…...

leetcode 18. 四数之和

给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 < a,…...

树上背包问题动态规划

目录 树状动态规划概述 示例 求解思路 树状动态规划概述 树状动态规划&#xff08;Tree DP&#xff09;是一种在树结构上进行动态规划的方法。在树状DP中&#xff0c;我们利用树的特殊结构性质&#xff0c;通过递归地向下更新子节点的状态&#xff0c;最终得到整个树的最…...

linux查看进程对应的线程(数)

首先&#xff0c;top或ps查看进程列表&#xff0c;确定要查看的进程pid&#xff0c;如下面40698 查看进程的线程情况 查看进程&#xff1a;top -p 40698 查看线程&#xff1a;top -p 40698 -d 3 -H 其中-d是刷新频率 可看到此进程共211个线程&#xff0c;运行中的是211个。…...

Python中的桌面应用开发库有哪些?

Python中有几个受欢迎的桌面应用开发库。以下是其中一些&#xff1a; Tkinter&#xff1a;这是Python的标准GUI库&#xff0c;它提供了构建简单的桌面应用程序的基本组件和功能。 PyQt&#xff1a;这是一个成熟的、功能强大的跨平台图形用户界面框架&#xff0c;它是Python绑定…...

【大数据】Neo4j 图数据库使用详解

目录 一、图数据库介绍 1.1 什么是图数据库 1.2 为什么需要图数据库 1.3 图数据库应用领域 二、图数据库Neo4j简介 2.1 Neo4j特性 2.2 Neo4j优点 三、Neo4j数据模型 3.1 图论基础 3.2 属性图模型 3.3 Neo4j的构建元素 3.3.1 节点 3.3.2 属性 3.3.3 关系 3.3.4 标…...

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明&#xff1a; 1. 博主电脑为Windows11操作系统&#xff0c;亲测有效&#xff0c;修改后无任何影响&#xff0c;软件都可以正常运行&#xff01; 2. Windows10系统还不知道可不可行&#xff0c;因为Windows11的计算机管理中没有本地用户和组&#xff0c;博主在csdn上看到很…...

Python正则表达式(re)

正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为…...

【PyTorch 08】如果要手动安装对应的包

例如有时候我们要下载 PyG &#xff0c;但是需要手动下载&#xff0c;需要进行以下步骤&#xff1a; 网站链接&#xff1a;https://data.pyg.org/whl/ 首先查看当前安装好的Pytorch版本和对应的cuda版本 1. pip list&#xff1a;查看torch版本 2. torch.version.cuda&#xf…...

黑马JVM总结(十二)

&#xff08;1&#xff09;五种引用_强软弱 实线箭头表示强引用&#xff0c;虚心线表示软弱虚终结器引用 在平时我们用的引用&#xff0c;基本都为强引用 &#xff0c;比如说创建一个对象通过运算符赋值给了一个变量&#xff0c;那么这个变量呢就强引用了刚刚的对象 强引用的…...

彻底搞懂线程池原理以及创建方式

1. 为什么要使用线程池 在实际使用中&#xff0c;线程是很占用系统资源的&#xff0c;如果对线程管理不善很容易导致系统问题。因此&#xff0c;在大多数并发框架中都会使用线程池来管理线程&#xff0c;使用线程池管理线程主要有如下好处&#xff1a; 降低资源消耗。通过复用…...

FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地

FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地 0、 界面预览1、创建一个话务台2、创建PBX SIP中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO 网关相关信息6、设置FXO网关端口组呼入号码7、设置FXO网关的SIP中继8、设置FXO网关呼叫…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...