1、项目背景
该项目是一个论坛系统,前端主要有五个页面构成:登录页、列表页、详情页以及编辑页以及个人主页,用户可以登录或者注册账号来进行访问,论坛中可以查看别人发布的帖子,进行点赞和评论,亦或者自己发布帖子。主页设有消息提示窗口与日\夜间模式,在个人中心中可以进行个性化设置和管理自己发布的帖子。
2、测试目标以及测试任务概况
本次测试主要对登录,注册,查看帖子,发布帖子,管理帖子,个人中心进行测试。测试内容包含基本功能测试,界面测试,易用性测试,安全测试,兼容性测试,弱网测试。详细测试分工如下表。

2.1测试内容概述
功能测试:针对不同的功能设计测试用例,要求测试用例100%通过。本项目的自动化测试脚本设计思路通过webdriver模块初始化浏览器实例,利用Selenium提供的定位方法精准获取页面元素,模拟用户操作,结合显式等待确保页面动态加载完成,最后通过断言或者是判断语句验证实际结果与预期是否一致,并在测试结束后调用quit()释放资源。
界面测试:测试界面设计是否与设计文档符合。
易用性测试:测试界面是否易于操作,是否具备一定的引导性,是否符合用户的行为习惯。
安全测试:测试能否防止SQL注入攻击,是否保护了用户隐私安全。
兼容性测试:能否在windows,macOS,Android,IOS上正常运行。
弱网测试:能否在2G,3G弱网情况下正常运行。
3、测试计划
3.1登录测试
3.1.1功能测试
针对登录功能,设计了如下测试用例

3.1.1.1实际执行操作部分操作步骤,以正常登录为例
(此处测试环境为Windows11家庭版,Edge 135.0.3179.73正式版本64 位)
输入正确的账号和密码登录

登录后进入论坛首页

