博客系统测试报告

      当我们至少完成了一次项目的功能测试后,我们可以写一篇测试报告出来。在这里,我先完成了功能测试,自动化测试,又进行了弱网测试,我们把它们都编入测试报告,来写出一篇简单的博客系统测试报告

Gitee源码:博客系统自动化测试源码


1.项目背景

我们选择的博客系统是一个趋待完善的系统,它是一个允许用户登录、发布博客、管理博客和跳转Gitee账户的平台。它包含用户登录、内容编辑、分类、统计、关联Gitee仓库等功能。随着互联网的普及,越来越多的个人和企业希望通过博客系统来传播内容、展示专业知识或进行品牌推广。因此,检测这个博客系统是否可靠,是否能堪大用变得至关重要。

2.项目简介

我们选择的博客系统,由四个界面,分别是博客登录页面、博客主页面、博客详情页以及博客编辑页。下面我们来分别介绍这几个页面有哪些功能。

2.1博客登录页

功能:输入已经注册的账号和密码,点击登录,进入博客主页面

2.2博客主页面

功能:进入博客主页面后,我们可以看到页面分为两栏,左侧栏是我们的个人信息,有头像,昵称,Gitee仓库,文章和分类的统计,右侧是我们的博客栏,有我们发布过的所有博客,有博客标题,博客发布时间以及博客部分内容和查看博客详情的按钮。在博客顶栏,有主页,写博客,注销三个按钮。

2.3博客详情页

功能:点击主页面的查看全文按钮,我们进入到博客详情页,在详情页中,我们可以看到写的博客的全部内容,也分为两栏,左边栏是个人信息,有头像,昵称,Gitee仓库,文章和分类的统计,右侧是我们的博客详细内容,有编辑和删除按钮,可以对这篇博客进行编辑,在更新博客进行发布。在博客顶栏,有主页,写博客,注销三个按钮。

2.4博客编辑页

功能:点击顶栏的写博客按钮,我们进入到博客编辑页面,可以进行博客编辑,点击发布,回到博客主页面。

3.测试计划

针对本次测试的博客系统,我将从界面、功能、性能、兼容性、安全性、易用性以及弱网条件七个方面下进行测试。

测试计划
测试测试时间测试人测试结果
功能测试(自动化)2024.9.6Qlppass
界面测试2024.9.7Qlppass
性能测试2024.9.7Qlppass
易用性测试2024.9.8Qlppass
兼容性测试2024.9.8Qlppass        
安全性测试2024.9.8Qlppass
弱网测试2024.9.8Qlppass
回归测试2024.9.10Lcpass

4.测试工具

1.弱网测试工具:fiddler

2.自动化测试工具:pycharm,安装selenium和webDriver-manager

3.性能测试工具:JMeter

5.测试动作

具体操作我放在设计测试用例中,这里只进行简单描述

5.1界面测试

界面测试需要根据编写好的需求手册与界面内容进行比对,出现不一致的情况,一般情况要按需求手册的要求进行修改,这一个方面的测试选我择手动测试

5.2功能测试

对于功能的测试,我采用自动化测试,要测试的功能界面就是博客登录页,博客主页,博客详情页,博客编辑页这四个界面,我们使用pycharm工具依次对这四个界面进行自动化测试

5.3性能测试

对于性能测试,我们用jmeter工具,前提是有java,由于本人电脑没有配置与java有关,所以这里只给出了测试用例,给大家提供测试思路

5.4易用性测试

对于易用性测试,我也采用了手动测试的办法

5.5安全性测试

对安全性的测试,我们主要在博客登录页进行测试,用户的密码是否是加密显示的,数据库中用户的密码是否也是加密的,通过解密才能看到用户本来的密码。我们通过SQL注入和越权来测试。

5.6兼容性测试

对于这个博客系统的兼容性,我们也有测试工具,BrowserStack,通过这个工具它可以模拟在不同操作系统和不同浏览器上博客系统是否可以正常运行,本人没有用这个测试工具,依然手动测试。

