我的博文天地测试报告
我的博文天地测试报告
文章目录
- 我的博文天地测试报告
- 一.项目背景
- 二.项目功能
- 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 的管理方式过于简单,…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...