
项目背景
随着互联网线上的业务普及,各类Web管理系统和存储数据和内容的Web线上工具成为企业线上运营的核心载体。为保障系统上线后业务流程流畅,功能稳定、数据准确,避免用户操作异常、功能失效、页面报错等线上问题,需要在产品上线前开展全面的功能测试工作。
本次针对博客系统进行全模块的功能测试,依据产品需求文档,校验系统登录、信息录入、文章的编辑,异常校验等核心功能,排查隐藏缺陷,保证系统满足用户的使用需求、业务逻辑合规、运行稳定,保障产品可以安全、稳定、正常使用。
项目简介
本项目为一款Web业务管理系统
项目业务包括:
登录系统:保障用户在使用正常的账号和密码时能够正常登录,用户信息的验证,登录完成后查找用户的信息是否正确。
博客首页:检查博客菜单模块,以便更快的了解和使用该系统进行内容的存储,以及在提交内容之后的列表页,能够快速查询以往提交的信息内容,方便以后的使用和提取信息。
编辑博客:正常的输入内容查看是否能够正确提交信息,在输入内容的过程中防止提交失败,或者,内容书写错误,以及内容信息查找不到。
博客详情:编辑提交之后,查询该内容是在什么时间进行提交是否记录时间,查看当时编辑的博客标题内容,以及重要信息的记录是否准确。
测试环境
1、操作系统:Windows11
2、浏览器:Microsoft Edge147.0.3912.72
3、测试工具:Postman、JMeter、Selenium
4、数据库:MySQL
涉及到的测试类型
功能测试:
进行了用户登录和注册内容,以及首页的信息查看和菜单模块内容,还有编辑博客页面的内容,最后是博客详情界面,问题:在编辑博客之后,系统提交成功,结果在博客详情页里,找不到编辑之后的博客内容
性能测试:
活跃线程数随时间变化,作用:展示压测过程中并发用户数的变化曲线验证阶梯式压测是否正常进行

响应时间随时间变化,作用:记录压测过程中每个时间点的平均响应随时间变化,判断系统响应是否稳定,是否存在性能瓶颈。是判断系统性能衰减,是否出现慢请求的关键指标

TPS随时间变化
作用:统计压测过程中系统每秒成功处理的请求数(吞吐量),是衡量系统处理能力的核心指标
直接反映系统在当前并发下的最大处理能力,判断系统的性能上限

自动化测试:
通过Python和Selenium的相互配合,写下,登录系统,首页,博客详情页,编辑博客的自动化脚本
登录页面
创建驱动对象
python
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service
class Driver:
driver=None
def __init__(self):
options = webdriver.EdgeOptions()
self.driver=webdriver.Edge(service=Service("D:\\edgedriver_win64\\msedgedriver.exe"))
self.driver.implicitly_wait(3)
def getScreenshot(self):
#创建屏幕截图
dirname=datetime.datetime.now().strftime("%Y-%m-%d")
#判断dirname文件夹是否存在
if not os.path.exists("../images/"+dirname):
os.mkdir("../images/"+dirname)
filename=sys._getframe().f_back.f_code.co_name+"-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
self.driver.save_screenshot("../images/"+dirname+"/"+filename)
BlogDriver=Driver()
驱动对象:控制浏览器设备的遥控器,不创建驱动对象,代码就碰不到浏览器
python
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogLogin:
url=""
driver=""
def __init__(self):
self.url="http://49.235.61.184:19090/blog_login.html"
self.driver=BlogDriver.driver
self.driver.get(self.url)
#成功登录的测试用例
def LoginSucTest(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.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
BlogDriver.getScreenshot()
#异常登录测试用例
def LoginFailedTest(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("12345")#错误的密码
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
BlogDriver.getScreenshot()
login=BlogLogin()
login.LoginSucTest()
博客详情页
python
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
#博客首页测试用例
class BlogList:
url=""
driver=""
def __init__(self):
self.url = "http://49.235.61.184:19090/blog_list.html"
self.driver = BlogDriver.driver
self.driver.get(self.url)
#测试首页(登录情况下)
def ListTestByLogin(self):
#测试博客标题是否存在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title")
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.desc")
#测试博客按钮是否存在
self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > a")
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
#添加屏幕截图
BlogDriver.getScreenshot()
编辑博客
python
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from common.Utils import BlogDriver
class BlogEdit:
url=""
driver=""
def __init__(self):
self.url="http://49.235.61.184:19090/blog_edit.html"
self.driver=BlogDriver.driver
self.driver.get(self.url)
def EditSucTestByLogin(self):
self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试程序")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
adult=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title").text
assert adult=="自动化测试创建"
BlogDriver.getScreenshot()
bug简述
UI显示问题,标题文字过长时,未自动换行或省略,超出页面边界,导致页面排版出错
缺陷:编辑博客时,原内容无法正常回显,输入框为空,导致用户需要重新输入内容
缺陷:发布博客时,点击提交按钮,系统提示发布成功,但在博客列表页无法看到新发布的内容,数据未保存到后台。
测试结论
本次针对博客系统的功能与性能测试已全部完成,测试覆盖了用户登录、博客列表、详情页等核心业务模块,结合JMeter阶梯式压测方案,对系统在不同并发场景下的稳定性、响应时间及吞吐量进行了全面验证,测试结论如下:
- 核心功能验证结论
系统各模块功能整体符合业务需求:用户登录、博客发布、列表查询、详情页访问等关键流程均能正常执行,正向场景测试通过率100%;表单校验、异常提示、页面跳转等交互逻辑符合预期,未发现阻断业务流程的严重缺陷。测试过程中发现的少量UI排版与文案细节问题,均不影响系统核心功能的正常使用,已记录并纳入后续优化范围。
- 性能压测验证结论
本次阶梯式压测(并发线程数2→5→10)结果表明:
-
活跃线程数按预设模型平稳增长,压测执行过程稳定;
-
系统响应时间随并发增加仅小幅上升,无剧烈波动或性能衰减现象;
-
吞吐量(TPS)随并发提升同步增长,在10并发场景下达到稳定峰值,无TPS下降或服务中断情况。
整体来看,系统在目标并发压力下表现稳定,未出现性能瓶颈,能够满足当前业务场景下的用户访问需求。
- 综合结论与上线建议
本次测试验证了系统功能的完整性、逻辑的正确性及性能的稳定性,核心业务流程无严重缺陷,性能指标满足设计预期。结合本次测试结果,建议该版本系统可按计划上线发布,同时针对测试中发现的轻微缺陷进行后续迭代优化,进一步提升用户体验。