目录

一、引言

二、项目背景

三、项目功能

1)初始登录界面

2)博客首页

3)博客详情页

4)博客编辑页

四、测试工具

1)基础操作系统环境

2)浏览器环境

3)开发与测试工具环境

4)依赖库环境

五、测试模块

六、项目实践

1)设计自动化测试用例

2)编写项目测试脚本

1. 测试脚本分布

2. 配置文件(pz.py)

3. 登录页测试(dl.py)

4. 首页测试(sy.py)

5. 详情页测试(xq.py)

6. 编辑页测试(bj.py)

7. 运行文件(run.py)

3)执行测试

1. 登录测试

2. 首页测试

3. 详情页测试

4. 编辑页测试

5. 部分自动化截图展示

七、项目亮点与优化点

1)项目亮点

2)待优化点

八、项目结论


一、引言

在软件测试领域,自动化测试凭借其高效、可重复的优势,成为保障项目质量的重要手段。本文将以博客系统为实际案例,实现自动化测试,从测试用例设计、脚本开发到测试报告补充,完整拆解 C++ 方向 Web 自动化测试的实施流程。

二、项目背景

随着互联网内容生态的蓬勃发展,博客作为知识分享和观点交流的重要平台,凭借其便捷的数字化学习优势,正逐渐优化传统的纸质笔记形式。这种高效的知识载体深受用户喜爱。为确保为用户提供稳定、易用且优质的博客体验,必须对博客系统进行全面测试。通过模拟真实用户操作场景,我们将验证系统功能完整性、检验交互逻辑合理性,及时发现并修复潜在问题,从而确保系统能够高效支持创作者完成内容发布、阅读和修改等操作。

三、项目功能

1)初始登录界面

覆盖多种登录身份验证场景,包括用户登录,验证登录流程、错误提示等功能,保障用户身份校验及系统访问权限控制准确。

2)博客首页

信息展示:呈现个人信息(头像、昵称等 )、博客列表(名称、创建时间、内容等 ),同时展示 多维度实用提示及对应跳转(如跳转博客详情、编辑页等 ),满足用户快速浏览内容需求。

登录状态交互:区分登录与未登录状态下的功能可见性与操作权限,如登录后可进行个性化操作,未登录则引导登录,保障系统交互逻辑合理。

3)博客详情页

基础信息呈现:展示博客作者个人信息、博客信息,验证互动功能流程及数据反馈准确性。

关联功能跳转:可跳转至实用提示对应页面,保障页面间交互流畅,提升用户操作连贯性。

4)博客编辑页

内容编辑交互:支持标题、内容输入,发布 / 保存 / 预览等操作逻辑,确保创作者能高效编辑、发布博客内容,辅助创作者修正内容。

状态联动:与首页、详情页状态关联,发布后同步更新展示,保障系统内数据一致性,让用户操作结果实时反馈。

四、测试工具

1)基础操作系统环境

系统版本:Windows 11(64 位操作系统)

环境优势:具备稳定的图形化界面支持,兼容 Chrome、Edge 等主流浏览器及 PyCharm 开发工具,可流畅运行 Selenium 自动化测试脚本,满足本地测试与调试需求。

2)浏览器环境

Google Chrome 浏览器

作用:作为自动化测试核心执行浏览器,配合 Selenium ChromeDriver 驱动,实现页面元素定位、交互操作(如登录、输入、点击发布等)及截图功能,保障测试流程的稳定性与兼容性。

3)开发与测试工具环境

PyCharm(Python 3.7 解释器)

核心功能:作为 Python 开发 IDE,提供代码编辑、语法校验、断点调试、脚本运行等功能,支持集成 Selenium、unittest 等测试库;

解释器配置:采用 Python 3.7 版本,确保与项目依赖的 Selenium 版本(如 3.x/4.x)、webdriver-manager 等库兼容,避免因版本不匹配导致的脚本执行异常。

Xmind

作用:用于梳理测试需求、设计测试用例,通过思维导图形式拆解博客系统功能模块(如登录、首页、编辑页、详情页)的测试点,清晰呈现测试范围与用例逻辑,便于团队对齐测试目标与执行计划。

4)依赖库环境

除上述工具外,需通过 PyCharm 的pip工具安装以下核心依赖库,确保自动化脚本正常运行:

