博客项目测试报告

news2024/11/22 13:41:53

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

目录

  • 一、项目背景
  • 二、项目功能
  • 三、测试计划
    • 一)功能测试
    • 二)自动化测试
    • 三)性能测试
      • 编写性能测试脚本
      • 创建测试场景(Controller)
      • 生成测试报告(Analysis)

一、项目背景

个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有 8 个页面构成:注册页,登录页,个人信息页,写博客页,博客详情页,修改博客页,博客列表页,个人博客列表页。其结合后端实现了以下的主要功能:注册、登录、查看个人信息及修改、写博客、修改博客、注销、删除博客、密码加盐、验证码校验、查看所有人博客、查看个人博客、博客列表分页、redis存储session、拦截器验证是否登录、博客评论等功能。

二、项目功能

1.注册功能:用户在输入用户名,密码,确认密码后。参数合法情况下注册成功,跳转到登录页。

2.登录功能:注册的用户名密码已经在后端写入了数据库。用户名,密码,验证码三者都校验成功后会跳转到个人博客列表页。登录失败会提示错误。

3.博客列表页:已登录用户和未登录用户都能看到所有人写的博客。支持分页功能。

4.评论功能:只有已登录用户才有查看评论和写评论权限。博客归属人有权删除自己博客下的评论。

5.修改博客功能:修改成功后会跳转到个人博客列表页

6.删除博客功能:删除博客成功后会刷新当前页面(个人博客列表页)

7.新增博客功能:新增博客成功后会刷新当前页面(个人博客列表页)

8.个人信息页:已登录用户可以查看自己的头像,昵称。同时有权修改头像,昵称,密码。

9.注销功能:注销成功后跳转到博客列表页。

10.文章详情页:显示文章标题,正文,作者,阅读量,发布时间,评论列表。左侧显示当前登录用户的信息(头像,昵称,文章总数)

11.个人博客列表页:已登录用户可以查看文章,修改文章,删除文章,写博客,个人中心,注销,查看所有人文章。

三、测试计划

一)功能测试

1.测试用例:

image-20230804165220238

2.实际执行测试的部分操作步骤/截图

1)正常登录

image-20230804172120256

登录成功后跳转到个人文章列表页。

image-20230804172224920

2)正常注册

image-20230804172444899

3)博客列表页

image-20230804172621204

查看某一篇文章详情:

image-20230804172741742

验证分页功能:

image-20230804172838967

image-20230804172904734

4)博客详情页

评论功能:

image-20230804173128282

image-20230804173147164

5)博客编辑页

image-20230804173710097

image-20230804173727567

回到个人列表页可以看到新发布的博客:

image-20230804174018143

6)个人资料页

修改头像:

image-20230804174427148

image-20230804174533777

二)自动化测试

自动化测试参考:

自动化测试

三)性能测试

我们使用三个工具针对我们的项目进行性能测试。

a)Virtual User Generator(简称VUG): 用来生成性能测试脚本。

b)Controller: 创建测试场景,运行和监控场景。

c)Analysis: 生成测试报告,分析性能测试结果

性能测试步骤:

a)访问博客登录页;

b)执行登录;

c)进入个人博客列表页.

编写性能测试脚本

1.创建项目

image-20230806111957665

操作步骤为:1.打开网页,2.输入账号密码验证码并登录;

在此期间,为了更好的让我们进行性能测试的数据收集,我们可以使用

事务: 衡量性能的重要指标,通过观察每秒事务通过数来衡量性能;
集合点: 让所有的虚拟用户执行到集合点时断在集合,满足条件后一起执行下一个步骤(保证每一个虚拟用户同时执行下一步);
参数化: 通过提供的数据源可以实现多个参数逐个执行;

