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

聊一聊接口自动化测试断言处理策略

目录

一、断言设计原则

1.1精准性

1.2可维护性

1.3容错性

二、常见断言类型及实现

2.1基础验证

2.2响应体验证

2.3业务逻辑验证

2.4异常场景验证

2.5数据库断言

三、断言策略

3.1 精准断言 vs 模糊断言

3.2关键字段优先

3.3数据动态处理

四、多断言处理

4.1单用例多断言

4.2软断言(Soft Assertion)

五、工具与框架支持

5.1 断言库

5.2 JSON Schema验证

5.3 Postman/JMeter断言

5.4错误处理与日志

六、进阶处理技巧

6.1 动态断言

6.2 自定义断言方法

6.3性能断言


在进行接口自动化测试中,要验证接口执行后是否符合预期结果,其中的断言处理是比较关键步骤。在进行断言处理的时候,可以分为以下几种断言形式比如状态码、响应体结构、字段值、响应时间,还有数据库的数据是否正确。

什么时候应该验证整个响应体,什么时候只需要检查关键字段,也是值得考虑的情况。在冒烟测试中可能只检查关键字段,而在全面验证时需要更全面的检查。

如何处理动态数据,比如时间戳或生成的ID。这时候可能需要用正则表达式或者忽略某些字段,或者从响应中提取数据用于后续测试,有时候一个测试用例需要多个断言,那么如何处理多个断言呢?比如是否在一个测试用例中执行多个断言,或者如何处理断言失败后的流程。可能有些测试框架支持多断言,这样即使一个断言失败,其他断言还会继续执行,方便一次看到所有问题。

性能方面的断言,比如响应时间是否在可接受范围内。或者安全方面的断言,比如检查某些敏感字段是否被正确屏蔽,还需要考虑数据库断言,即接口操作后的数据是否正确写入数据库。这时候需要连接数据库,执行查询,并对结果进行断言。但这也可能带来维护成本,比如测试环境的数据库状态可能不稳定。

如何处理动态数据,比如时间戳或者随机生成的token,这时候可能需要用正则表达式或者忽略某些字段。另外,异常情况的处理也很重要,比如网络错误或者超时,这时候断言应该如何设计,还要考虑断言的灵活性和可维护性,比如将预期值提取到配置文件或数据库中,避免硬编码。还有日志记录和报告生成,方便后续分析测试结果等等。

一、断言设计原则

1.1精准性

仅断言关键业务字段,避免过度断言(如时间戳、动态ID等无关字段)

使用正则表达式匹配动态内容(如\d{4}-\d{2}-\d{2}匹配日期格式)

1.2可维护性

将预期值提取到配置文件/数据库,避免硬编码

使用分层断言(基础验证 → 业务逻辑验证 → 性能验证)

1.3容错性

对非关键字段允许部分匹配(如JSON Path模糊查询)

设置合理的浮点数误差范围(如金额计算)

二、常见断言类型及实现

2.1基础验证

状态码断言

验证HTTP状态码是否符合预期(如200、404、500等):

python

assert response.status_code == 200

响应时间

python

assert response.elapsed.total_seconds() < 3  # 接口响应时间<3秒

字段值断言

验证关键字段的具体值:

python

assert response.json()["status"] == "success"assert response.json()["data"]["email"].endswith("@example.com")

2.2响应体验证

JSON结构验证

检查响应体是否符合预期结构(如字段存在性、类型等):

python​​​​​​​

response_data = response.json()assert "user_id" in response_dataassert isinstance(response_data["age"], int)

python​​​​​​​

assert "data" in response.json()  # 检查关键字段存在性assert response.json()["code"] == 0  # 业务状态码

数据一致性

python​​​​​​​

expected = {"id": 123, "name": "test_user"}assert response.json()["data"] == expected  # 精确匹配

动态值处理

python​​​​​​​

import reassert re.match(r"^\d{10}$", response.json()["token"])  # 正则匹配动态token

XML/HTML验证

使用XPath或正则表达式验证内容:

python

assert "<title>Login Page</title>" in response.text

2.3业务逻辑验证

数据关联性

python​​​​​​​

# 创建订单后验证订单号唯一性order_id = response.json()["order_id"]assert len(str(order_id)) == 18  # 校验订单号长度

状态流转

python​​​​​​​

# 支付接口调用后状态应变为PAIDassert get_order_status(order_id) == "PAID"

2.4异常场景验证

错误码断言

python

