个人博客系统的测试报告

news2025/1/19 8:14:35

目录

  • 1.项目背景
  • 2.项目功能
  • 3.测试计划
    • 3.1功能测试
      • 3.1.1 测试用例设计
      • 3.1.2 实际执行测试的部分操作步骤
    • 3.2自动化测试
      • 3.2.1 脑图
      • 3.2.2 代码编写

1.项目背景

实现一个类似CSDN的个人博客系统
支持以下核心功能:
支持用户注册登录并设置个人信息如头像、昵称等等;
对于未登录的用户,可以阅读他人博客;
对于已登录用户可以发布、修改、删除文章,并提供保存草稿功能以便用户下次继续编辑

2.项目功能

该个人博客系统主要实现了以下功能:注册、登录、注销、写博客、修改博客、删除博客、保存草稿,修改草稿,删除草稿,查看博客详情和修改个人信息

  1. 注册功能:用户输入想创建的账号和密码,点击注册按钮后无误后显示注册成功,并询问是否跳转到登陆页面。在右上角存在网站主页,登录两个按钮。
  2. 登录功能:用户输入正确的账号密码后,登录成功后就会跳转到列表页面。在右上角存在网站主页,注册两个按钮。
  3. 我的博客页面:可以在列表页查看当前登录用户发布的博客简介,其包括博客标题、发布时间以及内容概要。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有个人中心、网站主页、写博客、草稿箱、注销五个功能
  4. 博客详情页面:在博客简介下方点击“查看全文”按钮就会跳转到当前博客详情页,此时就可以看到该篇博客的完整内容。在右上角有网站主页、和我的博客两个功能
  5. 个人信息页面:该页面显示用户全部的个人信息,包括头像,性别,账号,昵称,个人简介等,用户也可以修改除账号以外的全部信息。
  6. 写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到我的博客页面。
  7. 修改、删除博客:在登录之后的我的博客页面点击任意博客下的修改或删除按钮,可以对已发布的博客进行继续编辑或删除。
  8. 修改、删除草稿:在登录之后的草稿箱页面点击任意博客下的修改或删除按钮,可以对未发布的博客草稿进行继续编辑或删除。

3.测试计划

3.1功能测试

3.1.1 测试用例设计

在这里插入图片描述

3.1.2 实际执行测试的部分操作步骤

注册测试:

正常注册:
1.
打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/reg.html
2.
用户名输入:user1
密码输入:123456
确认密码输入:123456
点击提交
在这里插入图片描述
3.得到结果:
在这里插入图片描述

异常注册(输入已被注册的账号、密码和正确的确认密码):
1.
打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/reg.html
2.
用户名输入:admin
密码输入:123456
确认密码输入:123456
点击提交
得到结果:
在这里插入图片描述

登录测试:

正常登录:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/login.html
2.填入正确的账号、密码和验证码
用户名:admin
密码:123456
验证码:wannengyanzhengma
点击提交
在这里插入图片描述
得到结果:跳转成功
在这里插入图片描述

异常登录(异常密码-密码错误):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/login.html
2.填入正确的账号、密码和验证码
用户名:admin
密码:111111
验证码:wannengyanzhengma
点击提交
得到结果:
在这里插入图片描述

博客编辑测试:
已登录:

正常编辑:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
2.输入标题:博客编辑测试,正文输入内容:博客编辑测试,点击发布文章,点击确认提交
在这里插入图片描述
得到结果:
在这里插入图片描述

异常编辑(标题为空,点击发布):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
2.不输入标题,正文输入内容:博客编辑测试,点击发布文章,点击确认提交
在这里插入图片描述
得到结果:
在这里插入图片描述

未登录:

1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
得到结果:跳转回登录页面

删除博客测试:
已登录:

1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/myblog_list.html
2.选择文章标题为:博客删除测试,点击删除,点击确认删除
得到结果:删除成功
在这里插入图片描述

