我的博文天地测试报告
我的博文天地测试报告
文章目录
- 我的博文天地测试报告
- 一.项目背景
- 二.项目功能
- 2.1 功能介绍
- 三.测试分类
- 3.1 功能测试
- 3.1.1 测试用例
- 3.1.2 实际执行测试的部分操作步骤/结果的截图
- 3.2 自动化测试
- 3.3 性能测试
- 3.1.2 用户登录
- jmeter性能测试结果
- 性能测试遇到的困难
- 3.4 性能测试报告
- 在index.html中查看性能报告
- 四.项目总结
一.项目背景
本项目旨在开发一个简单的个人博客系统,通过这个自己的系统来管理掌握的知识,使其能够有效的进行归纳。本项目采用前后端分离的方式实现,并借助数据库存储相关数据,最终将系统部署到云服务器上。前端主要由登录页、列表页、详情页、编辑页和注册页这五个页面构成,通过与后端结合,实现了以下主要功能。
二.项目功能
该个人博客系统主要实现了以下几个功能:登录、注册、写博客、博客详情、编辑博客、搜索博客以及删除博客等功能。
2.1 功能介绍
用户注册: 可以在这个页面通过输入用户名、电话号码、密码以及Github网址(可以选择不填写)注册一个新用户。在登录界面可以根据用户名以及密码进行登录。
用户登录: 可以在这个页面通过输入用户名、密码,输入正确的密码就可以登录进入博客列表页。其他情况会在下方显示对应的错误信息。在登录页面右上角存在主页、写博客和注册两个按钮,但是在未登录情况下点击"主页"和"写博客"均只会跳转到登录页面,只有点击"注册"时才会进入注册页面进行用户注册。
博客列表展示 : 可以在列表页查看所有的博客简介,其包括博客标题、发布时间以及内容概要。点击"查看全文"可以进入文章详情页查看文章详情。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有主页、写博客和注销三个功能:主页即列表页,写博客即博客编辑页,注销即注销当前登录用户,回到登录页面。
博客详情展示: 在列表页面点击“查看全文"按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在右上角同样有主页、写博客、注销三个功能。博客详情页左侧会显示当前文章这种的文章数以及分类数等模块。如果该博客还是当前登录用户发布的,则会在文章的最下面会有编辑和删除的两个按钮。点击"编辑"就会进入编辑页面进行博客内容的修改。 点击"删除"即删除该篇博客,删除之后就会跳转到列表页面,该篇博客就被成功删除并且不会在列表界面再次显示。
写博客: 在登录之后的任意界面均可以点击“写博客"之后就会进入写博客页面,此时就可以使用markdown用法进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到列表页。
编辑博客: 在博客详情页点击"编辑"按钮就会跳转到博客编辑页,此时就可以进行博客内容的修改。点击"更新文章"就可以进行博客的更新,此时就会跳转回博客列表页面。
搜索博客: 在博客列表页(主页)上方可以通过输入关键词,搜索出所有包含该关键词的博客简介,其包括博客标题、发布时间以及内容概要。
三.测试分类
3.1 功能测试
3.1.1 测试用例

3.1.2 实际执行测试的部分操作步骤/结果的截图
- 注册异常




2. 正常登录

-
写博客异常

-
写博客正常,发布成功并查看详情页


-
编辑博客
在上面的博客详情页中点击编辑,并修改博客标题

通过博客详情查看到刚才编辑的博客

-
删除博客

在博客详情页中点击删除


可看出刚才写的博客已经被删除了

- 注销
点击注销回到登录页面


3.2 自动化测试
自动化测试
3.3 性能测试
使用JMeter进行了简单的性能测试:对登录、编写博客、获取博客列表、获取用户信息、删除博客等功能进行了简单的性能测试。
- 创建Stepping Thread Group (需要添加插件 Custom Thread Groups) 并配置线程数等信息进行性能测试,配置如图。