Selenium:自动化测试核心库,提供操作浏览器、定位元素、模拟用户交互的 API;

webdriver-manager:自动管理 ChromeDriver、EdgeDriver 版本,避免手动下载驱动及版本不兼容问题;

datetime、os、sys:Python 内置库,分别用于生成截图时间戳、管理截图文件路径、获取调用方法名,支撑测试结果记录与文件管理功能。

五、测试模块

测试覆盖博客系统 4 个核心页面,每个页面区分 “登录” 与 “未登录” 两种状态,确保功能与权限验证全面性:

测试模块核心测试场景
登录页(blog_login.html)1. 正常登录(用户名 lisi / 密码 123456);
2. 异常登录(账号密码均错、账号错、密码错)
首页(blog_list.html)1. 登录状态:验证博客信息(标题、内容、按钮)与个人信息(昵称、头像)加载;
2. 未登录状态:验证跳转登录页逻辑
详情页(blog_detail.html)1. 登录状态:验证博客标题、时间、内容加载及 “编辑 / 删除” 按钮功能;
2. 未登录状态:验证权限拦截与登录跳转
编辑页(blog_edit.html)1. 登录状态:正常发布(输入标题 “Jmeter 测试”)、异常发布(无标题);
2. 未登录状态:验证发布拦截与登录跳转

六、项目实践

1)设计自动化测试用例

测试用例设计围绕系统功能分层展开,已梳理成思维导图。覆盖登录界面、首页信息展示、详情页交互、编辑页内容发布等核心功能,测试执行将严格对照导图拆解的子场景验证。

2)编写项目测试脚本

根据测试用例,搭建自动化测试框架并编写相应的测试脚本。

1. 测试脚本分布

为了简化测试流程,我们可以将浏览器配置参数提取到配置文件中。通过读取配置文件,测试脚本能够快速获取所需的浏览器对象和URL参数,从而避免重复配置。这种方法不仅提高了测试效率,还使测试代码更加简洁易维护。

关于相册功能的注意事项:

在自动化截图过程中,系统弹窗是由浏览器内核/操作系统直接渲染生成的,不属于页面DOM元素。由于屏幕截图功能仅能捕获页面DOM元素,因此在项目测试时无法截取到这些弹窗内容。在执行测试时,如果必须截图,则需要手动设置程序强制等待截图。

执行入口,按 “登录测试→首页测试→详情页测试→编辑页测试” 顺序执行,确保测试流程连贯,最终关闭浏览器释放资源。

2. 配置文件(pz.py)

import datetime
import os.path
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager#创建一个浏览器对象
class Driver:driver = ""def __init__(self):options = webdriver.ChromeOptions()self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)self.driver.implicitly_wait(2)# 创建屏幕截图def getScreeShot(self):# 图片文件名称2025-08-29-XXXXXX.png# 图片路径./ceshitupian/2025-08-29/2025-08-29-XXXXXX.png# 文件夹名称dirname = datetime.datetime.now().strftime("%Y-%m-%d")# 判断dirname文件夹是否已经存在# 不存在则创建文件夹if not os.path.exists("../ceshitupian/" + dirname):os.mkdir("../ceshitupian/" + dirname)# 设置图片文件名称2025-08-29-XXXXXX.png#sys._getframe().f_back.f_code.co_name 用来获取调用的方法名字filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"self.driver.save_screenshot("../ceshitupian/" + dirname + "/" + filename)BlongDriver = Driver()

3. 登录页测试(dl.py)

import time
from selenium.webdriver.common.by import By
from common.pz import BlongDriver#登录界面
class BlongLogin:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver = BlongDriver.driverself.driver.get(self.url)#成功登录def LoginSucTest(self):self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#添加截图BlongDriver.getScreeShot()#登录成功后有个人信息显示#以昵称为例子检测#显示昵称则成功登录#self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")#通过页面差异检验ret = self.driver.find_elements(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")# 遍历元素for i in ret:print("页面右上角信息显示(有注销则登录成功,无则没有登录):""",i.text)time.sleep(1)#返回登录页面,测试登录失败情况#self.driver.back()#time.sleep(1)#异常登录def LoginFailTest(self):#多次输入send_keys会造成关键词输入的拼接#所以先clear删除再输入#都错误的测试self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lis")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)alert = self.driver.switch_to.alert# 验证登录错误原因print("弹窗内容(账号密码都错误):", alert.text)alert.accept()time.sleep(2)#账号错误测试self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lis")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)alert = self.driver.switch_to.alert# 验证登录错误原因print("弹窗内容(账号错误,密码正确):", alert.text)alert.accept()time.sleep(2)#密码错误测试self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)alert = self.driver.switch_to.alerttime.sleep(2)# 验证登录错误原因print("弹窗内容(账号正确,密码错误):", alert.text)alert.accept()time.sleep(2)#self.driver.quit()#login = BlongLogin()
#login.LoginSucTest()
#login.LoginFailTest()

