博客系统自动化测试报告
1.项目背景
基于SSM框架实现的个人博客系统,现有登录注销页面,博客列表页,博客内容页,博客编辑页面。登录即可查看自己曾经发表的博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对博客系统进行测试,测试的内容有:登录页面的成功与失败登录,博客列表页的内容包括用户信息,博客内容详情页面的元素是否齐全,博客编辑页的交互功能是否能成功发布博客等重要功能。该博客系统可以实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。
2.测试内容
2.1功能测试
2.1.1 编写Web测试用例
设计测试用例方法一般从以下几个方面设计:
功能测试、界面测试、性能测试、易用性测试、安全性测试、兼容性测试等六个方面进行设计,但是个人博客系统是一个web网站,主要是针对核心功能进行测试,测试功能点如下:
2.2.2 执行测试用例
1.登录测试
(1)简介
用户名与密码已存储在数据库中,登录成功即可跳转到列表页;点击”退出“按钮,自动跳转到登录页。
(2)测试用例展示
(a)界面
(b)输入正确的账号和密码(以账号:zhangsan,密码:123456)
预期结果:跳转到博客列表页
实际结果展示
(c)输出错误的账号或密码
预期结果:显示弹窗,并提示用户名不存在或者密码错误
实际结果如下图
2.博客列表页
(1)简介
登录成功将跳转到博客列表页、当前用户的头像、用户名(是否与登录账号相同)、查看已发布博客的信息(包括标题、时间、相关内容)等信息。
(2)测试用例展示
(a)列表页展示
3.博客详情页面
(1) 简介
在博客列表页面点击查看全文,即可跳转到博客详情页,这时即可看到博客的全部内容,并且在文章的最后有编辑按钮(点击编辑按钮则可以跳转到博客编辑页),删除按钮(点击即可删除该博客)
(2) 测试效果展示
(a)博客详情页展示
4.博客编辑页面
(1) 简介
进入到博客列表页,点击右上角的写博客,即可进入博客的编辑页面,也可进行发布博客
(2) 实际效果展示
(a)登录之后会先来到博客列表页
(b) 点击右上角的写博客按钮即可进入博客编辑页面
(c) 输入正确的标题和内容,点击发布文章按钮即可成功发布博客
(d) 点击“发布文章”按钮后,即可返回到博客列表页面查看新发布的博客
5.删除博客用例
(1) 简介
进入到博客详情页面后,点击删除按钮,即可删除该篇博客
(a) 实际效果展示
(b) 点击确定后即可删除该文章
6.退出
(1) 简介
在列表页面,点击右上角的注销按钮,即可退出当前账号,随后可进行重新登陆
(a) 实际效果展示
(b) 点击右上角的注销按钮
2.2 使用Selenium进行Web自动化测试(Python)
2.2.1 安装WebDriverManager驱动管理程序和selenium 类库
WebDriverManager是一个用于管理Web驱动程序的工具,主要用于自动化测试领域。在进行 Selenium 测试时,需要一个与浏览器相匹配的 Web 驱动程序,以便控制和操作浏览器。WebDriverManager能够自动下载和管理浏览器驱动程序,会自动检测本地系统中安装的浏览器,并下载对应的浏览器驱动程序(如ChromeDriver、FirefoxDriver等)。这避免了手动下载和配置驱动程序的繁琐过程,提高了自动化测试的效率和稳定性,以便在自动化测试中使用这些浏览器。
2.2.2 新建项目
在项目中点击File->Settings进入界面,查看“Project:当前项目名”中是否存在selenium和webdriver-manager两个包。
2.2.3 参照测试用例,编写自动化测试脚本
1.创建浏览器对象
为了之后可以避免冗余的代码,并且可以节省空间以及时间,所以要将调用的浏览器对象放到一个单独的文件中,这里定义一个Utils.py文件,用来写测试中需要的配置文件(屏幕截图、隐式等待)
有时候我们想要知道每次运行结束前的界面是什么情况,就可以使用屏幕截图来保存当时的情况。
①首先我们定义一个driver类
②定义俩个我们所需要的构造函数
# 总配置文件
import datetime
import os
import sys
from selenium import webdriver
#创建一个浏览器对象
class Driver:driver = ""def __init__(self):self.driver = webdriver.Edge()self.driver.implicitly_wait(20)def getScreen(self):# 创建屏幕截图dirname = datetime.datetime.now().strftime("%Y-%m-%d")filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + ".png"# 判断是否有该文件夹os.makedirs(f"../images/{dirname}", exist_ok=True)self.driver.save_screenshot(f'../images/{dirname}/{filename}')MyBlogDriver = Driver()
2.创建一个总入口文件,为了方便统一调用各个自动化测试接口(RunTest.py)
# 总运行入口文件
if __name__ == '__main__':
3.进行博客“登录”自动化测试用例
① 新建一个博客登录测试文件,命名为:BlogLogin.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(BlogLogin)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录博客的函数(loginSuc)与一个失败登录博客的构造函数(loginfail)
⑥ 注意清空输入框的内容后才能再次输入用户名及密码进行登录
⑦ 测试内容包括:输入正确的账号密码进行登录,以及账号错误与密码正确,账号正确密码错误
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from 博客系统测试.common.Utils import MyBlogDriver
class BlogDriver:driver = ""url = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver = MyBlogDriver.driverself.driver.get(self.url)#成功登录的测试用例def loginSuc(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# self.driver.back()# 失败登录用例def loginfail(self):# time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")# self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsa")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)alert = self.driver.switch_to.alerttext = alert.text# assert alert == "密码错误"assert text == "用户不存在"alert.accept()
测试结果如下:
4.”博客列表页“自动化测试
① 新建一个博客列表页测试文件,命名为:BlogList.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(BlogList)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录博客的函数(Blist)(由于未登录的情况下会直接返回到登录页面 所以未进行测试未登录状态下的博客列表页)
⑥ 测试内容包括:博客标题、博客内容、按钮等是否存在,以及"用户名称是否与登录的账号一致”
# 博客列表页测试
import time
from selenium.webdriver.common.by import By
from 博客系统测试.common.Utils import MyBlogDriver
class BlogList:driver = ""url = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_list.html"self.driver = MyBlogDriver.driverself.driver.get(self.url)def Blist(self):# time.sleep(2)# 检查有没有博客标题self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title")# 检查有没有用户名称self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")# 检查有没有查看全文按钮self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")
# 博客列表登录失败用例 由于未登录情况会直接跳转到登录页面 所以未进行测试
from 博客系统测试.TestCase import BlogLogin, BlogList, BlogDetail, BlogEdit, BlogDel
from 博客系统测试.common.Utils import MyBlogDriver
# 总运行入口文件
if __name__ == '__main__':# 失败登录测试用例BlogLogin.BlogDriver().loginfail()# 成功登录测试用例BlogLogin.BlogDriver().loginSuc()# # 博客列表页测试用例BlogList.BlogList().Blist()MyBlogDriver.driver.quit()
测试结果如下:
5.”博客详情页(点击“查看全文”按钮)“自动化测试
① 新建一个博客详情页测试文件,命名为:BlogDetail.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(BlogDetail)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录博客的函数(detail)(由于未登录的情况下会直接返回到登录页面 所以未进行测试未登录状态下的博客详情页)
⑥ 测试内容包括:博客标题、博客内容、编辑按钮,删除按钮等是否存在,以及"用户名称是否与登录的账号一致”
# 博客详情页测试
import time
from selenium.webdriver.common.by import By
from 博客系统测试.common.Utils import MyBlogDriver
class BlogDetail:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=35401"self.driver = MyBlogDriver.driverself.driver.get(self.url)# 验证博客详情页面的用例def detail(self):# time.sleep(2)# 验证时间self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")# 验证标题self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")# 验证博客内容self.driver.find_element(By.CSS_SELECTOR,"#detail > p")
RunTest.py
from 博客系统测试.TestCase import BlogLogin, BlogList, BlogDetail, BlogEdit, BlogDel
from 博客系统测试.common.Utils import MyBlogDriver
# 总运行入口文件
if __name__ == '__main__':# 失败登录测试用例BlogLogin.BlogDriver().loginfail()# 成功登录测试用例BlogLogin.BlogDriver().loginSuc()# # 博客列表页测试用例BlogList.BlogList().Blist()# # 博客详情页测试用例BlogDetail.BlogDetail().detail()MyBlogDriver.driver.quit()
测试效果如下:
6.“删除博客”自动化测试
①在博客详情页测试文件中,构造一个函数编写删除博客自动化脚本
②在这个界面中主要是点击“删除”按钮之后,自动跳转到列表页,获取第一篇博客标题是否是给定标题,来判断是否删除成功。
③在RuntTest.py中指定各个函数的执行顺序
# 博客详情页测试
import time
from selenium.webdriver.common.by import By
from 博客系统测试.common.Utils import MyBlogDriver
class BlogDetail:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=35401"self.driver = MyBlogDriver.driverself.driver.get(self.url)# 验证博客详情页面的用例def detail(self):# time.sleep(2)# 验证时间self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")# 验证标题self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")# 验证博客内容self.driver.find_element(By.CSS_SELECTOR,"#detail > p")# 删除博客用例def SucDel(self):# 查找标题是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.title")# 查找删除按钮self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()# 获取弹窗元素alert = self.driver.switch_to.alert# 获取到弹窗上的内容text = alert.text# 断言进行判断assert text == "确定删除?"alert.accept()
RunTest.py
from 博客系统测试.TestCase import BlogLogin, BlogList, BlogDetail, BlogEdit, BlogDel
from 博客系统测试.common.Utils import MyBlogDriver
# 总运行入口文件
if __name__ == '__main__':# 失败登录测试用例BlogLogin.BlogDriver().loginfail()# 成功登录测试用例BlogLogin.BlogDriver().loginSuc()# # 博客列表页测试用例BlogList.BlogList().Blist()# # 博客详情页测试用例BlogDetail.BlogDetail().detail()BlogDetail.BlogDetail().SucDel()MyBlogDriver.driver.quit()
测试效果如下:
6.”博客的编辑与发布“自动化测试
① 新建一个博客详情页测试文件,命名为:BlogEdit.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(BlogEdit)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功发布博客的函数(SucEdit)和一个失败发布博客函数(FailEdit)
⑥ 测试内容包括:博客标题、博客内容、发布博客按钮等是否存在,以及不写标题写内容能发发布博客,写标题写内容不点击发布博客按钮是否能发布博客,写标题不写内容能否发布博客用例
#写博客页面测试
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from 博客系统测试.common.Utils import MyBlogDriver
class BlogEdit:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_edit.html"self.driver = MyBlogDriver.driverself.driver.get(self.url)# 成功发布博客def SucEdit(self):# time.sleep(5)# 判断能否找到菜单栏的内容 并点击self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()# 找到标题框并写入self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("测试内容1")# 找到输入内容的区域 因为输入内容的区域为第三方插件 是不可交互的 所以我们要找菜单栏可交互的按钮# self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").clear()# self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span").send_keys("今天是测试的第一天")# 找到发布文章按钮 并发布self.driver.find_element(By.CSS_SELECTOR,"#submit").click()self.driver.back()#返回博客列表页面 判断是否有该标题text = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(19) > div.title").textassert text == "测试内容1"# 错误发布博客def FailEdit(self):time.sleep(5)# 判断能否找到菜单栏的内容 并点击self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()#不写标题内容#点击发布博客按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)alert = self.driver.switch_to.alerttext = alert.textassert text == ""alert.accept()# 由于输入框内容为第三方插件未不可交互 即无法测试
RunTest.py
from 博客系统测试.TestCase import BlogLogin, BlogList, BlogDetail, BlogEdit, BlogDel
from 博客系统测试.common.Utils import MyBlogDriver
# 总运行入口文件
if __name__ == '__main__':# 失败登录测试用例BlogLogin.BlogDriver().loginfail()# 成功登录测试用例BlogLogin.BlogDriver().loginSuc()# # 博客列表页测试用例BlogList.BlogList().Blist()# # 写博客页面测试用例BlogEdit.BlogEdit().SucEdit()BlogEdit.BlogEdit().FailEdit()# # 博客详情页测试用例BlogDetail.BlogDetail().detail()BlogDetail.BlogDetail().SucDel()MyBlogDriver.driver.quit()
测试结果如下:
3.自动化测试的特点与亮点
自动化测试的特点和优点包括:
- 自动化测试可以提高测试效率和准确性,比手动测试更快速和稳定。
- 可以重复执行测试用例,确保每次测试的一致性和可靠性。
- 自动化测试可以更好地覆盖各种测试情况,包括大规模的数据和不同的测试场景。
- 可以节省人力资源和时间成本,减少人工干预的可能性。
- 可以更早地发现和修复软件缺陷,提高软件质量和稳定性。
- 可以提供更详尽的测试报告和数据分析,帮助决策者做出更准确的决策。
总的来说,自动化测试能够成为软件开发过程中的重要辅助工具,提高测试效率、减少人为错误,为软件质量的提升和项目的成功交付提供有力支持。
4.完整测试代码连接
仓库存放测试相关用例和代码 (gitee.com)
相关文章:
博客系统自动化测试报告
1.项目背景 基于SSM框架实现的个人博客系统,现有登录注销页面,博客列表页,博客内容页,博客编辑页面。登录即可查看自己曾经发表的博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对博客系统…...
如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)
1. 引言 在 AI 迅猛发展的今天,各类 AI 模型层出不穷,从开源模型(如 DeepSeek、Llama、Qwen)到商业 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每种方案都有其优势与适用…...
目标检测20年(二)
没有看过(一)的可以看看笔者这篇文章: 目标检测20年(一)-CSDN博客 目录 3.2 目标检测数据集和指标 3.2.1 数据集 3.2.1.1 Pascal VOC 3.2.1.2 ILSVRC 3.2.1.3 MS-COCO 3.2.1..4 Open Images 3.2.2 指标 3.3 目…...
【linux】统信操作系统修改默认编辑模式从nano改为vim
统信操作系统修改默认编辑模式从nano改为vim 适用命令update-alternatives --config editor rootuos-PC:~# update-alternatives --config editor 有 3 个候选项可用于替换 editor (提供 /usr/bin/editor)。选择 路径 优先级 状态 ---------------------…...
在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译
在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译 应用——系统工具——终端 suozhangfedora:~$ rpm -aq | grep firefox firefox-131.0.2-1.fc41.x86_64 firefox-langpacks-131.0.2-1.fc41.x86_64 fedora41系统自身安装有f…...
集成学习(下):Stacking集成方法
一、Stacking的元学习革命 1.1 概念 Stacking(堆叠法) 是一种集成学习技术,通过组合多个基学习器(base learner)的预测结果,并利用一个元模型(meta-model)进行二次训练,…...
知道自己鼠标在某个竖直平面上的经纬度信息在这个竖直的平面上的实时坐标
鼠标放上去就开启map.on(mars3d.EventType.mouseMove,结合以下方法实现 callback: function (e) {// 经纬度const mpt LngLatPoint.fromCartesian(e.cartesian)const ptNew proj4Trans([mpt.lng, mpt.lat], "EPSG:4326", CRS.CGCS2000_GK_Zone_3)const …...
【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆
在工业智能化与物联网深度融合的今天,深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板,为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台,RK3506以三核Cortex-A7(1.…...
GLB文件介绍
GLB文件是由支持glTF(GL Transmission Format)标准的软件或工具生成的。glTF是一种开放的3D模型传输格式,而GLB是其二进制版本,通常用于嵌入纹理和模型数据。以下是常见的生成GLB文件的软件和工具: 1. 3D建模软件 • …...
树莓集团数字产业布局:商业智慧的多维呈现
树莓集团在数字产业的布局展现其前瞻性的商业智慧,通过多维度的战略部署,构建一个 শক্তিশালী且富有活力的数字生态系统。 全国产业园布局:构建数字产业生态链 树莓集团通过在全国范围内建设产业园,有效整合资源&#x…...
“智改数转”新风口,物联网如何重构制造业竞争力?
一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接,江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划(2025-2027年)》,提出到2027年,全省制造业企业设备更新、工艺…...
代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字
前言 这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助! 打卡代码随想录算法训练营第55期第八天(づ&a…...
c++ XML库用法
在C中,处理XML文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库: 1. TinyXML-2 简介: TinyXML-2 是一个轻量级的C XML解析库,易于使用且性能良好。特点: 简单易用,API直观。内存占用小,适合嵌入…...
力扣算法Hot100——128. 最长连续序列
题目要求时间复杂度为O(n),因此不能使用两次循环匹配。 首先使用 HashSet 去重,并且 HashSet 查找一个数的复杂度为O(1)外循环还是遍历set集合,里面一重循环需要添加判断,这样才不会达到O( n 2 n^2 n2)判断是否进入最长序列查找循…...
spring-tx笔记
编程式事务与声明式事务的理解 补充:什么是事务? 事务是一个重要概念,尤其在数据库管理系统中。事务是指一组操作。,这些操作要么全部成功执行,要么全部不执行,确保数据的一致性和完整性 编程式事务 编…...
VulnHub-Web-Machine-N7通关攻略
一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...
【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】
文章目录 Overview为什么 DLLP 不需要路由呢?总结Overview 这里介绍些为什么在 PCIe 中只有 TLP(事务层数据包)会被 Switch 和 Root Complex(RC) 路由,而 DLLP(数据链路层数据包)和 Ordered Set 不会被路由。这是因为 TLP 起始于源端口的事务层,结束于目的端口的事务…...
3月21号
今天写了一些题: P1149 [NOIP 2008 提高组] 火柴棒等式 题目描述 给你 n 根火柴棍,你可以拼出多少个形如 ABC 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0∼9 的…...
以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤
以下是使用 Windows 命令行(cmd) 操作 GaussDB(以 GaussDB(for openGauss) 社区版为例) 的详细步骤,涵盖 连接数据库、基本操作、关闭数据库 的全流程: 1. 环境准备 前提条件: 安装 GaussDB&a…...
Spring Boot 3 新特性实战:从理论到实践
引言 Spring Boot 自发布以来,凭借其简洁的配置和强大的功能,迅速成为 Java 开发者的首选框架。随着 Spring Boot 3 的发布,开发者们迎来了更多令人兴奋的新特性。本文将深入探讨 Spring Boot 3 的新特性,并通过实战示例展示如何…...
在 Linux 系统中,路径(Path)用于定位文件或目录的位置。路径分为两种类型:相对路径和绝对路径。它们的核心区别在于路径的起点不同
1. 绝对路径(Absolute Path) 定义: 从根目录 / 开始的完整路径,无论当前在哪个目录下,绝对路径都能唯一指向目标位置。 特点: 以 / 开头。明确且唯一,与当前所在目录无关。 示例: …...
AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用
文章目录 引言 1. 传统 API 的局限性2. MCP(模块化通信协议)的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论:AI 时代的通信新范式 引言 在 AI 驱动的现…...
Jmeter旧版本如何下载
1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1...
XXE漏洞
一、XXE漏洞概述 1. 定义 XXE(XML External Entity Injection)即 XML外部实体注入漏洞,攻击者通过构造恶意XML数据,利用XML解析器的外部实体加载功能,实现 文件读取、内网探测、拒绝服务(DoS)…...
麒麟操作系统安装人大金仓数据库
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下,众多公司积极推进国产化改造进程。在操作系统领域,统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角,逐…...
嵌入式芯片与系统设计竞赛,值得参加吗?如何选题?需要学什么?怎么准备?
2025年全国大学生嵌入式芯片与系统设计竞赛已经正式启动,3月10日大赛通知正式下发,3月10日-19日各赛道的选题也陆续公布,4月25日大赛报名截止,感兴趣的同学可以及时关注! 大赛报名通知: 大赛通知丨2025年嵌…...
dfs刷题排列问题 + 子集问题 + 组和问题总结
文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…...
Win上安装Linux(虚拟机版)
目录 1、下载虚拟机Vmware Fusion 2、linux镜像文件下载(redhat版) 3、redhat镜像安装 4、第一次启动linux系统设置 1、下载虚拟机Vmware Fusion 下载地址:Vmware下载链接 2、linux镜像文件下载(redhat版) 官网…...
从零开发数据可视化
一、可视化模版展示 二、知识及素材准备 div css 布局flex布局Less原生js jquery 的使用rem适配echarts基础 相关js、images、font百度网盘下载链接: 通过百度网盘分享的文件:素材1 链接: https://pan.baidu.com/s/1vmZHbhykcvfLzzQT5USr8w?pwdwjx9…...
访问者模式
访问者(Visitor)模式属于行为型模式的一种。 访问者模式主要用于分离算法和对象结构,从而在不修改原有对象的情况下扩展新的操作。它适用于数据结构相对稳定,而操作(行为)容易变化的场景。 访问者模式允许…...
字符指针的三道例题+算法改进
目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵,每行从左到右递增,每列从上到下递增,编写程序在矩…...
zephyr-中国跨国并购数据(1997-2024.3.8)
Zephyr专注于提供关于跨国并购、合资和投资的数据。本次分享的Zephyr中国跨国并购数据,涵盖了从1997年到2024年3月8日的并购金额、交易类型、交易状态等详细交易记录,可为研究者分析并购趋势与模式、绩效等提供数据支持。 一、数据简介 数据名称&#x…...
UNIX网络编程笔记:套接字
套接字 什么是套接字(Socket)? 套接字(Socket) 是网络编程中的核心概念,可以理解为一种通信端点,用于实现不同设备之间的数据交换。它类似于现实中的“插座”,为应用程序提供了一套…...
协议-CAN-CANopen
是什么? 汽车工程师的总线协议为什么? 1980年代初期,由于没有可满足汽车工程师的总线协议,人们开始开发新的串行总线在底特律举行SAE会议上CAN总线诞生,称之为Automotive Serial Controller Area Network怎么做? 核心本质 两根线上特殊电平的特殊协议张嘴显性电平‘0’,…...
星越L_ 雨刷使用功能讲解
目录 1.向下拨动 2,向上拨动 3.调节雨刷的灵敏度 4.再次向上拨动 5.再向上 6.向内侧拨动 7.后雨刷开启 8.向外侧拨动 9.更换雨刷 1.向下拨动 雨刷单次工作 2,向上拨动 自动雨刷开启 3.调节雨刷的灵敏度 转动滚轮调节雨刷的灵敏度...
关于FastAPI框架的面试题及答案解析
FastAPl是一个现代、快速(高性能)的Web框架,用于构建API,基于Python3.7+的类型提示功能。它由Python开发者SebastianRamirez创建,并且使用了Starlette作为其核心组件以及Pydantic进行数据验证。 文章目录 基础篇1. FastAPI的核心优势是什么?2. 如何定义一个GET请求路由?…...
[7-01-03].SpringBoot3集成MinIo
MinIO学习大纲 一、Spingboot整合MinIo 第1步:搭建SpringBoot项目: 第2步:引入minio依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&q…...
一个KADB测试实践
测试结果 本文档描述xxxx测试中6个典型测试场景的测试结果及背景,旨在对不同数据量,不同存储方式,不同优化器三者的组合优化进行探索,进而为未来的类似测试提供组合优化参考。 数据插入(500万) 5进程批量…...
dockerSDK-Go语言实现
前情提要 本文基于开发一个在线代码运行平台的项目需求上,所以需要挂载目录以达到获得执行文件的目的。 步骤1 首先在docker-compose 文件中,当前容器一定要跟宿主机的套接字进行挂载 version: 3.8 services: code-runner-api: build: context: . d…...
使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!
客户要求导出的excel文件是有好看格式的,当然本文举例模板文件比较简单,内容丰富的模板可以自行设置,话不多说,第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} ,这里的变量名对应的就是…...
C++ string的模拟实现
Hello!!大家早上中午晚上好,昨天复习了string的使用,今天来模拟实现一下string!!! 一、string的框架搭建 1.1首先我们需要一个string的头文件用来做变量、函数、类等声明;再需要一个test文件来做测试,还需…...
Spring AI Alibaba ChatClient使用
一、ChatClient简介 Chat Client:https://java2ai.com/docs/1.0.0-M5.1/tutorials/chat-client/ 1、ChatClient 简介 ChatClient 提供了与 AI 模型通信的 Fluent API,它支持同步和反应式(Reactive)编程模型。与 ChatModel、Messag…...
算法及数据结构系列 - 二分查找
系列文章目录 算法及数据结构系列 - BFS算法 文章目录 二分查找框架思路经典题型二分查找寻找左侧边界寻找右侧边界 刷题875. 爱吃香蕉的珂珂1011. 在 D 天内送达包裹的能力392. 判断子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…...
回归任务训练--MNIST全连接神经网络(Mnist_NN)
import torch import numpy as np import logging from torch.utils.data import TensorDataset, DataLoader from torch.utils.data import DataLoader# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 定义 loss_batch…...
SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
【Linux】VMware17 安装 Ubuntu24.04 虚拟机
目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址:ubuntu-24.04.2-des…...
Python functools 模块的 @lru_cache 装饰器介绍
functools.lru_cache 是 Python 标准库 functools 模块中的一个装饰器,用于实现简单的缓存机制。它通过缓存函数的返回值来提高函数的执行效率,特别是对于那些被多次调用且参数相同的函数。 LRU 缓存机制 LRU 代表 Least Recently Used,即最…...
JavaScript基础-节点操作
在Web开发中,动态地修改网页内容是提升用户体验的重要手段之一。通过JavaScript操作DOM(文档对象模型)中的节点,我们可以轻松地实现这一目标。本文将介绍JavaScript中关于节点操作的基础知识,涵盖创建新节点、插入节点…...
【数据分享】2000—2024年我国乡镇的逐月归一化植被指数(NDVI)数据(Shp/Excel格式)
之前我们分享过2000—2024年我国省市县三级逐月归一化植被指数(NDVI)数据,该数据是基于NASA定期发布的MOD13A3数据集中的月度NDVI栅格数据(可查看之前的文章获悉详情)计算得出。很多小伙伴拿到数据后反馈是否可以处理出…...
Linux中基本命令
目录 ls pwd cd touch mkdir rm cp mv cat less head tail find grep ls 其实大部分命令都是可执行的文件,但有一些命令比如Shell内置命令,它没有对应的独立可执行文件,而是由Shell直接解释执行的。 功能:显示当前目…...