解构与重构:自动化测试框架的进阶认知之旅
目录
一、自动化测试的介绍
(一)自动化测试的起源与发展
(二)自动化测试的定义与目标
(三)自动化测试的适用场景
二、什么是自动化测试框架
(一)自动化测试框架的定义
(二)常见自动化测试框架分类
(三)自动化测试框架的核心价值
三、自动化测试框架与普通测试代码的区别
四、自动化测试框架需要具备的功能
(一)测试用例管理
(二)测试执行控制
(三)依赖管理与环境配置
(四)日志与错误处理
(五)结果分析与报告生成
(六)兼容性与可移植性
五、以 Pytest 为例解析自动化测试框架
(一)Pytest 的核心必备功能
(二)Pytest 的扩展功能
(三)Pytest 的架构原理图
六、什么样的测试框架才是好的自动化测试框架
(一)易用性
(二)可扩展性
(三)稳定性与可靠性
(四)社区与生态
(五)性能与效率
在软件研发的高速迭代时代,自动化测试早已从 "锦上添花" 变为 "刚需标配"。对于日均接口调用量过亿的互联网服务,或是对稳定性要求苛刻的智能汽车软件,手工测试的效率与覆盖率已难以满足需求。
自动化测试通过脚本替代重复劳动,让测试工程师从 "点击侠" 蜕变为 "代码工匠",而自动化测试框架则是打造高效测试体系的核心基建。本文将与大家一起重新认识一下自动化测试框架了解一下自动化测试框架的本质与价值。
一、自动化测试的介绍
(一)自动化测试的起源与发展
在软件行业发展初期,手工测试占据主导地位。随着软件规模的不断扩大,功能日益复杂,项目迭代速度加快,手工测试在面对频繁的回归测试时,效率低下、人力成本高、测试结果不稳定等问题逐渐凸显。于是,自动化测试应运而生。它最初只是一些简单的脚本,用于重复执行一些繁琐的测试任务。随着技术的发展,自动化测试不断演进,逐渐形成了成熟的体系和框架。
(二)自动化测试的定义与目标
自动化测试是通过编写程序或使用工具,让计算机自动执行测试用例,并对测试结果进行验证和分析的过程。其核心目标主要有以下几点:
- 提高测试效率,减少重复劳动,让测试人员从繁琐的手工操作中解放出来,专注于更有价值的测试设计和分析工作。
- 提升测试的准确性和稳定性,避免人为因素对测试结果的影响。
- 实现对软件的全面测试,尤其是在大规模、复杂系统的测试中,能够覆盖更多的测试场景和用例。
- 支持持续集成和持续部署(CI/CD),确保软件在每次变更后都能快速、可靠地进行测试,加快产品的发布周期。
(三)自动化测试的适用场景
并非所有的测试场景都适合采用自动化测试,它更适用于以下情况:
场景类型 | 典型案例 | 自动化收益 |
重复执行 | 每日接口冒烟测试 | 节省 90% 执行时间 |
数据敏感 | 批量数据校验 | 避免人工误判 |
环境复杂 | 多设备 UI 兼容性测试 | 覆盖 80% 以上设备组合 |
性能压测 | 高并发接口测试 | 精准定位吞吐量瓶颈 |
以我在互联网风控行业和汽车行业的项目经验为例,在互联网风控系统中,每天都需要对大量的风控规则进行验证,这些规则的测试用例相对稳定且需要频繁执行,自动化测试就发挥了巨大的作用;而在汽车行业的软件测试中,针对车载 APP 的兼容性测试,需要在不同的车载系统和硬件设备上进行,自动化测试能够高效地完成这些任务。
二、什么是自动化测试框架
(一)自动化测试框架的定义
自动化测试框架是一个集成了多种工具、库和规范的软件系统,它为自动化测试提供了一个结构化的环境,使得测试人员能够更方便、高效地编写、管理和执行测试用例。它不仅仅是一些测试脚本的集合,而是包含了测试用例管理、测试执行、结果分析、日志记录、报告生成等多个功能模块,形成了一个完整的测试体系。
(二)常见自动化测试框架分类
根据不同的测试对象和场景,自动化测试框架可以分为多种类型:
- 单元测试框架:主要用于测试软件中的最小可测试单元,如函数、类等。在 Python 技术栈中,常见的单元测试框架有 unittest、pytest 等。
- 接口测试框架:用于测试软件系统的接口,包括 HTTP 接口、RPC 接口等。通常会结合 requests、urllib3 等库来实现,例如可以基于 pytest 搭建接口测试框架。
- UI 自动化测试框架:针对软件的用户界面进行测试,模拟用户在界面上的操作,如点击、输入、滑动等。在 APP 自动化测试中,常用的框架有 Appium;而对于 Web 界面,Selenium 是广泛使用的工具,结合 pytest 可以构建功能强大的 UI 自动化测试框架。
- 性能测试框架:用于评估软件系统的性能指标,如响应时间、吞吐量、并发能力等。常见的性能测试框架有 JMeter、Locust 等,在 Python 中也可以使用 Locust 来编写性能测试脚本。
(三)自动化测试框架的核心价值
一个好的自动化测试框架能够为测试工作带来诸多好处:
- 标准化和规范化:提供统一的测试编写规范和流程,确保测试用例的一致性和可维护性。例如,规定测试用例的命名规则、断言方式、日志记录格式等。
- 复用性和扩展性:通过封装公共的功能模块,如数据库操作、网络请求、页面元素定位等,使得测试人员无需重复编写代码,提高开发效率。同时,框架的架构设计应具备良好的扩展性,方便添加新的功能和支持新的测试场景。
- 降低测试成本:虽然搭建自动化测试框架需要一定的前期投入,但从长远来看,它能够大大减少测试人员的重复劳动,提高测试效率,降低人力成本和时间成本。
- 提升测试质量:框架提供的丰富功能,如详细的日志记录、准确的错误定位、全面的结果分析等,有助于测试人员更快地发现和解决问题,提升软件的质量。
三、自动化测试框架与普通测试代码的区别
为了更清晰地理解自动化测试框架的特点,我们将其与普通测试代码进行对比,如下表所示:
对比维度 | 普通测试代码 | 自动化测试框架 |
可维护性 | 通常是针对单个测试场景编写的脚本,结构松散,缺乏统一的规范和组织。随着测试用例的增加,代码会变得难以维护,修改一个地方可能会影响多个测试用例。 | 具有清晰的架构和模块划分,遵循一定的设计模式和规范。测试用例、公共函数、配置文件等分开管理,便于维护和更新。当需求发生变化时,只需在相应的模块中进行修改,不会对整个框架造成太大影响。 |
复用性 | 代码复用率低,很多公共功能需要在每个测试脚本中重复编写,例如数据库连接、登录操作等。 | 高度封装公共功能,形成可复用的模块或库。测试人员可以直接调用这些公共模块,避免重复开发,提高开发效率。例如,在接口测试框架中,登录功能可以封装成一个公共函数,供所有需要登录的测试用例调用。 |
扩展性 | 扩展性较差,当需要增加新的测试功能或支持新的测试场景时,需要对现有代码进行大量修改,甚至重新编写。 | 设计时考虑了扩展性,提供了插件机制或扩展接口,方便添加新的功能模块。例如,pytest 框架可以通过安装插件来扩展其功能,如生成测试报告、支持分布式测试等。 |
功能完整性 | 通常只包含简单的测试逻辑和断言,缺乏测试用例管理、日志记录、报告生成等功能。测试结果的分析和定位需要手动进行,效率低下。 | 集成了丰富的功能模块,具备测试用例管理(如分组、排序、过滤)、测试执行控制(如并行执行、重试机制)、日志记录(详细记录测试过程中的信息)、结果分析(自动判断测试结果是否通过)、报告生成(生成美观、详细的测试报告)等功能,形成了一个完整的测试生态系统。 |
团队协作 | 适合个人或小规模团队使用,代码风格和规范因人而异,团队成员之间的协作成本较高。 | 提供了统一的开发规范和协作机制,便于团队成员共同开发和维护。例如,框架中规定了代码提交的流程、分支管理策略、单元测试的要求等,确保团队成员能够高效协作。 |
通过以上对比可以看出,自动化测试框架是普通测试代码的升级和扩展,它解决了普通测试代码在可维护性、复用性、扩展性和功能完整性等方面的不足,是实现高效、高质量自动化测试的关键。
四、自动化测试框架需要具备的功能
一个完整的自动化测试框架需要具备以下核心功能,这些功能相互协作,共同构成了框架的基础:
(一)测试用例管理
- 用例组织与分类:能够按照不同的维度对测试用例进行组织和分类,如按照功能模块、测试类型(冒烟测试、回归测试、性能测试等)、优先级等。例如,在框架中可以创建不同的目录结构来存放不同模块的测试用例,每个测试用例文件中可以通过标签或注释来标记测试类型和优先级。
- 用例编写与维护:提供方便的测试用例编写方式,支持多种断言方式和数据驱动测试。数据驱动测试可以通过读取外部文件(如 Excel、JSON、YAML 等)中的数据来生成多个测试用例,提高测试用例的复用性。例如,使用 pytest 的参数化功能,可以轻松实现数据驱动测试。
- 用例筛选与执行:能够根据不同的条件筛选出需要执行的测试用例,如按标签、模块、优先级等。在持续集成环境中,通常只需要执行冒烟测试用例或本次变更相关的测试用例,通过框架的用例筛选功能可以快速实现。
(二)测试执行控制
- 执行流程管理:控制测试用例的执行顺序,支持顺序执行、并行执行等多种执行方式。并行执行可以提高测试效率,尤其是在测试用例之间相互独立的情况下。例如,pytest 可以通过插件实现多线程或多进程并行执行测试用例。
- 重试机制:对于一些偶发失败的测试用例,框架应具备重试机制,自动重新执行失败的用例,减少人为干预。可以设置重试的次数和间隔时间,避免因环境不稳定等因素导致的误判。
- 断点调试:方便测试人员在测试执行过程中进行断点调试,查看变量值、调用栈等信息,快速定位问题。例如,在 Python 中使用 pdb 调试器结合自动化测试框架,可以实现对测试脚本的调试。
(三)依赖管理与环境配置
- 环境配置管理:能够轻松配置不同的测试环境,如开发环境、测试环境、生产环境等。通过读取环境配置文件,框架可以自动加载相应的配置信息,如数据库连接参数、接口地址、浏览器驱动路径等。
- 依赖注入:在测试用例中,经常需要依赖一些外部资源,如数据库、文件系统、网络服务等。框架应提供依赖注入机制,方便测试人员管理这些依赖,降低测试用例与依赖资源之间的耦合度。例如,使用 fixture(夹具)机制来管理测试用例的前置条件和后置清理操作,这是 pytest 框架的一个重要特性。
- 环境清理:在测试用例执行完毕后,能够自动清理测试过程中产生的垃圾数据和临时文件,确保测试环境的一致性和纯净性。例如,在数据库测试中,每个测试用例执行完毕后,应删除测试过程中创建的测试数据,避免影响其他测试用例的执行。
(四)日志与错误处理
- 详细日志记录:记录测试执行过程中的详细信息,包括测试用例的开始和结束时间、输入输出数据、异常信息等。日志可以帮助测试人员在测试失败时快速定位问题,分析测试过程中的行为。例如,在框架中可以使用 Python 的 logging 模块来实现日志功能,将日志输出到文件或控制台。
- 异常捕获与处理:能够捕获测试执行过程中出现的异常,并进行适当的处理,如记录异常信息、跳过当前测试用例、终止测试执行等。同时,框架应提供友好的错误提示信息,帮助测试人员理解异常发生的原因。
- 错误定位:当测试用例失败时,框架应能够准确地定位到失败的代码行,并提供相关的上下文信息,如变量值、调用栈等,方便测试人员进行调试和修复。
(五)结果分析与报告生成
- 结果判断:自动判断测试用例的执行结果是否通过,根据断言条件来验证测试预期是否满足。断言是自动化测试中非常重要的环节,它决定了测试用例的正确性。
- 统计与分析:对测试结果进行统计和分析,如计算测试用例的通过率、失败率、执行时间等指标。通过这些指标,测试人员可以了解测试的整体情况,评估软件的质量。
- 报告生成:生成美观、详细的测试报告,报告应包含测试基本信息(如测试时间、环境、执行人员等)、测试结果统计、失败用例详细信息(如错误信息、日志截图等)。常见的测试报告格式有 HTML、XML、JSON 等,例如 pytest 可以通过 pytest - html 插件生成 HTML 格式的测试报告,通过 allure 插件生成更美观、功能更强大的报告。
(六)兼容性与可移植性
- 多平台支持:能够在不同的操作系统(如 Windows、Linux、macOS)上运行,支持不同的浏览器(如 Chrome、Firefox、Edge)和设备(如手机、平板、车载终端等)。例如,Appium 框架可以同时支持 iOS 和 Android 系统的 APP 自动化测试。
- 多语言支持:对于一些大型团队或复杂项目,可能需要支持多种编程语言的测试脚本。虽然我们这里主要讨论 Python 技术栈,但优秀的自动化测试框架通常具有良好的开放性,能够与其他语言的工具和库进行集成。
- 版本兼容性:能够兼容不同版本的开发框架、测试工具和依赖库,确保在软件版本升级时,框架能够稳定运行,减少因版本不兼容导致的问题。
五、以 Pytest 为例解析自动化测试框架
Pytest教程可移步我的专栏: https://blog.csdn.net/weixin_40025666/category_12080951.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12080951&sharerefer=PC&sharesource=weixin_40025666&sharefrom=from_link
(一)Pytest 的核心必备功能
1.简洁的测试用例编写
Pytest 采用非常简洁的语法,不需要像 unittest 那样创建测试类和继承 TestCase 类,只需要编写普通的函数即可,函数名以 "test_" 开头,测试方法中的参数可以直接使用 fixture。以下是一个简单的 Pytest 测试用例示例:
def test_addition():result = 1 + 1assert result == 2, "加法运算失败"
2.强大的 fixture 机制
fixture 是 Pytest 的一大特色,它用于管理测试用例的前置条件和后置清理操作,实现了测试用例之间的依赖管理和资源共享。fixture 可以通过 @fixture 装饰器来定义,然后在测试用例中直接作为参数传入。例如,以下是一个用于数据库连接的 fixture:
import pytest
import psycopg2@pytest.fixture(scope="module")
def db_connection():connection = psycopg2.connect(dbname="test_db",user="user",password="password",host="localhost")yield connectionconnection.close()def test_query_data(db_connection):cursor = db_connection.cursor()cursor.execute("SELECT * FROM users")data = cursor.fetchall()assert len(data) > 0, "查询结果为空"
在这个示例中,db_connection fixture 在模块级别(scope="module")创建数据库连接,所有使用该 fixture 的测试用例共享同一个连接,测试结束后关闭连接,实现了资源的高效管理。
3.灵活的参数化测试
Pytest 支持通过 @parametrize 装饰器实现参数化测试,允许使用不同的输入数据运行同一个测试用例,大大提高了测试用例的覆盖率。例如,测试一个加法函数:
import pytest@pytest.mark.parametrize("a, b, expected", [(1, 2, 3),(0, 0, 0),(-1, 1, 0),
])
def test_add(a, b, expected):assert a + b == expected
这样,一个测试用例就可以覆盖多种输入情况,减少了重复编写测试用例的工作量。
4.测试发现与执行控制
Pytest 能够自动发现项目中的测试用例,无需手动配置测试套件。它会在指定的目录下查找所有以 "test_" 开头的文件和函数。同时,支持通过命令行参数灵活控制测试用例的执行,如指定执行某个文件、某个测试函数、按标签筛选等。例如,执行所有标记为 "smoke" 的测试用例:
pytest -m smoke
(二)Pytest 的扩展功能
1.丰富的插件生态
Pytest 拥有庞大的插件生态系统,通过安装不同的插件可以扩展其功能,满足各种不同的测试需求。以下是一些常用的插件:
- pytest-html:生成美观的 HTML 格式测试报告,包含测试结果统计、失败用例详细信息、日志记录等。
- pytest-allure:生成更强大的测试报告,支持丰富的可视化效果,如趋势图、饼图等,还可以集成到 CI/CD 系统中。
- pytest-xdist:实现测试用例的并行执行,提高测试效率,尤其适合大规模测试套件。
- pytest-mock:用于模拟和补丁对象,方便在测试中处理依赖关系,例如模拟数据库连接、网络请求等。
- pytest-django:专门用于 Django 框架的测试,提供了对 Django 模型、视图、表单等的支持。
2.与其他工具的集成
Pytest 可以轻松与其他测试工具和库集成,形成强大的自动化测试解决方案。例如,在接口测试中,可以结合 requests 库发送 HTTP 请求,使用 pytest 进行测试用例的管理和执行;在 UI 自动化测试中,可以与 Selenium、Appium 等工具结合,实现对 Web 和 APP 界面的自动化测试。
3.自定义标记与钩子函数
通过自定义标记(mark),可以对测试用例进行分类和标记,方便后续的筛选和执行。同时,Pytest 提供了丰富的钩子函数(hook function),允许用户在测试执行的不同阶段(如测试开始前、测试用例收集时、测试执行后等)插入自定义的逻辑,实现对框架的高度定制化。例如,可以通过钩子函数修改测试报告的内容,或者在测试用例失败时自动截图保存。
(三)Pytest 的架构原理图
为了更清晰地理解 Pytest 的工作原理,我们绘制了以下架构原理图:
在这个架构中,Pytest 首先收集项目中的测试用例,然后根据 fixture 的定义初始化相关的资源和前置条件,接着执行测试用例并进行断言,最后记录日志和生成测试报告。插件在各个环节中发挥了重要作用,扩展了框架的功能。
六、什么样的测试框架才是好的自动化测试框架
(一)易用性
- 学习成本低:好的测试框架应该具有简洁明了的文档和示例,方便新手快速上手。例如,pytest 的文档非常详细,并且提供了大量的示例代码,使得测试人员能够快速掌握其基本用法。
- 语法简洁:测试用例的编写语法应简洁易懂,避免繁琐的代码结构。像 pytest 不需要复杂的类定义,直接编写函数即可,大大提高了测试用例的编写效率。
- 工具链完善:提供配套的工具和插件,方便测试人员进行开发、调试、运行和维护。例如,Pytest 的插件生态系统非常丰富,几乎可以满足各种测试需求。
(二)可扩展性
- 插件机制:支持通过插件或扩展接口添加新的功能,而无需修改框架的核心代码。这样可以让框架随着技术的发展和项目的需求不断进化,保持长久的生命力。
- 开放的架构:框架的架构设计应具有良好的开放性,能够方便地与其他工具和库进行集成。例如,能够轻松集成持续集成工具(如 Jenkins、GitLab CI)、缺陷管理系统(如 Jira、Bugzilla)等。
- 自定义能力:允许用户自定义测试流程、断言方式、报告格式等,满足不同项目的特殊需求。例如,通过 Pytest 的钩子函数,用户可以自定义测试用例的收集规则、执行流程和结果处理方式。
(三)稳定性与可靠性
- 健壮的核心:框架的核心代码应经过充分的测试和验证,能够处理各种异常情况,避免在测试执行过程中出现框架本身的错误。
- 兼容性强:能够兼容不同版本的开发框架、测试工具和运行环境,确保在项目的不同阶段都能稳定运行。
- 准确的结果判断:断言机制应准确可靠,能够正确判断测试用例的执行结果,避免误判和漏判。
(四)社区与生态
- 活跃的社区:拥有庞大的用户群体和活跃的社区,能够及时获得技术支持和解决方案。当遇到问题时,可以通过社区论坛、技术博客、问答平台等获取帮助。
- 丰富的生态系统:周边生态丰富,包括大量的插件、教程、最佳实践等,能够降低框架的使用成本和学习成本。例如,Pytest 的社区非常活跃,相关的教程和示例随处可见,插件数量也非常多。
- 持续的更新与维护:框架的开发团队应持续对框架进行更新和维护,修复漏洞,添加新功能,以适应技术的发展和用户的需求。
(五)性能与效率
- 快速的执行速度:在处理大规模测试套件时,能够高效地执行测试用例,支持并行执行、增量测试等功能,减少测试的等待时间。
- 资源利用率高:合理管理测试过程中的资源,如内存、CPU、网络连接等,避免资源泄漏和浪费,确保测试环境的稳定和高效。
自动化测试框架是软件自动化测试的核心支撑,它不仅仅是一个工具,更是一种测试思想和方法论的体现。从最初的简单脚本到如今功能强大、架构完善的框架,自动化测试框架在不断发展和演进。
在实际项目中,选择和搭建适合自己团队和项目的自动化测试框架至关重要。我们需要根据项目的需求、技术栈、团队成员的技能水平等因素综合考虑,选择易用性好、可扩展性强、稳定性高的框架。同时,要充分利用框架的功能和生态,结合实际项目经验,不断优化和完善测试框架,提高自动化测试的效率和质量。
随着软件行业的不断发展,自动化测试框架也将面临新的挑战和机遇。未来,自动化测试框架可能会更加智能化,结合人工智能和机器学习技术,实现测试用例的自动生成、缺陷的智能定位等功能;同时,在云计算、大数据、物联网等新兴技术的推动下,自动化测试框架需要支持更多复杂的测试场景和分布式测试环境。
相关文章:
解构与重构:自动化测试框架的进阶认知之旅
目录 一、自动化测试的介绍 (一)自动化测试的起源与发展 (二)自动化测试的定义与目标 (三)自动化测试的适用场景 二、什么是自动化测试框架 (一)自动化测试框架的定义 &#x…...
如何巧妙解决 Too many connections 报错?
1. 背景 在日常的 MySQL 运维中,难免会出现参数设置不合理,导致 MySQL 在使用过程中出现各种各样的问题。 今天,我们就来讲解一下 MySQL 运维中一种常见的问题:最大连接数设置不合理,一旦到了业务高峰期就会出现连接…...
【卡特兰数】不同的二叉搜索树
文章目录 96. 不同的二叉搜索树解法一:动态规划状态表示状态转移方程初始化遍历顺序返回值💥解法二:卡特兰数96. 不同的二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉…...
《饶议科学》阅读笔记
《饶议科学》 《偷窃的生物学机制:(有些)小偷有药可治》阅读笔记 核心内容:探讨偷窃狂(kleptomania)的生物学机制及相关研究。具体要点 偷窃狂的特征:患者不可抑制地反复偷窃个人不需要、与金钱…...
ShardingJdbc-公共表
ShardingJdbc-公共表 公共表 公共表属于系统中数据量小,变动少,但是却高频联合查询的表,参数表,字典表等属于此类型。可以将此类表在每个数据库中存储一份,所有更新操作将同时发送到所有分库执行。 案例 建立库 shar…...
低成本监控IPC模组概述
1、低成本sigmastar ssc335\ssc377摄像机方案,配合AI边缘计算终端即插即用,差异化AI训练及样 本采集 2、支持200万、500万H265\H264视频编码,支持网络Rtsp,Rtmp,Onvif,web,GB28181,tf卡本地录像, 视频平台接入等...
携手高校科研团队,共建TWS耳机芯片技术新生态
TWS(真无线立体声)蓝牙耳机已成为人们生活中不可或缺的一部分。而在这背后,有一家名为华芯邦的公司,其专注于TWS蓝牙仓耳机芯片的研发,并不断取得令人瞩目的突破。 一、芯片领域的实力玩家 华芯邦作为一家在芯片行业崭…...
动态规划-91.解码方法-力扣(LeetCode)
一、题目解析 将对应字符转化为数字,我们知道有的大写字母范围是在[1,9],剩下的则是[10,26],这个对应关系使我们解题的关键。 二、算法原理 1.状态表示 dp[i]表示:以i位置为结尾时,解码方法总…...
(三)Java数据类型与进制详解
一、Java数据类型概述 Java是一种强类型语言,这意味着每个变量和表达式在编译时都必须有明确的类型。Java的数据类型系统是其核心基础之一,它决定了如何存储数据、能存储什么样的数据以及能对数据执行哪些操作。 1.1 为什么需要数据类型 数据类型在编…...
用 CodyBuddy 帮我写自动化运维脚本
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的,之前都是手写 Jenki…...
【Linux庖丁解牛】—程序地址空间【进程地址空间 | 虚拟地址空间】
1. 再谈空间分布图 我们之前在学C/C的时候必然学过上面的空间分布图。 可是我们对他并不理解!这里先对其进行各区域分布验证: #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int ma…...
nginx 上传文件,413 request entity too large
目录 1 问题2 解决 1 问题 前端后端项目,上传文件,接口没问题,但是就是上传不成功 ,然后打开f12 ,发现这个接口出现413 request entity too large 这个报错 2 解决 1.1 修改nginx配置文件 在Nginx中,cli…...
Nacos源码—5.Nacos配置中心实现分析二
大纲 1.关于Nacos配置中心的几个问题 2.Nacos如何整合SpringBoot读取远程配置 3.Nacos加载读取远程配置数据的源码分析 4.客户端如何感知远程配置数据的变更 5.集群架构下节点间如何同步配置数据 4.客户端如何感知远程配置数据的变更 (1)ConfigService对象使用介绍 (2)客…...
数智管理学(八)
四、未来管理学可能的新拓展方向 (一)人工智能与机器学习的融合形成智能决策管理职能 随着人工智能和机器学习技术的不断发展,它们将在管理学中得到更广泛的应用。传统决策方法难以快速处理海量数据并准确把握复杂的市场动态。人工智能与机…...
Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload
随着 Compose Multiplatform 1.8.0 的发布,iOS 版本也引来的第一个稳定版本,按照官方的原话:「iOS Is Stable and Production-Ready」 ,而 1.8.0 版本,也让 Kotlin 和 Compose 在移动端有了完整的支持。 在 2023 年 4 …...
spark基本介绍
一、Spark概述 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Hadoop是一个分布式系统结构的基础架构。 二、Spark与Hadoop相比较的优势: 1. 处理速度:Hadoop:数据处理速度相对较慢 Spark:速度比Hadoop快很…...
DeepSeek智能时空数据分析(九):NL2SQL绘制河流名字-如何给轨迹添加说明文字
序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…...
管家婆实用贴-如何在Excel中清除空格
我们在使用管家婆软件时,经常会用到Excel表格导入导出数据,在使用Excel整理数据时,数据中的空格可能会导致计算和分析出现问题。无论是多余的前导空格、尾部空格还是单元格中的不必要空格,清除它们都是确保数据准确性的关键。今天…...
《软件项目管理》笔记一
软件项目管理概述 项目管理属于软件工程的组成之一,另外两部分为:软件开发,过程改进。 参考书如下: 1.1 项目与软件项目 1、项目: 为了创造一个唯一的产品或提供一个唯一的服务而进行 的临时性的努力。 2、项目的…...
前端线上错误日志收集与定位指南
想象一下:你的Web应用上线后,用户反馈“按钮点不动”或“页面白屏”,但你却无从下手!前端线上错误如JavaScript异常、网络失败,稍不注意就让用户流失,业务受损。令人抓狂的是,80%的错误悄无声息…...
可视化魔法指南
🎨 ECharts数据可视化魔法指南 🌟 ECharts:数据的艺术画笔 #mermaid-svg-ARwFHUrXBJ03Gpo9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ARwFHUrXBJ03Gpo9 .error-icon{fill:#552222;}#mermaid-svg-ARwFHUr…...
使用ffmpeg截取MP3等音频片段
可以使用以下命令通过 ffmpeg 截取 MP3 音频文件的指定片段: ffmpeg的安装方法参考:linux 安装包方式安装ffmpeg,并在环境中设定或指定ffmpeg地址_linux 通过ffmpeg访问地址-CSDN博客 ffmpeg -ss [start_time] -i input.mp3 -to [end_time] -codec copy output.mp3 参数说…...
FFmpeg(7.1版本)编译生成ffplay
FFmpeg在编译的时候,没有生成ffplay,怎么办? 1. 按照上一篇文章:FFmpeg(7.1版本)在Ubuntu18.04上的编译_ffmpeg-7.1-CSDN博客 在build.sh脚本里配置了ffplay 但是,实际上却没有生成ffplay,会是什么原因呢? 2. 原因是编译ffplay的时候,需要一些依赖库 sudo apt-get i…...
CAN学习之--不使用收发器进行通讯测试
在实际调试或者学习CAN通讯过程中,在需要进行CAN调试的时候,但是手头有只有MCU的评估板,没有CAN的收发器,比如ATA6561、MCP2518这类芯片的时候,该怎么办呢? 因为我们知道,CAN收发器只是做信号的…...
律所项目管理全攻略:人力分配 / 案件管控 / 知识沉淀三维度解析(附专用工具清单)
引言:律所项目管理破局 ——从经验驱动到体系化运营 在法律服务行业数字化转型加速的背景下,律所项目管理能力已成为决定服务质量、客户满意度及团队效能的核心竞争力。从人力分配失衡导致的效率损耗,到案件流程模糊引发的客户信任危机&…...
Linux电源管理(7)_Wakeup events framework
原文链接:Linux电源管理(7)_Wakeup events framework 1. 前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题,是近几年Linux kernel最具争议的话题之一,在国外Linux开发论坛&…...
Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)
问题排查 在linux服务器上运行 nvidia-smi 命令,提示以下错误: Failed to initialize NVML: Driver/library version mismatch 首先查看内核驱动版本: cat /proc/driver/nvidia/version然后查看当前NVIDIA驱动版本: sudo dpkg …...
算法设计与分析实验题-序列对齐
基于 C 的序列最大对齐得分算法实现 在生物信息学和文本处理领域,序列对齐是一种常见的需求。本文将介绍如何使用 C 实现一个序列最大对齐得分算法,该算法可以计算两个序列在最优对齐方式下的最大得分。 问题描述 给定两个序列 S1 和 S2,我…...
第8章-1 查询性能优化-优化数据访问
上一篇:《 下一篇:《第7章-3 维护索引和表》》 在前面的章节中,我们介绍了如何设计最优的库表结构、如何建立最好的索引,这些对于提高性能来说是必不可少的。但这些还不够——还需要合理地设计查询。如果查询写得很糟糕&a…...
每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++
P1025 [NOIP 2001 提高组] 数的划分 - 洛谷 (luogu.com.cn) #include<iostream> using namespace std; int n, k; int res 0; void dfs(int num,int step,int sum) {//判断if (sum n) {if (step k) {res;return;}}if (sum > n || step k)return;//搜索for (int i …...
【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...
WHAT - Rust 智能指针
文章目录 常见的智能指针类型1. Box<T> — 堆上分配的数据2. Rc<T> — 引用计数的共享所有权(单线程)3. Arc<T> — 原子引用计数(多线程)4. RefCell<T> — 运行时可变借用(单线程)…...
用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)
这里我们来实现这个RPC的client端 为了实现RPC的效果,我们调用的Hello方法,即server端的方法,应该是由代理来调用,让proxy里面封装网络请求,消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…...
CentOS 安装 Zellij 终端复用器教程
CentOS 安装 Zellij 终端复用器教程 简介 Zellij 是一个现代化的终端复用器,使用 Rust 语言编写。它提供了类似 tmux 的功能,但具有更友好的用户界面和更现代化的特性。本教程将详细介绍如何在 CentOS 7.9 系统上安装 Zellij。 前置条件 CentOS 7.9 …...
基于 SpringBoot + Vue 的校园管理系统设计与实现
一、项目简介 本系统以校园组织管理为主线,结合用户权限分离机制与模块化设计,实现对“单位类别、单位、通知推送、投票信息、用户回复”等内容的全流程管理,广泛适用于教育局、高校及下属组织的信息管理工作。 🎯 项目亮点&…...
如何减少锁竞争并细化锁粒度以提高 Rust 多线程程序的性能?
在并发编程中,锁(Lock)是一种常用的同步机制,用于保护共享数据免受多个线程同时访问造成的竞态条件(Race Condition)。然而,不合理的锁使用会导致严重的性能瓶颈,特别是在高并发场景…...
【人工智能agent】--dify通过mcp协议调用工具
MCP Client 发起工具调用的实体,也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口(工具节点)来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中,就是模拟 API 服务器 上的各个API (/api/pump/st…...
Review --- Redis
Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的,key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库(存储一些简单的数据,例如新闻点赞量),**缓存(秒…...
Sql刷题日志(day8)
一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string:要操作的字符串。length:要从右侧提取的字符数 */ 2、curdate():返回当前日期,格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈,因…...
【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
(导读 ) 人工智能对计算性能需求剧增,电子微处理器发展受功耗限制。光学计算有望解决这些问题,光学神经网络(ONNs)成为研究热点,但现有 ONNs 因设计缺陷,在图像分类任务中精度远低于现代电子神经网络&#…...
2025-05-07 Unity 网络基础8——UDP同步异步通信
文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 客户端和服务端的流程如下: 创建套接字 Socket。用 Bind() 方法将套…...
K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
一、金丝雀发布概述 1.1 什么是金丝雀发布? 金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑…...
手持小风扇方案解说---【其利天下技术】
春去夏来,酷暑时节,小风扇成为外出必备的解暑工具,近年来,随着无刷电机的成本急剧下降,小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达,其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...
Qt开发:枚举的介绍和使用
文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM(Qt 5.5 及以上)3.2 示例:枚举值转字符串3.4 示例:字符串转枚举值 四、枚举与字符串相互转换五、枚…...
HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录
前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先,需要在项目的文…...
“胖都来”商标申请可以通过注册不!
近日“胖都来”被网友认为是蹭“胖东来”品牌流量在互联网上引起争议,看到许多自媒体说浙江这家公司已拿到“胖都来”的注册商标,普推知产商标老杨经检索后发现是没有的,只是申请受理。 对于商城类主要类别是在35类广告销售,核心是…...
【Django】中间件
Django 中间件是 Django 框架里一个轻量级、可插拔的组件,它能在全局范围内对 Django 的请求和响应进行处理。中间件处于 Django 的请求处理流程之中,在请求抵达视图函数之前以及视图函数返回响应之后执行特定操作。以下是关于 Django 中间件的详细介绍&…...
电子电器架构 --- 48V架构的一丢丢事情
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
什么是Blender?怎么获取下载Blender格式文件模型
glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序,用于建模和动画,最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发,后来作为自己的程序发布。这是一个称职的程序,近年来由于…...
Ubuntu安装pgsql
一、通过 APT 安装(推荐) 更新软件包列表 sudo apt update 安装 PostgreSQL 核心包及工具 sudo apt install postgresql postgresql-client postgresql-contrib • postgresql:数据库服务端 • postgresql-client:命令行…...