Action()
{

	//开启事务1
	lr_start_transaction("index_trans");
	//1.访问登录页面

	web_url("login.html", 
		"URL=http://8.130.106.169:8080/login.html", 
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=", 
		"Snapshot=t2.inf", 
		"Mode=HTML", 
		EXTRARES, 
		"Url=/image/47e9aa94-f21c-4a75-84a8-54b8f7ff7b63.png", ENDITEM, 
		"Url=/login.html", ENDITEM, 
		LAST);

	

	lr_think_time(28);


	web_custom_request("getcode", 
		"URL=http://8.130.106.169:8080/user/getcode", 
		"Method=POST", 
		"Resource=0", 
		"RecContentType=application/json", 
		"Referer=http://8.130.106.169:8080/login.html", 
		"Snapshot=t8.inf", 
		"Mode=HTML", 
		"EncType=", 
		LAST);

	

/* Added by Async CodeGen.
ID=Poll_0
ScanType = Recording

The following URLs are considered part of this conversation:
	http://8.130.106.169:8080/user/login

TODO - The following callbacks have been added to AsyncCallbacks.c.
Add your code to the callback implementations as necessary.
	Poll_0_RequestCB
	Poll_0_ResponseCB
 */
	web_reg_async_attributes("ID=Poll_0", 
		"Pattern=Poll", 
		"URL=http://8.130.106.169:8080/user/login", 
		"PollIntervalMs=9100", 
		"RequestCB=Poll_0_RequestCB", 
		"ResponseCB=Poll_0_ResponseCB", 
		LAST);

	//登录的集合点
	lr_rendezvous("login_rendezvous");
 
	//开始事务2
	lr_start_transaction("login_trans");
	
	web_submit_data("login", 
		"Action=http://8.130.106.169:8080/user/login", 
		"Method=POST", 
		"RecContentType=application/json", 
		"Referer=http://8.130.106.169:8080/login.html", 
		"Snapshot=t10.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=username", "Value={username}", ENDITEM, 
		"Name=password", "Value=123", ENDITEM, 
		"Name=checkCode", "Value=taqa6", ENDITEM, 
		LAST);

	//结束事务2
	lr_end_transaction("login_trans", LR_AUTO);
	
	//结束事务1
	lr_end_transaction("index_trans", LR_AUTO);
	
	return 0;
}

参数化

支持输入多个账号

image-20230806114743505

image-20230806114905529

image-20230806114845455

image-20230806120054224

脚本测试通过。

分析日志:

image-20230806120023424

创建测试场景(Controller)

针对我们已经编写好的脚本打开controller工具,创建测试脚本

image-20230806120445968

image-20230806121240519

image-20230806121416885

image-20230806121539375

image-20230806121637341

image-20230806122658522

生成测试报告(Analysis)

在 controller 创建的场景中直接生成测试报告,如下:

image-20230806123910040

1.虚拟用户运行图:

image-20230806124043832

作用:通过显示的虚拟用户数量可以判断出哪个时间段服务器负载最大(上图00:40 ~ 01:40负载最大)。

2.点击数图(每秒点击率)

image-20230806124150593

作用:通过点击率可以判断出某时间段内服务器的负载。

3.吞吐量图

image-20230806124238070

问题一:为什么吞吐量图和点击数图相似,但是吞吐量图要滞后一点?

因为吞吐量表示的是响应返回的资源数量,肯定是先有请求再有返回。

问题二:如果请求变多但是吞吐量没变化,原因是什么?

服务器响应太慢,来不及反应;
压力没有到服务器;
服务器设计一定的阈值(到达阈值以后,虽然也收到了请求,但是服务器不会做任何处理),保证了服务器不会因为并发量过大而出现宕机的情况;

4.事务图

image-20230806124349548

5.平均事务响应时间图

image-20230806124446444

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式Linux驱动开发系列五:Linux系统和HelloWorld

三个问题 了解Hello World程序的执行过程有什么用? 编译和执行:Hello World程序的执行分为两个主要步骤:编译和执行。编译器将源代码转换为可执行文件,然后计算机执行该文件并输出相应的结果。了解这个过程可以帮助我们理解如何将代码转化…

STM32 CubeMX USB_(HID 鼠标和键盘)

STM32 CubeMX STM32 CubeMX USB_HID(HID 鼠标和键盘) STM32 CubeMX前言 《鼠标》一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择 二、代码部分添加代码鼠标发送给PC的数据解析实验效果 《键盘》STM32 CubeMX 设置(同上)代码…

检测文本是否由AI生成,GPT、文心一言等均能被检测

背景 目前很多机构推出了ChatGPT等AI文本检测工具,但是准确率主打一个模棱两可,基本和抛硬币没啥区别。 先说结论,我们对比了常见的几款AI检测工具,copyleaks检测相比较而言最准确。 检测文本 AI文本片段1 来源:G…

人工智能的缺陷

首先从应用层面理解什么是人工智能,目前人工智能主流应用面包括:自然语言处理领域,代表为chatgpt,我们能用其进行日常交流,问题答疑,论文书写等。计算机视觉领域,代表为人脸识别,现在…

Metashape和PhotoScan中文版软件下载安装地址

Metashape的点云生成功能 Metashape具有强大的点云生成功能,可以将图像转换为精确的三维点云数据。点云数据是进行三维建模和地形分析的重要基础。 在使用Metashape时,用户可以通过使用图像对齐功能生成点云数据。软件根据对齐后的图像生成稠密的点云&a…

c语言-qsort函数

目录 一、函数介绍 二、qsort函数的使用 1、对int类型数组排序 2、对char类型排序 3、对浮点型排序 4.比较字符串 4.1按首字母排序 4.2按长度排序 4.3按字典顺序 5.结构体排序 5.1 多级排序 三、模拟实现qsort函数 【冒泡排序的实现】 【主函数部分】 【代码详解…

二叉树的构建(java基于数组)