assert response.json()["error_code"] == "INVALID_PARAM"

错误信息匹配

python

assert "用户名不能为空" in response.json()["message"]

2.5数据库断言

验证接口操作是否影响数据库(如插入、更新数据):

python​​​​​​​

db_result = query_db("SELECT count(*) FROM users WHERE name='lee'")assert db_result == 1

三、断言策略

3.1 精准断言 vs 模糊断言

精准断言:严格匹配响应内容(适用于关键业务逻辑)。

模糊断言:忽略动态数据(如时间戳、随机ID),使用正则或占位符:

python​​​​​​​

import reassert re.match(r"\d{4}-\d{2}-\d{2}", response.json()["created_at"])

3.2关键字段优先

优先验证业务核心字段,避免过度断言导致用例脆弱:

python​​​​​​​

# 仅验证关键字段,忽略次要字段assert response.json()["order_id"] == expected_order_idassert response.json()["total_price"] == 100.0

3.3数据动态处理

提取动态数据:将动态值(如生成的ID)保存为变量供后续用例使用:

python

user_id = response.json()["user_id"]

忽略无序数据:对列表数据排序后再断言:

python

assert sorted(response.json()["items"]) == sorted(expected_items)

四、多断言处理

4.1单用例多断言

在一个测试用例中执行多个断言,确保全面覆盖:

python

def test_create_user():    response = create_user()    assert response.status_code == 201    assert response.json()["username"] == "test_user"    assert response.json()["is_active"] is True

4.2软断言(Soft Assertion)

即使某个断言失败,仍继续执行后续断言(需框架支持,如Python的pytest-check):

python

from pytest_check import checkdef test_api():    response = call_api()    with check:        assert response.status_code == 200    with check:        assert "error" not in response.json()

五、工具与框架支持

5.1 断言库

Python:pytest(内置assert)、unittest、jsonschema(验证JSON结构)。

JavaScript:chai、jest。

Java:TestNG、AssertJ。

5.2 JSON Schema验证

使用JSON Schema严格验证响应结构:

python​​​​​​​

from jsonschema import validateschema = {    "type": "object",    "properties": {        "user_id": {"type": "number"},        "email": {"type": "string", "format": "email"}    },    "required": ["user_id", "email"]}validate(response.json(), schema)

5.3 Postman/JMeter断言

Postman:通过Tests脚本编写断言:​​​​​​​

javascriptpm.test("Status code is 200", () => pm.response.to.have.status(200));pm.test("Response contains token", () => pm.expect(pm.response.json().token).to.exist);

JMeter:使用JSON Extractor提取数据,Response Assertion验证结果。

5.4错误处理与日志

明确错误信息:在断言中附加错误描述,方便排查:

python

assert response.status_code == 200, f"Expected 200, got {response.status_code}"

记录响应内容:断言失败时打印响应体:​​​​​​​

#pythonif response.status_code != 200:    print(f"Response body: {response.text}")    assert False

六、进阶处理技巧

6.1 动态断言

环境感知

python​​​​​​​

# 根据测试环境动态调整预期值expected_host = "api.test.com" if env == "test" else "api.prod.com"assert response.request.url.startswith(f"https://{expected_host}")

数据驱动断言

python​​​​​​​

# 从CSV/Excel读取预期值expected_value = read_test_data("case123.csv")["expected"]assert actual_value == expected_value

6.2 自定义断言方法

python​​​​​​​

def assert_json_contains(response, required_fields):    """验证响应体包含所有必需字段"""    actual_fields = set(response.json().keys())    missing = required_fields - actual_fields    assert not missing, f"Missing fields: {missing}"# 使用示例assert_json_contains(response, {"code", "message", "data"})

6.3性能断言

python

# 使用Locust进行性能压测时的断言from locust import HttpUser, task, betweenclass WebsiteUser(HttpUser):    wait_time = between(1, 5)    @task    def check_api(self):        with self.client.get("/api/data", catch_response=True) as response:            if response.elapsed.total_seconds() > 2:                response.failure("Response time exceeded threshold")

相关文章:

聊一聊接口自动化测试断言处理策略

目录 一、断言设计原则 1.1精准性 1.2可维护性 1.3容错性 二、常见断言类型及实现 2.1基础验证 2.2响应体验证 2.3业务逻辑验证 2.4异常场景验证 2.5数据库断言 三、断言策略 3.1 精准断言 vs 模糊断言 3.2关键字段优先 3.3数据动态处理 四、多断言处理 4.1单用…...