5.7弱网测试

测试在弱网条件下,博客系统的响应速度,这里我用了fiddler测试工具

6.开始测试(自动化测试)

6.1测试用例

如下图

6.2自动化测试

在自动化测试中,我们用pycharm来进行,选择Chrome浏览器,针对它的功能进行测试

6.3测试脚本

由于代码众多,这里我们只挑选部分代码做展示,全部代码会放在Gitee仓库中,有需要的铁子可以自行查看。

博客登录页的自动化测试的脚本

#测试登录页面
import timefrom selenium.webdriver.common.by import Byfrom common.Utils import BlogDriver
class BlogLogin:url=""driver=""def __init__(self):self.url="http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverself.driver.get(self.url)#成功登录的测试用例def LoginSucTest(self):self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#若是登录成功,则会出现昵称time.sleep(3)self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")BlogDriver.getScreeShot()# self.driver.back()# self.driver.find_element(By.CSS_SELECTOR,"#username").clear()# self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# self.driver.quit()#异常登录def LoginFailTest(self):#1.正确的用户名错误的密码,点击提交按钮self.driver.implicitly_wait(3)self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#检查是否登录失败#若是登录失败,出现警告弹窗#这里等待时间要长一些,负责弹窗无法被关闭#添加屏幕截图,查看当时的情况到底是什么#截图只能在弹窗之前添加,弹窗出现之后,页面无法被截图BlogDriver.getScreeShot()time.sleep(3)#进行断言比对,看是否符合预期actual1=self.driver.switch_to.alert.textassert actual1=="密码错误"#关闭警告弹窗self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#2.错误的用户名正确的密码,点击提交按钮self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("admin")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(3)actual2=self.driver.switch_to.alert.textassert actual2=="用户不存在"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()#3.错误的用户名错误的密码,点击提交按钮self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("sisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1235678")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual3 = self.driver.switch_to.alert.textassert actual3 == "用户不存在"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#4.空的用户名和密码,点击提交按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual4 = self.driver.switch_to.alert.textassert actual4 == "账号或密码不能为空"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#5.只输入正确的用户名,不输入密码self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual5 = self.driver.switch_to.alert.textassert actual5 == "账号或密码不能为空"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#6.只输入错误的用户名,不输入密码self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lili")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual6 = self.driver.switch_to.alert.textassert actual6 == "账号或密码不能为空"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#7.只输入正确的密码,不输入用户名self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual7 = self.driver.switch_to.alert.textassert actual7 == "账号或密码不能为空"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#8.只输入错误的密码,不输入用户名self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)actual8 = self.driver.switch_to.alert.textassert actual8 == "账号或密码不能为空"self.driver.switch_to.alert.accept()self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# self.driver.quit()def LoginPageEle(self):#测试登录页面元素和点击登录页面的各个元素会有什么效果#等价来测试#查找一下我的博客系统self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > span")#点击写博客,跳转到博客编辑页self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()# BlogDriver.getScreeShot()#在编辑页点击发布文章按钮,跳转到博客登录页面,无法发布文章self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)

7.项目测试bug

bug简述
bug标题报告人是否修复

弱网下,登录页点击主页按钮出现异常,点击主页按钮,进入博客主页,右侧栏的发表的博客不会显示,但是会显示用户的个人信息,安全性不高

qlp未修复
在主页点击注销按钮,会到博客登录页,依靠命令back()会回答主页,点击主页的查看详情按钮,会回到博客登录页,并不是期待中的博客详情页qlp已修复

说明:第一个bug需要后端和前端开发人员来修复,次要bug,可以推迟到下一个版本优化

           第二个bug是本人的测试失误,注销以后,就是应该重新登录才能确保用户的信息安               全,不能过多依靠界面上的回退按钮,本人进行了失误判断

8.遗留问题

