团队作业5——测试与发布(Alpha版本)
| 课程 | 2024软件工程 |
|---|---|
| 作业要求 | 团队作业5——测试与发布(Alpha版本) |
| 作业目标 | 测试并发布 |
测试概述
本测试计划旨在为新开发的宿舍管理系统、进行全面的测试,以确保其满足既定的功能需求、性能标准、安全性要求及兼容性标准。测试将覆盖所有新开发的功能点,并进行必要的非功能测试,以保障产品的质量和用户体验
测试范围
2.1.1 功能测试:覆盖所有新开发的功能点,包括但不限于用户注册与登录、主题圈创建与管理、话题发布与展示等。
2.1.2 非功能测试:
性能测试:评估系统在高负载下的响应时间、吞吐量等。
测试目标
确保所有功能按预期工作,无严重缺陷。
验证系统的性能、安全性和兼容性满足既定标准。
提供详细的测试报告和缺陷记录,以供开发和产品团队参考。
测试用例

测试方法
本次测试主要分为自动化测试和梯度压力测试
自动化测试
语言:python
工具:selenium
使用selenium中的webdriver模块用于驱动浏览器,并在代码中通过驱动对网址进行访问
自动化测试分为四个模块

如下为自动化测试脚本:
代码结构

如上图:
common包中的utils脚本用于生成公用的浏览器驱动器供其他模块调用
代码:
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
options.add_argument("--remote-allow-origins=*")
self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
self.driver.implicitly_wait(2)
def getScreeShot(self):
# 创建屏幕截图
# 图片文件名称:./2024-05-08-173456.png
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
# 判断dirname文件夹是否已经存在,若不存在则创建文件夹
# ../images/2024-05-08
if not os.path.exists("../images/" + dirname):
os.mkdir("../images/" + dirname)
# 2024-05-08-173456.png
# 图片路径:../images/调用方法-2024-05-08/2024-05-08-173456.png
# 图片路径:../images/LoginSucTest-2024-05-08/2024-05-08-173456.png
# 图片路径:../images/LoginFailTest-2024-05-08/2024-05-08-173456.png
filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime(
"%Y-%m-%d-%H%M%S") + ".png"
self.driver.save_screenshot("../images/" + dirname + "/" + filename)
BlogDriver = Driver()
Login_register中定义TBLogin类用于利用URL进行网页访问和自动化注册,登录
代码:
import time
from selenium.webdriver.common.by import By
from common.utils import BlogDriver
# 测试登陆页面
class TBLogin:
url = ""
driver = ""
def __init__(self):
self.url = 'http://10.21.32.192:8080/login'
self.driver = BlogDriver.driver
self.driver.get(self.url)
# 用账号登录并记录登录情况
def testLogin(self):
# 点击登录按钮
self.driver.find_element(By.CSS_SELECTOR, "#basic_username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#basic_password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#basic_username").send_keys("测试账号")
self.driver.find_element(By.CSS_SELECTOR, "#basic_password").send_keys("testpasswd")
self.driver.find_element(By.CSS_SELECTOR, "#basic > div.ant-form-item.mt-3.css-14sxnx2 "
"> div > div > div > div > button").click()
# 检查登录情况
res = self.driver.find_element(By.CSS_SELECTOR, "div > div > div > div > "
"span.anticon.anticon-check-circle > svg > path").text
self.driver.getScreenShot()
assert res, "登录成功"
# 通过邮箱注册
def testRegister(self):
self.driver.find_element(By.CSS_SELECTOR, "#basic > div.ant-row.css-14sxnx2 > "
"div.ant-col.ant-col-15.css-14sxnx2 > span").click()
self.driver.find_element(By.CSS_SELECTOR, "#basic_username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#basic_email").clear()
self.driver.find_element(By.CSS_SELECTOR, "#basic_email").clear()
self.driver.find_element(By.CSS_SELECTOR, "#basic_username").send_keys("测试账号")
self.driver.find_element(By.CSS_SELECTOR, "#basic_email").send_keys("3086094473@qq.com")
self.driver.find_element(By.CSS_SELECTOR, "#basic_password").send_keys("testpasswd")
self.driver.getScreenShot()
# 检查登录情况
res = self.driver.find_element(By.CSS_SELECTOR,
"#root > div.adm-tab-bar.fixed.bottom-0.w-screen.shadow-sm.bg-gray-50 "
"> div > div.adm-tab-bar-item.adm-tab-bar-item-active "
"> div.adm-tab-bar-item-title.adm-tab-bar-item-title-with-icon").text
assert res, "话题"
self.driver.close()
cicle中定义类ManageCircle用于对已经登录的账号中的主题圈进行管理
代码:
from typing import Callable
from selenium.webdriver.common.by import By
from common.utils import BlogDriver
class ManageCircle:
driver = ""
def __init__(self):
self.driver = BlogDriver.driver
# 测试创建主题圈
def creCircle(self):
# 点击创建主题圈
self.driver.find_element(By.CSS_SELECTOR, "#root > div.adm-pull-to-refresh > div.adm-pull-to-refresh-content "
"> div > div.flex.w-screen.px-5 > span").click()
# 填写主题圈名
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.p-5.px-6 > input").send_keys("校园圈测试")
# 填写主题圈内容
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.p-5.px-6 > textarea").send_keys("测试")
# 截图
BlogDriver.getScreeShot()
# 发布主题圈
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.adm-nav-bar "
"> div.adm-nav-bar-right > button").click()
# 查看发布结果
restxt = self.driver.find_element(By.CSS_SELECTOR, "#rc-tabs-11-tab-3").text
assert restxt, "测试主题圈"
BlogDriver.getScreenShot()
topic中定义ManageTopic类用于对账号的话题进行管理
代码:
from selenium.webdriver.common.by import By
from common.utils import BlogDriver
class ManageTopic:
driver = ""
def __init__(self):
self.driver = BlogDriver.driver
def CreTopic(self):
# 上传话题
# 点击话题
self.driver.find_element(By.CSS_SELECTOR, "#root > div.adm-tab-bar.fixed.bottom-0.w-screen.shadow-sm.bg-gray-50 "
"> div > div.adm-tab-bar-item.adm-tab-bar-item-active").click()
# 点击创建
self.driver.find_element(By.CSS_SELECTOR, "#root > div.adm-floating-bubble "
"> div.adm-floating-bubble-button").click()
# 输入内容
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.p-5.px-6 > textarea").send_keys("测试内容")
# 截图
BlogDriver.getScreeShot()
# 点击发布
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.adm-nav-bar "
"> div.adm-nav-bar-right > button").click()
# 验证话题上传效果
txt = self.driver.find_element(By.CSS_SELECTOR, "#root > div.py-5 > div:nth-child(1) "
"> div > div.text-sm" ).text
assert txt, "test"
BlogDriver.getScreeShot()
预期结果
注册模块预期结果:成功注册
登录预期结果:成功登录
创建主题圈预期结果:创建成功并展示
创建话题预期结果:创建成功并展示
实际结果
注册