4. 首页测试(sy.py)

import time
from selenium.webdriver.common.by import By
from common.pz import BlongDriver#博客首页
class BlongList:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_list.html"self.driver = BlongDriver.driverself.driver.get(self.url)#测试首页(登录情况下)def ListTestByLogin(self):#博客信息#测试博客标题是否存在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.right > div:nth-child(1) > div.desc")#测试按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")#个人信息是否存在(昵称、文章、分类……)#昵称是否存在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.left > div > img")#输出信息确认测试完成#输出博客标题ret = self.driver.find_elements(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.title")# 遍历元素for i in ret:print("首页博客标题:", i.text)print("首页登录状态测试完成")#添加屏幕截图BlongDriver.getScreeShot()#测试首页(未登录情况下)def ListTestFail(self):#先注销在访问self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()#再次访问ret = self.driver.find_elements(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")# 判断逻辑if ret:logout_text = ret[0].text.strip()print(f"页面右上角信息显示:{logout_text} → {'登录成功' if logout_text == '注销' else '登录状态异常'}")else:print("页面右上角未找到“注销”元素 → 未登录")print("首页没有登录状态测试完成")

5. 详情页测试(xq.py)

from selenium.webdriver.common.by import By
from common.pz import BlongDriver#测试博客详情页
class BlongDeail:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=158477"self.driver = BlongDriver.driverself.driver.get(self.url)#登陆状态下博客详情页def DetailTestByLogin(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.date")#检查内容self.driver.find_element(By.CSS_SELECTOR,"#detail > p")# 输出信息确认测试完成# 输出博客内容ret = self.driver.find_elements(By.CSS_SELECTOR,"#detail > p")# 遍历元素for i in ret:print("博客详情页内容:", i.text)print("博客详情页登录状态测试完成")#屏幕截图BlongDriver.getScreeShot()#详情页测试(未登录情况下)def DetailFail(self):#先注销在访问self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()#再次访问ret = self.driver.find_elements(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")# 判断逻辑if ret:logout_text = ret[0].text.strip()print(f"页面右上角信息显示:{logout_text} → {'登录成功' if logout_text == '注销' else '登录状态异常'}")else:print("页面右上角未找到“注销”元素 → 未登录")print("博客详情页没有登录状态测试完成,跳转至首页,需要重新登录")

6. 编辑页测试(bj.py)

import time
from selenium.webdriver.common.by import By
from common.pz import BlongDriver
#测试博客编辑页面
class BlongEdit:url = ""driver = ""def __init__(self):self.url = "hhttp://8.137.19.140:9090/blog_edit.html"self.driver = BlongDriver.driverself.driver.get(self.url)#正确发布博客(登陆状态下)def EditSucTestByLogin(self):time.sleep(1)#点击写博客,开始编辑博客self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("Jmeter测试")#菜单栏无法元素无法定位#博客系统编辑区域默认情况下就不为空,可以暂不处理#菜单栏元素#self.driver.find_element(By.CSS_SELECTOR,"# editor > div.editormd-toolbar > div > ul > li:nth-child(21)").click()#直接点击发布按钮来发布博客self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#点击完成之后出现页面的跳转,页面跳转需要加载时间time.sleep(3)actual=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title").textprint("编辑博客测试标题:"+actual)assert actual == "Jmeter测试"#屏幕截图BlongDriver.getScreeShot()print("博客编辑页登录状态,正常发布博客测试完成")def EditTestNo(self):time.sleep(1)#点击写博客,开始编辑博客self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()time.sleep(1)#不编辑,直接点击发布按钮来发布博客self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)#出现弹窗alert = self.driver.switch_to.alert# 退出弹窗alert.accept()time.sleep(1)# 通过页面差异检验ret = self.driver.find_elements(By.CSS_SELECTOR, "#submit")# 遍历元素for i in ret:print("需要重新输入标题后,再发布文章")time.sleep(1)# 屏幕截图BlongDriver.getScreeShot()print("博客编辑页登录状态,异常发布博客测试完成")#博客编辑页测试(未登录情况下)def EditFail(self):time.sleep(1)#先注销在访问self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()time.sleep(2)# 点击写博客,开始编辑博客self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("未登录Jmeter测试")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#再次访问ret = self.driver.find_elements(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")# 判断逻辑if ret:logout_text = ret[0].text.strip()print(f"页面右上角信息显示:{logout_text} → {'登录成功' if logout_text == '注销' else '登录状态异常'}")else:print("页面右上角未找到“注销”元素 → 未登录")print("编辑博客页没有登录状态测试完成,跳转至首页,需要重新登录")