个人信息修改测试
已登录

正常修改(修改头像,上传图片文件):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/personal.html
2.点击头像,点击确认,跳转到上传页面,选择图片文件后,点击提交
在这里插入图片描述
得到结果:
在这里插入图片描述

异常修改(修改头像,上传非图片文件):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/personal.html
2.点击头像,点击确认,跳转到上传页面,选择非图片文件后,点击提交
在这里插入图片描述
得到结果:在这里插入图片描述
这里未设置响应的编码格式,导致出现
???
实际应该为:
在这里插入图片描述
修改:在响应返回之前,添加代码response.setContentType(“application/json;charset=utf8”);
再次测试,得到结果:
在这里插入图片描述

注销测试:
已登录

1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/myblog_list.html
2.点击右上角的注销按钮,选择确认注销
得到结果:跳转回登录页面
在这里插入图片描述

3.2自动化测试

以页面书写测试类,然后对主要功能进行测试。

3.2.1 脑图

在这里插入图片描述

3.2.2 代码编写

1.添加依赖:

 <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.创建包和类的创建

包创建

根据不同页面对登录状态的要求,创建了多个包:
在这里插入图片描述
common:存放通用类
screen:存放测试时的屏幕截图
test:存放测试代码
logined:已登录进入相关网页
open: 相关网页对登录状态没有要求
unlogined:未登录进入相关网页

类创建
com.common
公共类AutoTest
功能:创建驱动、保存现场截图
注意:

1.在保存现场截图的时候命名是按时间来进行文件夹的划分,然后图片的名称要体现出测试类的类名,方便进行问题的追溯。
2.文件名的动态获取,注意时间格式的设置。
3.可以在创建驱动的时候修改默认的有头模式or无头模式
4.测试类全部继承该类,从该类获取驱动对象,调用屏幕打印方法

com.test.open
登录页面测试类LoginTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常登录:多参数测试
④ 测试异常登录:用户名/密码错误的情况,用户名正确密码为空
注意

测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空内容后才能再次输入用户名以及密码

注册页面测试类RegTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常注册:动态参数测试
④ 测试异常登录:用户名密码正确,确认密码为空;用户名正确,密码和确认密码不匹配
注意

测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空内容后才能再次输入用户名、密码和确认密码
正常注册时,放在再次运行后用户名已被注册,所以采用user+随机值的方式设计用户名

网站主页测试类HomepageTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开

博客详情测试类BlogDetailTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开

com.test.logined/com.test.unlogined
博客编辑测试类BlogAddTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常编辑博客并提交:输入标题和正文
④ 测试异常编辑博客并提交:输入正文标题为空
注意

测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空标题后才能再次标题
等待弹窗时需要进行强制等待,等待弹窗弹出,否则出现弹窗未找到错误

博客草稿测试类BlogDraftTest
功能:
① 获取驱动,并打开草稿箱页面
② 测试页面是否正常打开

博客修改测试类BlogEditTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常修改博客并提交:修改标题和正文,标题正文均不为空
④ 测试异常修改博客并提交:删除标题
注意

测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
等待弹窗时需要进行强制等待,等待弹窗弹出,否则出现弹窗未找到错误

博客列表测试类BlogListTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开

个人主页测试类PersonalTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开

驱动释放类DriverQuiteTest
因为驱动的测试是要在最后一个测试类完成之后进行释放的,如果是使用@AfterAll注解,那么每次修改测试类的时候都会需要挪动驱动释放的位置,所以直接新建一个类作为驱动释放,此时只需要在测试套件中放到最后就行。

测试套件runSuite
测试套件的运行,使用的是以测试类作为执行顺序的方式。

源码地址:https://gitee.com/yuminghui2023/auto_test