登录


创建话题圈


创建主题

由上图可知:
注册实际结果:成功
登录实际结果:成功
管理话题圈实际结果:成功
管理主题实际结果:成功
梯度压力测试
测试工具:jmeter工具

如上图分别测试登录,创建,发布三个模块
聚合报告如下:

线程数量变化情况:

TPS图:

RTT图:

根据性能测试可以得知,这个项目允许的极限并发数为两千左右。稳定情况下的允许的并发用户为一千人左右。
足够正常情况下校园师生使用
测试总结
1. 在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个?
(1) 发现了四个bug,分别是:
(2) 登录时点击登录无法跳转
(3) 界面布局在页面大小改变时有变化
(4) 图片上传后,加载有问题
(5) 后端服务器曾经一度无法访问
2. 修复的bug:
(1) 跳转和上传已修复
3. 不能重现的bug
(1) 服务器无法访问
4. 这个产品就是这样设计的,不是bug;
无
5. 没有能力修复,将来也不打算修复;
无
6. 这个bug的确应该修复,但是没有时间在这个版本修复,延迟到下一个版本修复。
页面布局问题
7. 场景测试(scenario testing),包括以下内容:
(1) 使用有效邮箱登录,使用无效邮箱登录
(2) 使用有效邮箱注册,使用无效邮箱注册
(3) 创建主题圈,管理员审核主题圈
(4) 主题圈管理操作(关闭、推荐)
(5) 发布包含文字的话题,发布包含图片的话题
8. 你认为你们团队的软件在什么条件下,就可以认定其已经足够好,可以发布Alpha版本?——出口条件(exit criteria)
(1) 核心功能均已实现
(2) 代码质量合格,与预期相符
(3) 性能合格,满足预期目标
(4) 合法
(5) 具备反馈机制或者反馈通道
(6) 完成初步的测试
# 发布说明
功能
-
登录注册 管理员,用户(默认,可升级为管理员,升级不做审核,省略后台管理系统的工作量)
-
建主题圈(管理员)
-
发布话题(直接发布默认在校园圈,也可以在主题圈内发布)
-
话题审核(圈有圈管理员审核话题)
-
话题评论(文字,语音,图片,小文件,不用审核)
-
搜索功能(推荐展示热门话题)
-
聊天(纯文字聊天,提供授权交换联系方式,个人信息详情,参考boss )
-
圈内微应用(微前端架构,方便后续拓展):
-
- 传送门(管理员收集圈内相关链接快捷跳转,比如饭圈跳转美团,校园圈跳转学校系统等)
-
- 转盘(管理员收集圈内相关主题建立转盘,比如饭圈南亭主题随机美食)
-
运行环境
| 平台 | Windows |
|---|---|
| 浏览器 | Edge / Chrome |
| 硬件配置 | 常规电脑即可 |
| 网络配置 | 校园网即可 |
系统已知的问题和限制
无
软件的发布方式以及发布地址
发布方式:网站
DreamToByteDance

浙公网安备 33010602011771号