1.利用测试工具fiddler,进行弱网测试,可能是网站还不成熟,弱网测试效果不明显,属于次要bug,推迟到下一个版本来解决

2.没有注册功能,推迟到下一个版本来解决
3.用户名和密码格式不受限制,太杂乱,不好管理,推迟到下一个版本来解决
3.博客系统的登录按钮,没有关联键盘上的Enter键,不符合用户使用的惯性,推迟到下一个版本来解决

9.测试结果

本次项目测试通过,测试耗时四天。


以上就是博客项目的简单测试报告,有需要的铁子可以参考,希望可以帮助到大家,铁子们下期再见!!!

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

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

相关文章

树莓派5上手

1 安装系统 Raspberry Pi OS 是基于 Debian 的免费操作系统,针对 Raspberry Pi 硬件进行了优化。Raspberry Pi OS 支持超过 35,000 个 Debian 软件包。树莓派 5 可以安装各种系统,但是如果对于系统没有特殊的要求,还是安装 Raspberry Pi OS …

uniapp登录页面( 适配:pc、小程序、h5)

<!-- 简洁登录页面 --> <template><view class"login-bg"><image class"img-a" src"https://zhoukaiwen.com/img/loginImg/2.png"></image><image class"img-b" src"https://zhoukaiwen.com/im…

KAN 学习 Day4 —— MultKAN 正向传播代码解读及测试

在KAN学习Day1——模型框架解析及HelloKAN中&#xff0c;我对KAN模型的基本原理进行了简单说明&#xff0c;并将作者团队给出的入门教程hellokan跑了一遍&#xff1b; 在KAN 学习 Day2 —— utils.py及spline.py 代码解读及测试中&#xff0c;我对项目的基本模块代码进行了解释…

『功能项目』怪物的有限状态机【42】

本章项目成果展示 我们打开上一篇41项目优化 - 框架加载资源的项目&#xff0c; 本章要做的事情是按照框架的思想构建项目并完成怪物的自动巡逻状态&#xff0c;当主角靠近怪物时&#xff0c;怪物会朝向主角释放技能 首先新建脚本&#xff1a;BossCtrl.cs (通常把xxxCtrl.cs脚…

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…

深入理解数据分析的使用流程:从数据准备到洞察挖掘

数据分析是企业和技术团队实现价值的核心。 5 秒内你能否让数据帮你做出决策&#xff1f; 通过本文&#xff0c;我们将深入探讨如何将原始数据转化为有意义的洞察&#xff0c;帮助你快速掌握数据分析的关键流程。 目录 数据分析的五个核心步骤1. 数据获取常用数据获取方式 2. 数…

【CS110L】Rust语言 Lecture3-4 笔记

文章目录 第三讲 所有权:移动与借用&例1例2例3 错误处理&#xff08;开头&#xff09;为什么空指针如此危险&#xff0c;我们能做什么以应对&#xff1f;— 引出Optionis_none()函数unwrap_or()函数常见用法 第四讲 代码实践:链表Box节点和链表的定义节点和链表的构造函数判…

charls基于夜神模拟器抓取安卓7.0应用程序https请求

charls基于夜神模拟器抓取安卓7.0应用程序https请求 1、安装charls(安装步骤这里就不详细说了)2、下载证书(证书后缀名 xx.pem)3、使用git bash生成证书hash4、上传证书到安卓的系统证书目录下(夜神模拟器方案)5、验证抓包1、安装charls(安装步骤这里就不详细说了) 2、…

【Vue】2

1 Vue 生命周期 Vue生命周期&#xff1a;一个 Vue 实例从 创建 到 销毁 的整个过程 创建(create)阶段&#xff1a;组件实例化时&#xff0c;初始化数据、事件、计算属性等挂载(mount)阶段&#xff1a;将模板渲染并挂载到 DOM 上更新(update)阶段&#xff1a;当数据发生变化时…

数据中台建设(六)—— 数据开发-提取数据价值