7. 运行文件(run.py)

from test import dl
from test import sy
from test import xq
from test import bj
from common.pz import BlongDriverif __name__ == "__main__":dl.BlongLogin().LoginFailTest()dl.BlongLogin().LoginSucTest()# 登陆成功之后就可以调用博客首页测试首页的用例(登陆状态)sy.BlongList().ListTestByLogin()# 注销后测试首页(未登录状态)sy.BlongList().ListTestFail()# 测试登录状态下的博客详情页dl.BlongLogin().LoginSucTest()xq.BlongDeail().DetailTestByLogin()# 测试没有登录状态下的博客详情页xq.BlongDeail().DetailFail()# 测试登录状态下正常发布的博客编辑页面dl.BlongLogin().LoginSucTest()bj.BlongEdit().EditSucTestByLogin()# 测试登录状态下错误发布的博客编辑页面bj.BlongEdit().EditTestNo()# 测试没有登录状态下的博客编辑页面bj.BlongEdit().EditFail()#指定浏览器的退出BlongDriver.driver.quit()

3)执行测试

1. 登录测试

测试程序运行结果:

登录成功场景测试结果

输入正确用户名 "lisi" 和密码 "123456" 后点击登录按钮。

系统跳转至登录后页面,通过定位页面右上角元素“注销”进行验证。

控制台输出该元素文本内容,若显示 "注销" 相关信息,则表明登录成功,输出见运行结果。

通过 back () 方法返回登录页面,准备执行登录失败测试。

登录失败场景测试结果

在输入错误信息前,都清空输入框内容。

账号密码均错误:输入 "lis" 和 "12345" 点击登录,系统弹出提示弹窗,控制台输出弹窗文本内容,点击 "确定" 关闭弹窗

账号错误、密码正确:输入 "lis" 和 "123456" 点击登录,系统弹出提示弹窗,控制台输出弹窗文本内容,点击 "确定" 关闭弹窗

账号正确、密码错误:输入 "lisi" 和 "12345" 点击登录,系统弹出提示弹窗,控制台输出弹窗文本内容,点击 "确定" 关闭弹窗

以上错误测试中,在关闭弹窗后均返回登录界面,所有场景测试完成后,关闭浏览器驱动。

2. 首页测试

登录状态测试运行结果:

首页信息截屏:

登录状态下,首页博客信息(标题、内容、按钮)与个人信息(昵称、头像)均完整加载,文本输出与截图功能正常。

注销后未登录状态,测试运行结果:

未登录状态下,访问首页时,直接跳转至登录界面。

3. 详情页测试

测试运行结果(登录及未登录):

登录状态下博客详情页信息:

未登录状态下,访问博客详情时,通过“注销按钮”是否存在观测,页面将直接跳转至登录界面。

4. 编辑页测试

测试运行结果:

登录状态下可正常发布博客,标题显示正确。

登录状态下标题为空时系统会拦截发布并提示。

点击后,继续返回编辑页。

未登录状态下无法发布博客,权限控制有效。

点击发布文章后,跳转至登录页:

5. 部分自动化截图展示

七、项目亮点与优化点

1)项目亮点

自动化效率提升

脚本可重复执行,避免手动测试的重复性操作,单轮测试执行时间缩短至 5 分钟内。