测试结果:
所有测试用例通过,如图所示
在这里插入图片描述
小结
1.注意测试用例的执行顺序,不同的执行顺序回使得正确的执行得到错误的结果
2.设置隐式等待,提高了自动化的运行效率,提高了自动化的稳定性,防止因页面刷新过慢导致找不到对应元素,减小误报的可能性。
3.设置浏览器的无头模式,我们作为测试人员只需要关注结果即可
4.保存现场截图,注意设计好截图的命名格式,方便问题的回溯
5.使用单例模式创建驱动,减少驱动频繁创建销毁带来的资源消耗
6.适当关注测试的时间,可用于检测系统的性能是否有大问题
7.测试用例不是越多越好,重要的是对系统测试的覆盖率

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

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

相关文章

【事务】MySql Lock wait timeout exceeded该如何处理?service层调用内部方法事务失效如何处理?

文章目录 参考文章问题描述解决办法办法1. 新增查询操作办法2. 判断实际事务场景解决办法 参考文章 MySql Lock wait timeout exceeded该如何处理&#xff1f; AopContext.currentProxy()的使用 问题描述 同一事务内包含对同一条记录进行新增、更新操作&#xff0c;导致mysq…

年薪30W的测试被开除,回怼道:“反正我有技术,在哪不一样”这种观点对吗?

一位年薪30W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

Hadoop基础学习---4、HDFS写、读数据流程、NameNode和SecondaryNameNode、DataNode

1、HDFS写、读数据流程 1.1 HDFS写数据流程 1.1 剖析文件写入 1、客户端通过Distributed FileSystem模块向NameNode请求上传文件&#xff0c;NameNode检查目标文件是否已存在&#xff0c;父目录是否存在。 2、NameNode返回是否可以上传。 3、客户端请求第一个Block上传到哪几…

选择多张图片的方案

适用场景 1、微信公众号开发&#xff0c;代替wx.chooseImage&#xff0c;选择多张图片上传自己服务器&#xff1b; 2、常规的javascript的开发&#xff0c;选择多张图片上传到自己的服务器&#xff1b; 3、扩展到vue和react等框架使用&#xff1b; 整体思路 1、使用input控…

文章百度秒收录方法大全

文章百度秒收录方法大全,百度秒收录&#xff1f;直接套用这个模版创作原创文章#网络营销#案例文章 今天分享几个提高文章质量的简单方法&#xff0c;看一眼就能够操作的。 1、引用金句很多人不知道怎么表达观点&#xff0c;引用金句是一个不错的方法&#xff0c;平时多收集&…

(IDEA)springCloud项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

idea导入本地jar包 方法一:点击左上角File–>Project Structure–>Modules。打开Modules界面点击下方号&#xff0c;选择第一项&#xff0c;找到想要导入的本地jar包。此方法可以使项目使用导入的jar包程序不报错&#xff0c;但是在打包项目时&#xff0c;会出现找不到程…

Kyligence Zen使用体验 - 从数据可视化说起

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

SpringBoot JDBC连接数据库项目代码构建

本期引言&#xff1a; 本文将介绍如何使用SpringBoot框架构建一个简单的JDBC连接数据库项目。在这个项目中&#xff0c;我们将使用MySQL作为数据库&#xff0c;通过SpringBoot框架实现数据的增删改查操作。本文将涵盖以下内容&#xff1a; 配置项目所需的环境和工具创建Sprin…

01 Android开机启动之整体分析

Android开机启动之整体分析 一、Android系统整体架构图 Android是谷歌开发的一款基于Linux的开源操作系统 PowerManagement:系统最底层是电源管理,只有通过电源上电,系统才能开启 Linux kernel:驱动层,里面包括Audio、Carmera、usb等各种外设的驱动程序。 HAL层:硬件…

snmp关闭指定网口

一、下载安装MIB Network Management / Network Monitoring / SNMP Monitoring / MIB Browser 1. 选择interfaces->ifTable->ifEntry,右键Table View&#xff0c;如上图所示 2.选择一个你想要设置的网口&#xff0c;点击上方的SNMP SET&#xff0c;弹出窗口 3.OID获取 …