前言 二叉树在算法中是经常考察的点,但是要在本地测试的话,就必须自己构建二叉树。在算法题中,一般给我们的都是一个数组,或者是二叉树的形状。因此,需要将数组转换为二叉树,这样才能测试出自己的代码是否符…

Linux文本处理工具和正则表达式

Linux文本处理工具和正则表达式 一.查看、截取和修改文本的工具 1.查看文本的工具 cat 最常用的文件查看命令;当不指明文件或者文件名为一杠’-时,读取标准输入。 cat [OPTION]... [FILE]... -A:显示所有控制符(tab键:^I;行结束符:$) -…

安科瑞故障电弧在体育场馆的应用-安科瑞黄安南

应用场景 一般应用于末端照明回路 功能 1.支持1路剩余电流,外接漏电互感器 2.支持4路温度,外接温度传感器 3.支持32路故障电弧,外接故障电弧传感器 4.支持2DI,2DO 5.声光报警,LCD点阵液晶显示 6.导轨式安装&…

基于ChatYuan-large-v2 语言模型 Fine-tuning 微调训练 广告生成 任务

一、ChatYuan-large-v2 ChatYuan-large-v2是一个开源的支持中英双语的功能型对话语言大模型,与其他 LLM 不同的是模型十分轻量化,并且在轻量化的同时效果相对还不错,仅仅通过0.7B参数量就可以实现10B模型的基础效果,正是其如此的…

基于YOLOv7开发构建MSTAR雷达影像目标检测系统

MSTAR(Moving and Stationary Target Acquisition and Recognition)数据集是一个基于合成孔径雷达(Synthetic Aperture Radar,SAR)图像的目标检测和识别数据集。它是针对目标检测、机器学习和模式识别算法的研究和评估…

Visual Studio 2019 详细安装教程(图文版)

前言 Visual Studio 2019 安装包的下载教程、安装教程 教程 博主博客链接:https://blog.csdn.net/m0_74014525 关注博主,后期持续更新系列文章 ********文章附有百度网盘安装包链接********* 系列文章 第一篇:Visual Studio 2019 详细安装教…

MobiSys 2023 | 多用户心跳监测的双重成形声学感知

注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学报 等)。本次介绍的论文是:<<MobiSys’23,Multi-User A…

特殊符号的制作 台风 示例 使用第三方工具 Photoshop 地理信息系统空间分析实验教程 第三版

特殊符号的制作 首先这是一个含有字符的&#xff0c;使用arcgis自带的符号编辑器制作比较困难。所以我们准备采用Adobe Photoshop 来进行制作符号&#xff0c;然后直接导入符号的图片文件作为符号 我们打开ps&#xff0c;根据上面的图片的像素长宽比&#xff0c;设定合适的高度…

高中生python零基础怎么学,python高中生自学行吗

这篇文章主要介绍了高中学历学python好找工作吗&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 学习python的第九天 根据我们前面这几天的学习&#xff0c;我们掌握了Python的…

nginx环境部署

目录 一、yum安装 二、源码安装 三、测试结果 一、yum安装 1、先查找本地yum源上有没有nginx包 yum list | grep nginx 2、rpm安装 rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm 3、查看安装是否成功 rpm -pa | grep…

Pytorch迁移学习使用MobileNet v3网络模型进行猫狗预测二分类

目录 1. MobileNet 1.1 MobileNet v1 1.1.1 深度可分离卷积 1.1.2 宽度和分辨率调整 1.2 MobileNet v2 1.2.1 倒残差模块 1.3 MobileNet v3 1.3.1 MobieNet V3 Block 1.3.2 MobileNet V3-Large网络结构 1.3.3 MobileNet V3预测猫狗二分类问题 送书活动 1. MobileNet …

【力扣每日一题】2023.8.6 两两交换链表中的节点

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表&#xff0c;让我们两两交换相邻节点的值&#xff0c;并且不能通过修改节点内部的值来达到这一目的&#xff0c;如果可…

NERFS 与现实捕捉 - 弥合现实世界与数字世界之间的差距

NERF介绍 近年来&#xff0c;计算机视觉和图形领域取得了显着的进步&#xff0c;催生了革命性的技术&#xff0c;改变了各个行业。 NERFS&#xff08;神经辐射场&#xff09;和现实捕捉是两项备受关注的重要技术。 NERFS 和现实捕捉都是以数字形式捕捉和重建现实世界的强大工具…

无涯教程-Perl - dbmclose函数

描述 此函数关闭哈希和DBM文件之间的绑定。将领带功能与合适的模块配合使用。 语法 以下是此函数的简单语法- dbmclose HASH返回值 如果失败,此函数返回0,如果成功,则返回1。 请注意,在大型DBM文件上使用键和值之类的功能时,它们可能会返回巨大的列表。您可能更喜欢使用e…