结果可视化

截图按 “日期 + 方法名” 分类存储,控制台输出详细日志(如弹窗内容、博客标题),问题可追溯。

兼容性保障

通过 webdriver-manager 自动管理驱动版本,兼容不同 Chrome 版本,降低环境配置成本。

权限控制全面

覆盖 “登录 / 未登录” 两种状态,确保未授权操作被合理拦截,符合系统安全设计。

2)待优化点

等待机制

当前使用time.sleep()固定等待,若页面加载延迟易导致元素定位失败,后续可替换为显式等待(WebDriverWait),提升脚本稳定性;

异常场景扩展

未覆盖 “网络中断”“页面超时” 等异常场景,可增加异常处理逻辑,提升测试健壮性。

八、项目结论

本项目通过自动化测试完整验证了博客系统的核心功能,所有测试用例执行通过,系统在 “功能完整性”“权限控制”“交互逻辑” 上均符合预期:

  1. 登录页能准确校验账号密码,异常提示清晰。
  2. 首页、详情页在登录状态下加载完整信息,未登录状态跳转登录页,权限控制合理。
  3. 编辑页支持正常发布与异常拦截,发布后数据同步至首页,数据一致性良好。
  4. 脚本框架模块化程度高,可复用性强,截图记录便于后续维护与问题排查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94981.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94981.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94981.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R 语言 eulerr 包绘制韦恩图:比例精准

在数据可视化中,韦恩图是展示多组数据交集关系的常用工具,尤其在生物信息(如基因差异表达分析)、统计分析等领域高频使用。但传统绘图工具常面临椭圆比例失衡、数值显示混乱、样式调整繁琐等问题,而 R 语言的eulerr包恰好能解决这些痛点 —— 它支持按数据比例自动适配图形…

CRYPT32!CryptMsgUpdate函数分析和asn.1 editor nt5inf.cat 的总览信息

0000: 30 83 09 69 2f ; SEQUENCE (9692f Bytes) 0005: 06 09 ; OBJECT_IDENTIFIER (9 Bytes) 0007: | 2a 86 48 86 f7 0d 01 07 02| ; "PKCS 7 已签名 (1.2.840.113549.1.7.2)" 0010: …

04数据库约束实战:从入门到精通

感谢黑马程序员提供的免费课程约束概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。常见的几种约束:注意:约束是作用于表中字段上的,可以在创…

WPF+IOC学习记录

最近在学WPF,上一篇文章记录了WPF的MVVM自己实现和用框架的区别(WPFMVVM入门学习),接下这篇文章记录一下在WPF中使用IOC,这里演示用的是微软官方的DependencyInjection,也可以用其他的第三方框架。 项目源…

从零开始学习单片机16

STM32单片机STM32和51单片机的区别51单片机的外设资源少,寄存器少,运行速度慢,价格便宜,容易上手STM32单片机的外设资源更多,寄存器多,运行速度相对快,价格相对贵,上手相对较难STM32…

[特殊字符]论一个 bug 如何经过千难万险占领线上

谨以此文献给每一个曾与 Bug 搏斗、最终却目睹它成功上线的你 本文旨在揭露 Bug 的狡猾,绝非鼓励以下行为。若你照做,后果自负🐶每一个在线上逍遥法外的 Bug,都不是偶然。它是一场精心策划的奇迹,是开发、联调、测试、…

Day12-python文件操作(二)

目录前言一、Excel文档操作1.1、xlrd和xlwt库1.2、openpyxl库1.3、pandas库总结前言 今天继续学习文件操作相关内容,为后续办公自动化打基础。 一、Excel文档操作 1.1、xlrd和xlwt库 如果要兼容 Excel 2007 以前的版本,也就是xls格式的 Excel 文件&am…

CollageIt:简单易用的照片拼贴工具

在数字图像处理领域,制作照片拼贴是一种常见的创意表达方式。CollageIt作为一款体积小巧、简单易用的照片拼贴工具,能够帮助用户轻松将多张图片拼合成一张精美的拼贴画。它不仅操作简单,还支持多种图片格式,确保用户可以快速制作出…

Java全栈工程师的实战面试:从基础到微服务的全面解析