多模态对话语言模型-VisualGLM-6B

多模态对话语言模型-VisualGLM-6B 一、简介二、使用模型推理三、部署工具网页版 DemoAPI部署四、example五、交流一、简介 VisualGLM-6B 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基于 ChatGLM-6B,具有 62 亿参数;图像部分通过训练 BLIP2-Qformer 构…

【网络】IP协议

文章目录 IP协议预备知识网络层解决的问题如何理解IP地址关于路由器 IP协议格式各个字段的含义IP报头的本质IP如何将报头与有效载荷进行分离IP如何决定将有效载荷交付给上层哪一个协议(如何分用)32位源IP地址和32位目的IP地址重新理解socket编程 分片与组装数据链路层解决的问题…

无线麦克风加充电方案(LDR6023C)火爆各大直播平台

最近小编在网上经常看到一种新型无线领夹麦克风&#xff0c;不知道什么时候开始突然就火了&#xff0c;在很多网络平台都能看到。甚至在刚刚结束的东京奥运会上&#xff0c;央视主持人在报道时&#xff0c;用的就是这种类型的无线领夹麦克风。而且这两天&#xff0c;有多厂商在…

嵌入式 QT纯代码设计UI

目录 1.1 实例功能 1.2 界面创建 1.3 界面组件的创建与布局 1.4 信号与槽的关联 UI 的可视化设计是对用户而言的&#xff0c;其实底层都是 C 的代码实现&#xff0c;只是 Qt 巧妙地进行了处理&#xff0c;让用户 省去了很多繁琐的界面设计工作。 由于界面设计的底层其实都…

数据结构—排序算法(归并非比较)

目录 1、 归并排序 1.1 基本思想 1.2 归并排序递归方式的实现 1.3 归并排序非递归方式的实现 1.4 归并排序的特性总结 2、计数排序 2.1 计数排序基本思想 2.2 计数排序的实现 2.3 计数排序的特性总结&#xff1a; 1、 归并排序 1.1 基本思想 归并排序&#xff08;MER…

反射技术

一、获取Class对象 方式一&#xff1a;类名.class // 方式一&#xff1a;类名.classClass<Student> studentClass Student.class;System.out.println(studentClass);方式二&#xff1a;static Class forName(String fullNameWithPackage) 需要注意的是&#xff0c;for…

MAAS搭建

要求 https://maas.io/docs/installation-requirements 安装maas sudo snap install --channel=3.3 maas安装postgres sudo apt update -y sudo apt install -y postgresql设置数据库 sudo -i -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH E…

深化企业数据智能应用 用友敢当“急先锋”

本篇文章来源于趣味科技v &#xff0c;作者完美主义 面对扑面而来的数字经济时代&#xff0c;一场轰轰烈烈的企业数智化转型正进行得如火如荼。 然而许多企业虽然明知道数智化转型势在必行&#xff0c;但是又担忧自己不具备相关能力。这些企业在数据和智能上面临哪些挑战&…

华为OD机试之TLV解析Ⅰ(Java源码)

TLV解析Ⅰ 题目描述 TLV编码是按[Tag Length Value]格式进行编码的&#xff0c;一段码流中的信元用Tag标识&#xff0c;Tag在码流中唯一不重复&#xff0c;Length表示信元Value的长度&#xff0c;Value表示信元的值。 码流以某信元的Tag开头&#xff0c;Tag固定占一个字节&…

在SecureCRT下使用sz下载和rz上传文件

安装命令&#xff1a;yum install lrzsz 在某些情况下使用ftp不能上传和下载到指定的目录&#xff0c;特别在项目中&#xff0c;比较麻烦&#xff0c;所以可以使用sz和rz命令可以实现在SecureCRT中上传下载 配置上传下载目录&#xff1a;选择某个session标签&#xff0c;点击…