数据开发-提取数据价值 数据开发涉及的产品能力主要包括三部分&#xff1a;离线开发、实时开发和算法开发。 离线开发主要包括离线数据的加工、发布、运维管理&#xff0c;以及数据分析、数据探索、在线查询和及时分析相关工作。实时开发主要涉及数据的实时接入和实时处理。算…

网络高级(学习)2024.9.10

目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 &#xff08;1&#xff09;线圈寄存器&#xff0c;类比为开关量&#xff0c;每一个bit都对应一个信号的开关状态。 &#xff08;2&#xff09…

[项目实战]EOS多节点部署

文章总览&#xff1a;YuanDaiMa2048博客文章总览 EOS多节点部署 &#xff08;一&#xff09;环境设计&#xff08;二&#xff09;节点配置&#xff08;三&#xff09;区块信息同步&#xff08;四&#xff09;启动节点并验证同步EOS单节点的环境如何配置 &#xff08;一&#xf…

第十一周:机器学习

目录 摘要 Abstract 一、字符级的RNN进行名字分类 1、准备数据 2、构造神经网络 3、训练 4、评价结果 5、预测 二、字符级的RNN生成名字 1、准备数据 2、构造神经网络 3、训练 4、网络采样&#xff08;预测&#xff09; 三、batch normalization 1、 feature n…

Bootstrap 警告信息(Alerts)使用介绍

本章将讲解警告&#xff08;Alerts&#xff09;以及 Bootstrap 所提供的用于警告的 class。警告&#xff08;Alerts&#xff09;向用户提供了一种定义消息样式的方式。它们为典型的用户操作提供了上下文信息反馈。 您可以为警告框添加一个可选的关闭按钮。为了创建一个内联的可…

【工具箱】NAND NOR FLASH闪存

随着国内集成电路的发展&#xff0c;特别是存储芯片方面&#xff0c;关于NOR Flash&#xff0c;NAND Flash&#xff0c;SD NAND, eMMC, Raw NAND的资料越来越多了。这里我专门写了这篇文章&#xff1a;1&#xff0c;把常用的存储产品做了分类; 2&#xff0c;把这些产品的特点做…

[Postman]接口自动化测试入门

文章大多用作个人学习分享&#xff0c;如果大家觉得有不足或错漏的地方欢迎评论指出或补充 此文章将完整的走一遍一个web页面的接口测试流程 大致路径为&#xff1a; 创建集合->调用接口登录获取token->保存token->带着token去完成其他接口的自动化测试->断言-&g…

Kafka下载与安装教程(国产化生产环境无联网服务器部署实操)

请放心观看&#xff0c;已在正式环境部署验证&#xff0c;流程无问题&#xff01; 所用系统为国产化麒麟银河 aarch64系统&#xff0c;部署时间2024年9月份&#xff01; [rootecs-xxxxxx-xxx ~]# cat /etc/os-release NAME"Kylin Linux Advanced Server" VERSION&q…

MySQL 查询数据库的数据总量

需求&#xff1a;查看MySQL数据库的数据总量&#xff0c;以MB为单位展示数据库占用的磁盘空间 实践&#xff1a; 登录到MySQL数据库服务器。 选择你想要查看数据总量的数据库&#xff1a; USE shield;运行查询以获取数据库的总大小&#xff1a; SELECT table_schema AS Datab…

go语言后端开发学习(七)——如何在gin框架中集成限流中间件

一.什么是限流 限流又称为流量控制&#xff08;流控&#xff09;&#xff0c;通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景&#xff0c;比如&#xff1a;某景区限制每日进入景区的游客数量为8万人&#xff1b;沙河地铁站早高峰通过站外排队逐一放行的…

JAVA毕业设计170—基于Java+Springboot+vue3+小程序的房屋租赁小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的房屋租赁小程序系统(源代码数据库)170 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、房东、管理员三种角色 1、用户&am…