C# 实现列式存储数据

C#实现列式存储数据指南 一、列式存储概述 列式存储(Columnar Storage)是一种数据存储方式&#xff0c;它将数据按列而非行组织。与传统的行式存储相比&#xff0c;列式存储在以下场景具有优势&#xff1a; ​​分析型查询​​&#xff1a;聚合计算、分组统计等操作效率更高…...

vscode中设置eslint保存时自动格式化未生效

vscode中设置eslint保存时自动格式化未生效 设置一 设置二 上述设置二未勾选导致未生效...

力扣HOT100——207.课程表

你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如…...

开源协议全解析:类型、选择与法律风险规避指南

[TOC] 在当今开源软件主导的技术生态中&#xff0c;开源协议&#xff08;Open Source License&#xff09;是决定项目能否被商业使用、二次开发的关键法律文件。据统计&#xff0c;GitHub上超过70%的项目使用某种形式的开源协议&#xff0c;但其中近30%存在协议兼容性问题。本…...

Android学习总结之自定义view设计模式理解

面试题 1&#xff1a;请举例说明自定义 View 中模板方法模式的应用 考点分析 此问题主要考查对模板方法模式的理解&#xff0c;以及该模式在 Android 自定义 View 生命周期方法里的实际运用。 回答内容 模板方法模式定义了一个操作的算法骨架&#xff0c;把一些步骤的实现延…...

Kubernetes Ingress 深度解析

Kubernetes Ingress 深度解析 一、Ingress 基本概念 Ingress 是 Kubernetes 中管理外部访问集群服务的 API 对象&#xff0c;提供 HTTP/HTTPS 路由规则&#xff0c;实现以下功能&#xff1a; 基于域名/路径的路由TLS/SSL 终止负载均衡流量控制 与传统服务的区别 特性Ingre…...

rk3568安全启动功能实践

本文主要讲述笔者在rk3568芯片上开发安全启动功能实践的流程。其中主要参考瑞芯微官方文档《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文档中描述逻辑不是很清晰而且和当前瑞芯微的sdk中安全启动的流程匹配度不高。本文就不再对瑞芯微官方文档的内容…...

transformer-实现解码器Decoder

Decoder 论文地址 https://arxiv.org/pdf/1706.03762 Decoder结构介绍 Transformer Decoder是Transformer模型的核心生成组件&#xff0c;负责基于编码器输出和已生成内容预测后续token。通过堆叠多层结构相同的解码层&#xff08;Decoder Layer&#xff09;&#xff0c;每层包…...

iOS RunLoop 深入解析

本文深入探讨 iOS 中 RunLoop 的实现原理、工作机制以及实际应用。通过源码分析和实际案例&#xff0c;帮助读者全面理解 RunLoop 在 iOS 系统中的重要作用。 一、RunLoop 基础概念 1. RunLoop 的定义与作用 RunLoop 是 iOS 系统中用于处理事件和消息的循环机制。它负责管理线…...

软考中级-软件设计师 数据结构(手写笔记)

第一章&#xff1a;基础 基础知识 五大特性 第二章&#xff1a;线性表 第三章&#xff1a;栈和队列 队列 广义表 第四章&#xff1a;树和二叉树 基础知识 树转二叉树和二叉排序树 哈夫曼树 线索二叉树和平衡二叉树 第五章&#xff1a;图 基础知识和邻接矩阵和邻接表 图的遍…...