- 添加事务控制器将这些接口统一视为一个事务进行性能测试。
- 添加HTTP信息头管理器将用户登录产生的jwtToken存入user_token中。实现提取登录接口返回值里的data数据,作为列表页接口的请求头信息。
- 添加HTTP请求默认值并配置测试接口的协议、IP、端口号和内容编码(UTF-8)。
- 添加监听器查看测试结果
- 添加聚合报告可以看到性能测试过程中整体的数据变化
- 添加Response Times Over Time来监听整个事务运行期间的响应时间
- 添加 Transactions per Second 来分析系统吞吐量。这个指标反映了系统同一时间内处理业务的最大能力。TPS值越高,说明系统的处理能力越强。
3.1.2 用户登录
- 设置HTTP请求为POST,路径为“/user/login”。
- 通过使用配置元件的CSV数据文件设置 ,从有多个用户名和密码的CSV文件中循环读取username和password。配置如下

- 添加JSON提取器将返回值信息中的data数据放进jwtToken中。
- 添加JSON断言,用来判断返回结果是否正确。
jmeter性能测试结果
测试进行中:

测试结果:
(1) 聚合报告:

(2)响应时间

分析:在图表中,不同操作的响应时间差异较大。例如,“博客列表页” 的响应时间波动较为明显,在某些时间点达到了较高的值,接近 540 毫秒。并且相对其他功能的响应时间要长很多,说明该接口还需要进行优化;而 “删除博客” 的响应时间相对较为平稳,但也有一定的波动。这说明系统在处理不同功能时的性能表现不一致,部分功能可能需要更多的优化以降低响应时间。
(3)吞吐量(每秒事务率)

分析:图表中可以看到,所有接口的吞吐量在测试过程中呈现出一定的波动,但整体保持在 20 - 45 个事务每秒之间。在还没开始结束线程的测试后期,吞吐量有所下降,可能是因为系统逐渐达到了其处理能力的极限,或者出现了资源瓶颈等问题。
性能测试遇到的困难
做压测时,并发一段时间后,会报java.net.BindException: Address already in use: connect
原因:
windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致在短时间内跑大量的请求时将端口占满了,导致如上报错。
解决方法:
在jmeter所在机器下进行如下操作:
- cmd中输入regedit命令打开注册表
- 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters

- 添加一个新的DWORD,名字为MaxUserPort
- 然后双击MaxUserPort,输入数值数据为 65534 ,基数选择十进制
- 重启机器
3.4 性能测试报告
JMeter测试报告是一个全面而详细的文档,它提供了关于测试执行结果的详细信息,帮助用戶全面评 估系统的性能并进行性能优化。 生成性能测试报告的命令:
Jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
-n : 无图形化运行
-t : 被运行的脚本
-l : 将运行信息写入日志文件,后缀为jtl的日志文件
-e : 生成测试报告
-o : 指定报告输出目录
注意:日志文件和目录可以不存在,若为已经存在的情况下需要保证内容为空,否则会出现错误!

(1)进入到存放上面测试(.jmx文件)的目录

(2 ) 输入如 Jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录 的指令进行性能测试并导出测试报告。

运行结束:

性能测试报告生成成功后,在PerformanceTestReport文件夹下将出现以下内容:

双击index.html即是性能测试报告
在index.html中查看性能报告
完整报告内容
响应时间:

响应时间分布:

四.项目总结
该项目的主功能均已通过测试,但是仍然存在下面缺陷:
- 博客列表页左侧用户模块中的“用户图片”和“分类”还没有实现。
- 博客列表页和搜索博客响应时间过长,需要优化其性能。
相关文章:
我的博文天地测试报告
我的博文天地测试报告 文章目录 我的博文天地测试报告 一.项目背景 二.项目功能 2.1 功能介绍 三.测试分类 3.1 功能测试 3.1.1 测试用例 3.1.2 实际执行测试的部分操作步骤/结果的截图 3.2 自动化测试 3.3 性能测试 3.1.2 用户登录 jmeter性能测试结果 性能测试遇到的困难 …...
EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析
EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析 0 预览一 该文件功能`pdo_list.c` 文件功能函数预览二 函数功能介绍`pdo_list.c` 中主要函数的作用1. `ec_pdo_list_init`2. `ec_pdo_list_clear`3. `ec_pdo_list_clear_pdos`4. `ec_pdo_list_total_size`5. `ec_pdo_list_a…...
嵌入式开发神器:Buildroot的介绍和使用方法
目录 引言**Buildroot 能做什么?****1. 生成交叉编译工具链(Toolchain)****2. 生成嵌入式 Linux 根文件系统(RootFS)****3. 编译 Linux 内核和设备树文件****4. 编译 Bootloader(U-Boot)****5. …...
JavaScript系列(61)--边缘计算应用开发详解
JavaScript边缘计算应用开发详解 🌐 今天,让我们深入探讨JavaScript的边缘计算应用开发。边缘计算是一种将计算和数据存储分布到更靠近数据源的位置的架构模式,它能够提供更低的延迟和更好的实时性能。 边缘计算基础架构 🌟 &am…...
【LeetCode】day15 142.环形链表II
142. 环形链表 II - 力扣(LeetCode) 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则…...
代理对象与目标对象
1. 定义:代理对象和目标对象 1.1 目标对象(Target Object) 目标对象是指 被增强的原始对象,即需要通过 AOP 切面(Aspect)增强功能的业务对象(原始类)。增强逻辑(Advice…...
【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信
引言 我们之前了解了在不同场景下,Kubernetes中Pod之间的通信是如何路由的。 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信现在,我们来看看在集群中,Pod与服务之间的通信是如何…...
DNN(深度神经网络)近似 Lyapunov 函数
import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt # from torchviz import make_dot import torchviz# 1. Lyapunov 函数近似器(MLP 结构) class LyapunovNet(nn.Module):def __init__(self, input_dim…...
128陷阱
首先我们了解一下关于包装器类型 java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将…...
PromptSource和LangChain哪个更好
目录 1. 设计目标与定位 PromptSource LangChain 2. 功能对比 3. 优缺点分析 PromptSource LangChain 4. 如何选择? 5. 总结 PromptSource 和 LangChain 是两个在自然语言处理(NLP)领域非常有用的工具,但它们的设计目标和…...
构成正方形的数量:算法深度剖析与实践
目录 引言算法核心概念 定义正方形的构成条件数据结构与输入形式算法数学原理 几何关系的数学表达坐标运算与判定逻辑Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂度优化思…...
Redis持久化-秒杀系统设计
在构建高性能、高可用的系统时,Redis 作为缓存和消息队列的角色越来越重要。在一些场景下,我们还需要将 Redis 的数据进行持久化,以确保数据的安全性和恢复能力。除此之外,秒杀系统也越来越成为电商、抢购等平台的核心功能之一。本…...
音视频入门基础:RTP专题(8)——使用Wireshark分析RTP
一、引言 通过Wireshark可以抓取RTP数据包,该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …...
OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化
爬虫与 OpenAI 模型结合,不仅能高效地抓取并分析海量数据,还能通过 NLP 技术生成洞察、摘要,极大提高业务效率。以下是一些实际工作中具有较高价值的应用案例: 1. 电商价格监控与智能分析 应用场景: 电商企业需要监控…...
SpringUI Web高端动态交互元件库
Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…...
解密企业安全密码:密钥管理服务如何重塑数据保护?
在数字化时代,数据是企业最宝贵的资产之一。然而,随着网络威胁的不断升级和数据泄露事件的频繁发生,如何保护企业数据的安全已成为每个组织面临的紧迫问题。传统的安全措施往往无法应对复杂的威胁环境,密钥管理服务作为企业信息安…...
基于keepalived+GTID半同步主从复制的高可用MySQL集群
文章目录 项目架构图项目名称项目环境项目描述ip地址规划项目步骤一.安装好8台全新的centos7.9的系统,关闭firewalld和selinux,配置每台主机的静态ip地址,设置每台主机对应的主机名。1、关闭firewalld2.关闭seLinux3.配置每台主机静态ip地址4…...
图片PDF区域信息批量提取至Excel,基于QT和阿里云api的实现方案
办公文档处理:在企业日常办公中,经常会遇到大量的扫描文档(如发票、合同、报表等)以图片或 PDF 格式存储。需要将这些文档中的特定区域信息(如发票金额、合同条款、报表数据等)提取出来,整理到 …...
Java 大视界 -- Java 大数据在智能教育中的应用与个性化学习(75)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...
从零手写Spring IoC容器(二):bean的定义与注册
从零手写Spring IoC容器(二):bean的定义与注册 一. 回顾简单容器的不足之处 在第一章中,我们实现了一个最简单的 IoC 容器,但该版本存在诸多不足,例如: Bean 的管理方式过于简单,…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