Java全栈工程师的实战面试:从基础到微服务的全面解析 一、开场介绍 面试官:你好,欢迎来到我们公司。我是今天的面试官,负责技术部分的评估。请先简单介绍一下你自己。 应聘者:您好,我叫李明,25岁…

驱动开发系列68 - GLSL编译器实现 - 算数指令折叠及访存优化

一 : 指令合并概述 指令折叠的意思,原本一个语句会产生多条指令,通过折叠,可以删除一些中间指令,减少指令数量,并且能够减少寄存器占用。提高执行效率。 举一个例子: MUL A, B, 4 ; A = B * 4MAD D, A, 2, F ; D = A * 2 + F MAD G, A, 3, I ; G …

深入解析Qt节点编辑器框架:高级特性与性能优化(四)

文章目录一、高级交互特性:超越基础操作的用户体验提升1. 节点组管理:折叠与嵌套的层级组织2. 智能连接线路由:避免交叉与视觉混乱3. 批量操作与快捷键:提升操作效率二、性能优化:应对大规模节点场景的核心策略1. 图形…

Python 入门操作指南

引言 Python 是一种简单易学却功能强大的编程语言,广泛应用于数据分析、人工智能、Web 开发等领域。对于初学者而言,掌握 Python 的入门操作是迈向编程世界的第一步。本文将以总分总的结构,系统介绍 Python 的安装方法、推荐的开发工具、第一个 Python 程序示例,以及包管理…

ZooKeeper 安装配置

前言 有时会需要安装开源的大数据集群进行测评或者验证问题,已经装过很多遍了,所以想系统的总结整理一下各个组件的安装部署,包括 Zookeeper、Hadoop、Hive、Spark 等。 版本 Zookeeper 3.5.6 3.8.4 3.9.3 初始化 包括主机名修改、SSH互…

考研数据结构Part3——二叉树知识点总结

一、前言 二叉树是一种特殊的树形结构,每个节点最多有两个子节点,分别称为左子树和右子树。其特点是子树有严格的左右之分,顺序不可颠倒。从历年真题来看,二叉树的链式存储实现、遍历算法、属性统计是高频考点,常以选择…

网络与信息安全有哪些岗位:(12)威胁分析师

今天是七夕节,首先祝大家早遇良缘、有情人终成眷属!!七夕节快乐、工作顺利、学业有成~~ 想知道网络与信息安全领域有哪些具体岗位吗?此前我们已陆续介绍网络安全工程师、渗透测试工程师、SOC 总监、SOC 工具运维工程师等核心角色&…

mysql双机热备(主主模式)

一、环境准备 主机名ip操作系统备注node01192.168.48.91CentOS Linux 7 (Core)mysql主库node01192.168.48.92CentOS Linux 7 (Core)mysql主库192.168.48.90漂移IP(VIP) centos7镜像下载地址: https://mirrors.aliyun.com/centos/7.9.2009/…

微积分 | 积分代换

注:本文为 “微积分 | 积分代换法 ” 相关合辑。 英文引文,机翻未校, 中文引文,略作重排。 未去重,如有内容异常,请看原文。 Integration by Substitution 积分代换法 May 23, 2018 / By Dave Peterson …

循环高级(1)

1.无限循环2.break3.coutinue4.练习1 打印矩形&#xff08;循环嵌套&#xff09;5.练习2 打印直角三角形#include<stdio.h> int main() {/*打印一个5行5列的三角形效果如下&#xff1a;***** ***** ***** ***** *****…

vpp开启nat,分片包丢包问题分析与解决

现象描述两个网口都开启nat output-feature&#xff0c;路由模式进行大包转发&#xff0c;网络不同&#xff0c;小包转发没问题。通过trace发现&#xff0c;在nat44-ed-in2out-output-slowpath节点丢包。Packet 503:50:43:447292: handoff_traceHANDED-OFF: from thread 2 trac…

深入解析交换机端口安全:Sticky MAC的工作原理与应用实践

深入解析交换机端口安全&#xff1a;Sticky MAC的工作原理与应用实践在当今企业网络环境中&#xff0c;未授权设备接入是常见的安全威胁之一&#xff0c;而Sticky MAC技术正是解决这一问题的利器。在网络安全管理中&#xff0c;端口安全是保护网络基础设施的第一道防线。Sticky…