目录
一,项目背景
二,项目功能
三,测试计划
1.功能测试
2.自动化测试
3.性能测试
登录测试
一,项目背景
1.该项目前端由4个页面构成:登录页,列表页,详情页以及编辑页,模拟简单的个人博客。在后端实现:登录,编辑博客,注销,删除博客等功能
2.该项目没有设计用户注册功能,只能提前在数据库中存储用户信息,并检验是否能登录,并且前端将头像设置成静态,无法在页面上进行修改。
3.个人博客系统可以实现简单的个人博客记录,如时间,标题,内容以及发布作者等可以进行查看。
二,项目功能
个人博客主要实现以下功能:登录,注销,写博客,查看博客,以及删除博客等功能。
1.登录功能:用户名以及密码在后端数据库中存储,实现注册功能。所有输入的账号密码都是已经存在的,登录成功则跳转到列表页面,未登录状态下点击只会跳转到登录页面。
2.列表页面:顶层有头像,主页按钮,写博客按钮,注销按钮,点击主页则返回主页,点击写博客则跳转到博客编辑页,点击注销则返回登录页。中部有可以查看列表内存在的博客简介,包括博客的标题,编辑时间,部分内容,以及点击查看按钮,点击查看按钮跳转到博客详情页。
3.详情页面:在博客列表页点击查看全文按钮会跳转到博客详情页,在详情页可以查看完成的博客内容。同时顶部存在相同的主页,写博客,注销的三个按钮,在博客详情页内有编辑和删除俩个按钮,删除及删除当前详情页的内容并跳转到列表页,点击编辑按钮可以继续对博客内容进行修改编辑。
4.写博客页面:在登录之后点击任意界面的写博客按钮之后会进去博客编辑页面,此时便可以在该页面进行博客编辑,在确保正确编辑之后点击发布文章,文章被成功发布后跳转到列表页。
三,测试计划
一)功能测试
1测试用例
2.执行测试操作步骤的截图
(1)正常登录:
(2)错误登录:
(3)写博客测试:
(4)发布成功后的博客详情页
(5)删除博客
进入博客详情页点击删除,上述写的博客就被删除了
(6)点击注销后回到登录页
二)自动化测试
根据测试用例进行代码编写
1.主要针对个人博客系统项目进行测试,个人博客系统由四个页面构成:登录页面,列表页面,详情页面和编辑页面。主要功能有:登录,编辑,发布博客,查看详情,删除博客以及注销等功能。
2.自动化测试步骤:
(1)使用自动化测试实例编写web自动化测试
(2)创建自动化测试项目,根据自动化测试用例实现脚本
3.代码编写
(1)根据测试化实例编辑每一个页面的测试类,然后进行各个类中测试相应的测试用例。
(2)将共同调用的内容放入一个独立的类中,方便其他代码的调用
(3)安装测试工具方便测试。
(4)创建一个调用函数可以一次调用所有页面类的内容。
(5)添加等待,防止页面因渲染未完成导致识别不到相应内容。
1.在python环境中配置selenium和webdriver-manager环境
安装驱动管理
命令:pip installwebdriver-manager
安装selenium库
版本 pip installselenium==4.0.0
确认在python编译器里面能找到对应内容就安装完成
2.创建测试类以及共用类
(1)公共类Utils.py
1.创建驱动以及截图工具
2.保存运行时的截图是以运行时间以及调用的类来命名(那个类调用截图保存的图片每次含有该类的名字)
3.创建时可以设置有头或者无头模式。
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
class Driver:
driver = ""
def __init__(self):
Service(ChromeDriverManager().install()),options=options)
path = "D:\python\edg\edgedriver_win64\msedgedriver.exe" # 替换为你的驱动路径
# 2. 增加浏览器配置,创建驱动对象强制指定允许访问所有的链接
options = Options()
options.add_argument("--remote-allow-origins=*")
# 3. 创建 WebDriver对象
self.driver = webdriver.Edge(service=Service(path), options=options)
webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()), options=options)
def getScreenShot(self):
#创建屏幕截图
#图片名称:2025-08-12-163220.png
#图片路径
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)
BlogDriver = Driver()
(2)RunTest.py
1.设置的程序入口,在这里就可以调用上述tests中所有的类
from tests import BlogList
from tests import BlogLogin
from common.Utils import BlogDriver
from tests import BlogDetail
from tests import BlogEdit
if __name__== "__main__":
BlogLogin.BlogLogin().LoginFailTest()
BlogLogin.BlogLogin().LoginSucTest()
#登录状态下可以调用博客首页测试首页的用例
BlogList.BlogList().ListTestByLogin()
#登录状态下的博客详情页
#BlogDetail.BlogDetail().DetailTestByLogin()
#登录状态下博客编辑页
BlogEdit.BlogEdit().EditSucTest()
BlogDriver.driver.quit()
(3)测试登录页BlogLogin.py
1.修改驱动指向的url
2.测试页面是否正常打开
3.测试异常登录:找到页面中的用户名输入框,密码输入框以及登录按钮,在用户名/密码错误的情况下点击登录进行测试
4.测试正常登录:找到页面中的用户名输入框,密码输入框以及登录按钮,在用户名以及密码都正确的情况下是否能正常进入博客详情页
5.这里需要注意如果先进行异常登录测试,需要在进行正常登录测试前清除输入框内的内容。
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from 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.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("lisi")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#能够找到博客首页用户昵称,说明登录成功,否则登录失败
time.sleep(2)
#self.driver.switch_to.alert.accept()
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
BlogDriver.getScreenShot()
self.driver.back()
#失败登录的测试用例
def LoginFailTest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
#self.driver.refresh()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
BlogDriver.getScreenShot()
#可以放开下面代码单独测试该页面的功能
# login = BlogLogin()
# login.LoginSucTest()
# login.LoginFailTest()
(4)测试列表页BlogList.py
1.修改驱动指向的url
2.测试页面是否正常打开
3.测试列表页的查看全文按钮是否能正常跳转
4.测试列表页的个人信息栏在不在
5.测试列表页的顶部的按钮是否存在
6.测试点击注销按钮是否会返回到主页
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
#博客首页测试用例
class BlogList:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_list.html"
self.driver = BlogDriver.driver
self.driver.get(self.url)
#测试首页(登录情况下)
def ListTestByLogin(self):
#检测标题在不在
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title")
#检测查看全文在不在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")
#检测按钮在不在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.date")
#检测个人信息在不在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
#添加截图
BlogDriver.getScreenShot()
#测试首页(未登录情况下)
# list = BlogList()
# list.ListTestByLogin()
(5)测试编辑页BlogEdit.py
1.修改驱动指向的url
2.测试编辑页面是否正常打开
3.测试博客是否能正常发布
4.测试写博客按钮是否能正常进入编辑页面
5.测试未登录状态下能否进入博客编辑页
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
#博客编辑页
class BlogEdit:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_edit.html"
self.driver = BlogDriver.driver
self.driver.get(self.url)
#测试编辑页面(登录状态下)
def EditSucTest(self):
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("1641654")
self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
(6)’测试详情页BlogDetail.py
1.修改驱动指向的url
2.测试详情页是否能正常打开
3.测试编辑按钮能否继续编辑
4。测试删除按钮能否正常删除
5.检测详情页的标题,时间以及内容是否存在
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
#测试博客详细页
class BlogDetail:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=151747"
self.driver = BlogDriver.driver
self.driver.get(self.url)
#登录状态下
def DetailTestByLogin(self):
#检查标题
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")
#检测时间
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")
#检测内容
self.driver.find_element(By.CSS_SELECTOR,"#detail > p")
#屏幕截图
BlogDriver.getScreenShot()
(7)pyhton会自动释放申请的空间,不需要管理,在上述内容测试结束后需要在RunTest.py中执行退出页面操作
3.代码测试
代码测试完成,程序正常运行。
自动化测试小结:一点要关注测试顺序,如要先执行异常登录在执行正常登录,否则后续测试无法进行,提价等待时间否则会出现页面未渲染完成程序已经运行完的情况会出现报错,如果那个测试用例出错可以先一个页面一个页面的进行筛选,直到找到报错页面,在查看报错原因。
三)性能测试
使用jmeter进行简单的性能测试:针对登录,用户信息,列表页,详情页以及添加博客进行性能测试
1.添加访问地址
2.通过开发者工具查看请求接口的类型
在jmeter中设置登录的数据运行后可在查看报告树中查看
运行后可在查看结果树中查看是否成功访问
3.访问列表页
在访问列表页时,需要拿到登录成功的凭证,否则无法进入列表页
之后添加登录成功的凭证给后续页面使用否则无法访问后续页面,我们这里这样设置的原因是登录凭证是有时效性的,只能动态的去获取登录凭证
之后运行程序,都可以使用登录成功的凭证,访问列表页面
如果没有登录凭证则会访问失败
4.在访问详情页时可以给特点页去访问如下图
5.添加博客在进行博客添加时需要注意我们要检测的json类型的数据是否和博客写的内容相同。
6.设置迭代次数
在jmeter使用时可以添加多线程进行运行
例如10个用户要进行访问只需要将线程数量该为10
7。并发进行性能测试,导出测试报告及图表
设置20个并发,每隔3秒有5个并发在1秒内完成一共需要进行60秒
最后在命令行内输入命令生成测试报告下面链接是本人生成的测试报告