/var/log/sssd/` 目录解析

/var/log/sssd/ 是 System Security Services Daemon (SSSD) 的专用日志目录,用于记录与身份认证、用户/组信息查询、缓存管理等相关的操作。以下是该目录的详细解析: 1. 目录结构 默认情况下,/var/log/sssd/ 包含以下日志文件: /var/log/sssd/ ├── sssd.log …...

C++负载均衡远程调用学习之Reactor事件触发机制

目录 1.LARV0.2-REACTOR_BUF实现 2.LARV0.2-outpu_buf实现 3.LARV0.2-reactor继承内存管理 4.LARV0.2流程总结 5.LARV0.3-多路IO事件的分析 6.LARV0.3_io_event和event_loop定义 7.LARV0.3_event_loop添加一个事件 8.LARV0.3_event_loop的epoll_wait封装 9.LARV0.3-eve…...

将uni-app前端项目发布到微信小程序体验版

1、修改后端接口调用地址 const REQUEST_CONST {BASE_URL:https://11.22.33.44:9090, } export default REQUEST_CONST 2、登录微信小程序平台&#xff0c;获取AppID 3、配置微信小程序AppID 在项目根目录下找到manifest.json文件&#xff0c;配置微信小程序相关的参数 4、…...

深入理解CSS显示模式与盒子模型

一、CSS显示模式&#xff1a;元素的“性格”决定布局 1. 显示模式基础 CSS显示模式&#xff08;display属性&#xff09;决定了元素在页面中的排列方式和尺寸表现。常见的显示模式有三大类型&#xff1a; 2. 块级元素&#xff08;Block&#xff09; 特点&#xff1a;独占一…...

突破SQL注入字符转义的实战指南:绕过技巧与防御策略

在渗透测试中&#xff0c;SQL注入始终是Web安全的重点攻击手段。然而&#xff0c;当开发者对用户输入的特殊字符&#xff08;如单引号、反斜杠&#xff09;进行转义时&#xff0c;传统的注入方式往往会失效。本文将深入探讨如何绕过字符转义限制&#xff0c;并给出防御建议。 目…...

java网络原理5

一、网络地址转换&#xff08;NAT&#xff09; 1. 原理 - NAT 用于解决 IP 地址不够用的问题 &#xff0c;将 IP 地址分为外网 IP&#xff08;公网 IP&#xff09;和内网 IP&#xff08;私网 IP&#xff09;。内网 IP 如 10.、172.16 - 172.31.、192.168.* 等&#xff0c;家用…...

一种基于光源评估并加权平均的自动白平衡方法(一)

在之前的博文如何在白平衡标定种构建不同类型的白平衡色温坐标系作为实例说明的白平衡色温坐标系的构建中,利用的如下映射矩阵构建色温坐标系: 按照上述论文的说明,是不能直接把Raw域中的每块的RGB带入公式...

基于Docker Compose的Prometheus监控系统一键部署方案

前言 在当今的云原生时代,系统监控已经成为保障业务稳定运行的重要基石。本文旨在提供一个完整的解决方案,帮助您快速搭建一个功能强大的监控系统。通过Docker Compose实现一键部署,结合Prometheus、Grafana、cAdvisor和node-exporter等优秀开源工具,构建一个完整的监控体…...

服务器丢包率测试保姆级教程:从Ping到网络打流仪实战

测试服务器丢包率是网络性能诊断的重要环节&#xff0c;丢包通常由网络拥塞、硬件故障、配置错误或线路质量差导致。以下是多种测试方法的详细步骤和工具说明&#xff1a; 一、基础工具测试&#xff08;无需专业设备&#xff09; 1. 使用 ping 命令 命令示例&#xff1a; bash…...

家庭服务器IPV6搭建无限邮箱系统指南

qq邮箱操作 // 邮箱配置信息 // 注意&#xff1a;使用QQ邮箱需要先开启IMAP服务并获取授权码 // 设置方法&#xff1a;登录QQ邮箱 -> 设置 -> 账户 -> 开启IMAP/SMTP服务 -> 生成授权码 服务器操作 fetchmail 同步QQ邮箱 nginx搭建web显示本地同步过来的邮箱 ssh…...

Ubuntu ZLMediakit的标准配置文件(rtsp->rtmp->hls)

最近在工作中遇到不生成hls资源的问题,后面发现是配置文件有误,特此记录正确的config.ini配置文件,方便查阅。 最终解决方案,通过下面这种格式可以访问到flv视频,具体为什么不太清楚,rtmp格式:rtmp://39.113.48.113:8089/live/1744168516937396175 记录最终解决方案:ht…...

Android 移动开发:ProgressBar(转圈进度条)

目录 Android 移动开发&#xff1a;ProgressBar&#xff08;转圈进度条&#xff09;控件实战介绍 &#x1f4c2; 文件说明 &#x1f9fe; activity_main.xml&#xff08;布局文件&#xff0c;XML&#xff09; &#x1f9fe; MainActivity.java&#xff08;逻辑代码&#xf…...

CSS:选择器-复合选择器

文章目录 1、交集选择器 1、交集选择器 <style>/* 选中类名为rich的元素*/.rich {color: gold;}/* 选中类名为beauty的元素*/.beauty {color: red;}/* 选中类名为beauty的p元素&#xff0c;这种形式&#xff08;元素配合类选择器&#xff09;以后用的很多&#xff01;&am…...

Kafka-可视化工具-Offset Explorer

安装&#xff1a; 下载地址&#xff1a;Offset Explorer 安装好后如图&#xff1a; 1、下载安装完毕&#xff0c;进行新增连接&#xff0c;启动offsetexplorer.exe&#xff0c;在Add Cluster窗口Properties 选项下填写Cluster name 和 kafka Cluster Version Cluster name (集…...

在pycharm中创建Django项目并启动

Django介绍 Django 是一个基于 Python 的开源 Web 应用框架&#xff0c;采用了 MTV&#xff08;Model - Template - View&#xff09;软件设计模式 &#xff0c;由许多功能强大的组件组成&#xff0c;能够帮助开发者快速、高效地创建复杂的数据库驱动的 Web 应用程序。它具有以…...

私有知识库 Coco AI 实战(六):打造 ES Mapping 小助手

开发同学可能经常和字段类型打交道&#xff0c;数据类型本来就不少&#xff0c;新版本可能还有新的数据类型。更重要的是新的字段类型可能会提升某个场景的性能&#xff0c;不知道的话可就亏大发了。所以我们继续打造一个 ES Mapping 小助手。 克隆小助手 我们进入 Coco Serv…...

JavaScript性能优化实战之代码层面性能优化

在前端开发中,JavaScript 的性能直接影响到网站的加载速度、用户体验和交互流畅度。针对代码层面的优化,我们可以从多个方面入手,确保每一行代码都能最大化地发挥效能。接下来,我们将细化并解释每一个优化点。 1️⃣ 避免全局变量污染 全局变量会被整个 JavaScript 代码所…...

基于C++的IOT网关和平台2:github项目ctGateway技术说明书

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 …...

前端基础之《Vue(13)—重要API》

重要的API 一、nextTick() 1、写法 Vue.$nextTick()或者this.$nextTick() 原因&#xff1a; set操作代码是同步的&#xff0c;但是代码背后的行为是异步的。set操作修改声明式变量&#xff0c;触发re-render生成新的虚拟DOM&#xff0c;进一步执行diff运算&#xff0c;找到…...

Python爬虫实战:获取彼岸网高清素材图片

一、引言 在数字化时代,图片素材的需求持续增长。彼岸网提供了丰富的高质量图片资源,其中 4K 风景图片备受用户青睐。借助 Python 爬虫技术,可自动化地从彼岸网获取这些图片,为用户提供便捷的图片素材服务。然而,爬取过程中会遭遇登录验证、反爬机制等问题,需采用相应技…...

拥抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 协程生态中处理异步数据流的核心工具&#xff0c;它提供了一种声明式、轻量级且与协程深度集成的响应式编程模型。与传统的 RxJava 相比&#xff0c;Flow 更简洁、更易于维护&#xff0c;尤其在 Android 开发中已成为主流选择。本文将从基础概念…...

winget使用

Get-Command winget winget search qq winget install Tencent.QQ.NT...

C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比

C从入门到实战&#xff08;十一&#xff09;详细讲解C/C语言中内存分布与C与C内存管理对比 前言一、C/C语言中内存分布1.内核空间2.栈3.堆4.数据段5.代码段 二、例题带练巩固C/C语言中内存分布的知识题目讲解题目答案 三、C语言动态内存分配&#xff08;知识回顾&#xff09;3.…...

flutter 专题 一百零四 Flutter环境搭建

Flutter简介 Flutter 是Google开发的一个移动跨平台&#xff08;Android 和 iOS&#xff09;的开发框架&#xff0c;使用的是 Dart 语言。和 React Native 不同的是&#xff0c;Flutter 框架并不是一个严格意义上的原生应用开发框架。Flutter 的目标是用来创建高性能、高稳定性…...

傅里叶与相位偏移

一、简介 大三的《离散数学》。。。。。 傅里叶变换是数学与工程领域的一项革命性工具&#xff0c;其核心思想是将复杂信号分解为简单正弦波的叠加&#xff0c;实现从时域&#xff08;时间维度&#xff09;到频域&#xff08;频率维度&#xff09;的转换。通过这种变换&#x…...

Godot笔记:入门索引

文章目录 前言游戏引擎软件界面关键概念GDScript导出成品创建非游戏应用后记 前言 最近对游戏引擎这块感兴趣&#xff0c;特别是因为游戏引擎自带的很多工具&#xff0c;作为图形化软件的开发应该也不错。 Godot 是一款这几年比较流行的开源游戏引擎。这里记录下入门学习使用 …...

OpenCV实战教程 第一部分:基础入门

第一部分&#xff1a;基础入门 1. OpenCV简介 什么是OpenCV及其应用领域 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;于1999年由Intel公司发起&#xff0c;现在由非营利组织OpenCV.org维护。Ope…...

OpenCV 图像处理核心技术 (第二部分)

欢迎来到 OpenCV 图像处理的第二部分&#xff01;在第一部分&#xff0c;我们学习了如何加载、显示、保存图像以及访问像素等基础知识。现在&#xff0c;我们将深入探索如何利用 OpenCV 提供的强大工具来修改和分析图像。 图像处理是计算机视觉领域的基石。通过对图像进行各种…...

Git从入门到精通-第二章-工具配置

目录 命令行 安装Git 初次运行Git前的配置​ git config基本概念 常用命令 配置用户信息 配置文本编辑器 查看配置 配置别名&#xff08;简化命令&#xff09; 高级配置 换行符处理&#xff08;方便跨平台协作&#xff09; 忽略文件权限变更&#xff08;常用于团队协…...

树状结构转换工具类

项目中使用了很多树状结构&#xff0c;为了方便使用开发一个通用的工具类。 使用工具类的时候写一个类基础BaseNode&#xff0c;如果有个性化字段添加到类里面&#xff0c;然后就可以套用工具类。 工具类会将id和pid做关联返回一个树状结构的集合。 使用了hutool的工具包判空…...

C#基础简述

C#基础详解 一、C#语言概述 C#&#xff08;读作"C Sharp"&#xff09;是微软开发的面向对象的编程语言&#xff0c;运行在.NET平台上。它结合了C的强大功能和Visual Basic的简单性&#xff0c;具有以下特点&#xff1a; ​​面向对象​​&#xff1a;支持封装、继…...

AI赋能烟草工艺革命:虫情监测步入智能化时代

在当今竞争激烈且品质至上的烟草行业中&#xff0c;生产流程的每一个细微环节都关乎着企业的生死存亡与品牌的兴衰荣辱。烟草工艺部门与制丝、卷包车间作为生产链条的核心驱动&#xff0c;犹如精密仪器中的关键齿轮&#xff0c;彼此紧密咬合、协同运转&#xff0c;任何一处的小…...

小刚说C语言刷题—1462小明的游泳时间

1.题目描述 伦敦奥运会要到了&#xff0c;小明在拼命练习游泳准备参加游泳比赛。 这一天&#xff0c;小明给自己的游泳时间做了精确的计时&#xff08;本题中的计时都按 24 小时制计算&#xff09;&#xff0c;它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分。 请你帮小…...

StarRocks Lakehouse 如何重构大数据架构?

随着数据分析需求的不断演进&#xff0c;企业对数据处理架构的期望也在不断提升。在这一背景下&#xff0c;StarRocks 凭借其高性能的实时分析能力&#xff0c;正引领数据分析进入湖仓一体的新时代。 4 月 18 日&#xff0c;镜舟科技高级技术专家单菁茹做客开源中国直播栏目《…...

用TCP实现服务器与客户端的交互

引言&#xff1a; 这篇文章主要是用TCP构造的回显服务器&#xff0c;也就是客户端发什么&#xff0c;就返回什么。用实现这个过程方式来学会TCP套接字的使用。 一、TCP的特点 TCP是可靠的&#xff1a;这个需要去了解TCP的机制&#xff0c;这是一个大工程&#xff0c;博主后面写…...

用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering

用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering 文章目录 用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering摘要Abstract1. 预备知识1.1 三维的几何表示1.2 计算机中的集合…...

Vue3 Echarts 3D立方体柱状图实现教程

文章目录 前言一、实现原理二、series ——type: "pictorialBar" 简介2.1 常用属性 三、代码实战3.1 封装一个echarts通用组件 echarts.vue3.2 实现一个立方体柱状图&#xff08;1&#xff09;首先实现一个基础柱状图&#xff08;2&#xff09;添加立方体棱线&#x…...

Soildworks怎样在装配体中建立局部剖视图

1思路&#xff1a;建立拉伸切除 2步骤 1-打开点线面显示按钮 2-在装配体中依据某个基准面&#xff08;例如前视基准面&#xff09;建立一个待切除的草图 3-点击顶部工具栏的装配体--->装嫩配体特征---->拉伸切除---Ok 3具体图示 1-点击&#xff0c;使其变成灰色 即…...

基于C++的IOT网关和平台5:github项目ctGateway开发指南

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 …...