根据测试用例,用python设计自动化测试脚本(Windows11家庭版 Chrome135.0.7049.95 正式版本 64 位 )。
因为需要多次创建driver对象,所以我们可以将相关功能设计到一个py文件中,方便我们后续操作,在这里我们添加了一个截图功能,根据时间和当前调用的py文件名来进行来进行存储,方便我们记录测试时的各种情况。
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()
self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
self.driver.implicitly_wait(5)
def gerScreeShot(self):
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
if not os.path.exists("../images/" + dirname):
os.mkdir("../images/" + dirname)
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)
ForumDriver = Driver()
而后对登录功能的测试用例进行编写,代码如下:
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumLogin:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:9580/sign-in.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
def LoginSuctest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("azaz")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#能找到表示登录成功
self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title")
ForumDriver.gerScreeShot()
#手动传参
def LoginFailTest(self, username, password):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#还能找到表示登录失败
self.driver.find_element(By.CSS_SELECTOR, "#submit")
ForumDriver.gerScreeShot()
def PasswordSee(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("azaz")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#password_a > svg").click()
password = self.driver.find_element(By.CSS_SELECTOR, "#password").text
#assert password == "123456"
然后在runtest.py中调用
import time
from tests.ForumHomePage import ForumHomePage
from tests.ForumLogin import ForumLogin
from tests.ForumRegisterer import ForumRegisterer
if __name__ == "__main__":
#登录测试
Login = ForumLogin()
Login.LoginFailTest("azaz", "1234567")
Login.LoginFailTest("azaza", "1234567")
Login.LoginFailTest("", "")
Login.LoginFailTest("azaz", "")
Login.PasswordSee()
Login.LoginSuctest()
运行测试。

发现测试符合我们的预期。并且在对应的文件路径下生成了我们需要的截图。

3.1.2界面测试
经对比发现,界面符合设计文档。
3.1.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.1.4弱网测试
弱网测试这里我们采用Fiddler工具来模拟弱网环境,对界面进行弱网测试。
我们通过修改Fiddler的弱网脚本来更改上行速率与下行速率来进行弱网测试。

设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成登录。
3.1.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
3.2注册测试
3.2.1功能测试
针对注册功能设计如下测试用例。

因为在异常注册中,涉及了多种情况,穷尽测试的话成本过大,因此采用正交表来简化测试用例。
3.2.1.1使用allpairs工具设计测试用例
首先,我们在excel中输入测试用例与情况。

然后将其复制到allpairs路径下的一个txt文件中(注意不要做过的操作,复制之后保存即可),我们以test.txt为例。

然后我们打开cmd窗口,进入到allpairs的路径下,使用allpairs完成设计。

之后我们在allpairs路径下打开生成的testexample.txt即可看到设计的用例

值得注意的是,allpairs设计的与正交表有所差异,但是我们不关注,我们需要做的是在allpairs生产的基础上进行补充,完成测试用例的设计。
这里我们就不再展示基础的测试截图,直接展示python自动化脚本的代码。
import datetime
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumRegisterer:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:9580/sign-in.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
self.driver.find_element(By.CSS_SELECTOR,
"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
def RegisterSuctest(self):
date = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("test" + date)
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("test" + date)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#能找到代表注册成功且返回主页了
self.driver.find_element(By.CSS_SELECTOR,
"body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2")
ForumDriver.gerScreeShot()
self.driver.find_element(By.CSS_SELECTOR,
"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
def RegisterFailtest(self, username, nickname, password, passwordRepeat, agree):
date = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
if not username == "":
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username + date)
if not nickname == "":
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(nickname + date)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys(passwordRepeat)
if agree == 1:
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#找到代表注册失败
self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > h2")
ForumDriver.gerScreeShot()
def RepeatRegisterFailtest(self, username, nickname, password, passwordRepeat):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(nickname)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys(passwordRepeat)
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#找到代表注册失败
self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > h2")
ForumDriver.gerScreeShot()
self.driver.back()
def PolicyClick(self):
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
import time
from tests.ForumHomePage import ForumHomePage
from tests.ForumLogin import ForumLogin
from tests.ForumRegisterer import ForumRegisterer
if __name__ == "__main__":
#注册测试
Register = ForumRegisterer()
Register.RegisterSuctest()
Register.RegisterFailtest("test", "", "", "", 0)
Register.RegisterFailtest("", "test", "", "123456", 0)
Register.RegisterFailtest("", "", "123456", "", 1)
Register.PolicyClick()
Register.RegisterFailtest("", "test", "123456", "", 0)
Register.RegisterFailtest("test", "", "", "123456", 1)
Register.PolicyClick()
Register.RegisterFailtest("", "", "", "", 0)
Register.PolicyClick()
Register.RepeatRegisterFailtest("test", "test", "123456", "123456")
运行后符合我们的测试结果。
3.2.2界面测试
通过对界面的测试发现了一个问题。

当用户在注册输入密码或者是确认密码时,会出现两个查看密码的按钮,这并不符合我们的设计文档,因此标记为一个次要Bug(不影响系统的运行)。
除此之外,其余各项测试均符合设计文档。
3.2.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.2.4弱网测试
设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成注册。
3.2.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
3.3查看帖子、点赞、评论
3.3.1功能测试
测试用例设计。

经过测试我们发现了一个问题,在windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,我们点击点赞按钮后,再次点击点赞按钮,意为取消点赞,但是系统的结果是再次点赞,发现了一个bug。因为该bug不影响系统运行,但是会影响用户体验,因此将该bug等级标注为严重bug。

3.3.2界面测试
对比设计文档我们发现,在windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,网页的文档分类栏加载不全面。

由于此bug未影响系统运行,但是影响了用户体验,因此等级标注为严重bug。
3.3.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.3.4弱网测试
设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成查看帖子,点赞,评论,私信功能。
3.3.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
3.4发帖功能测试
3.4.1功能测试
测试用例设计。

经测试发现,在windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,我们在试图将一级标题转化为二级标题时发现,我们并不是将变异去并不能正确的将一级标题转化为二级标题,而是在一级标题的基础上添加了二级标题的Markdown语法,导致出现bug。由于此bug未影响系统运行但是已影响了用户体验,因此标记为严重bug。

3.4.2界面测试
经对比发现,界面符合设计文档。
3.4.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.4.4弱网测试
设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成发帖功能。
3.4.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
3.5个人中心与帖子管理
3.5.1功能测试
测试用例设计。

经测试发现,windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,在帖子管理中,并未设计删除帖子功能,不符合设计文档,且影响了用户体验而未影响系统运行,标记为严重bug。

经测试发现,windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,在个人中心中,用户更改密码时如果点击了查看密码按钮会导致页面滚动至最顶层,影响了用户体验而未影响系统运行,标记为严重bug。
经测试发现,windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下,图像地址为C:\Users\22910\Desktop\picture.png时,在个人中心中,用户无法完成更改头像操作,影响了用户体验而未影响系统运行,标记为严重bug。

3.5.2界面测试
经对比发现,界面符合设计文档。
3.5.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.5.4弱网测试
设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成个人中心信息更改与帖子管理功能。
3.5.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
3.6接收消息/日间夜间切换/搜索
3.6.1功能测试
测试用例设计

经测试发现在windows11家庭版,Chrome135.0.7049.95 正式版本 64 位环境下搜索功能无效,即在搜索框输入内容搜索之后并未出现搜索结果,而是返回主页。
3.6.2界面测试
经对比发现,界面符合设计文档。
3.6.3易用性测试
界面设计符合用户习惯,各个按钮大小适中,错误提示明显,具备引导性。
3.6.4弱网测试
设计测试用例
| 项目 | 上行参数 | 下行参数 | 测试人 |
| 登录弱网测试2G | 1000 | 1500 | azaz |
| 登录弱网测试3G | 200 | 300 | azaz |
测试发现系统在该情况下可以完成个人中心信息更改与帖子管理功能。
3.6.5兼容性测试
用例设计。

在上述测试用例中重复之前的测试,经测试发现,符合预期。
4、测试总结与BUG汇总
4.1测试总结
本次测试总共耗时6天,共测试出了8个bug,其中0个崩溃级,7个严重级,1个次要级。
4.2Bug汇总

2005

被折叠的 条评论
为什么被折叠?



