P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。
文章目录
一、项目背景
-
项目概要
本项目是一个全功能的个人博客系统,旨在提供一个用户友好、功能全面的平台,允许用户注册、登录、浏览博客、查看详细内容、发表评论以及发布和管理个人博文。项目的核心功能包括博客列表、博客详情页、用户登录注册、个人中心和发布博客功能。
-
测试报告目的
测试报告的主要目的是验证博客系统的功能完整性、性能和安全性。通过对每个核心功能的综合测试,确保系统能够在真实环境中稳定运行,并满足用户的预期需求。此外,报告还旨在识别潜在的问题和缺陷,为后续的开发和改进提供指导。
-
测试总体执行情况
主要针对常见功能进行测试例如:博客登录页面,博客列表页面,博客详情页,博客编辑页...
二、测试环境
软件:Google Chrome
测试工具:自动化测试工具Selenium
操作系统:Windows 11
浏览器版本:Google Chrome版本 129.0.6668.59(正式版本) (64 位)
三、手工测试用例
博客登录页
个人博客列表页
博客详情页
博客编辑页
四、编写测试用例
五、自动化测试selenium
- 创建浏览器对象
cpp
#创建一个浏览器对象
import datetime
import os.path
import sys
import time
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(2)
def getScreeeShot(self):
# 创建屏幕截图
if not os.path.exists("../images"):
os.mkdir("../images")
time.sleep(2)
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
#判断dirname文件夹是否存在,若不存在则创建文件夹
if not os.path.exists("../images/" + dirname):
os.mkdir("../images/" + dirname)
time.sleep(2)
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()
- 测试博客登录页面
cpp
import time
from selenium.webdriver.common.by import By
from common.utils import BlogDriver
#测试博客登录页面
class BolgLogin:
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").send_keys("zhangsan")
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.getScreeeShot()
#返回登录页面
self.driver.back()
#异常登录测试
def LoginFailTest(self):
# 若连续多次send_keys会出现关键词拼接, 而不是替换,要先clear一下
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("zhangsan")
#错误密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(3)
# 添加一个屏幕截图
BlogDriver.getScreeeShot()
time.sleep(3)
self.driver.quit()
login = BolgLogin()
login.LoginSucTest()
login.LoginFailTest()
- 博客首页测试用例
cpp
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):
#测试博客标题是否存在
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) > div.desc")
#按钮是否存在
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.left > div > h3")
list = BlogList()
list.ListTestByLogin()
- 博客详情页
cpp
from selenium.webdriver.common.by import By
from common.utils import BlogDriver
#博客详情页
class BlogDeail:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=5128"
self.driver = BlogDriver.driver
self.driver.get(self.url)
#登录状态下博客详情页测试
def DeailTestByLogin(self):
#标题
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")
- 博客编辑页面
cpp
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 EditSucTestByLogin(self):
self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试创建")
#博客编辑区域不好找,默认情况下为空,可以暂时不考率
#self.driver.find_element(By.CSS_SELECTOR, "#editor > div.editormd-toolbar > div > ul > li:nth-child(21) > a > i").clear()
#直接点击发布按钮来发布博客
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
-
创建浏览器对象
创建测试化对象,负责初始化浏览器,以及相应的屏幕截图。
-
测试博客登录页面
登录博客,读取用户名、密码和预期的博客列表URL。
打开博客登录页面并输入账号密码。
点击提交按钮,验证是否成功跳转到博客列表页。
检查页面上是否显示了正确的用户名。
-
博客首页测试用例
打开博客列表页面
检查标题,内容,按钮等是否存在
点击博客列表中的"查看全文"按钮,验证当前URL、页面标题和博客标题是否符合预期。
-
博客详情页
查看已发布的文章,是否与预期相符
读取标题、时间、内容等是否符合预期
-
博客编辑页面
检查博客编写是否存在问题
检查标题、按钮、编辑区(博客编辑区域不好找,默认情况下为空,可以暂时不考率)
这个测试流程涵盖了博客系统的主要功能,包括登录、列表展示、详情查看、写博客、信息校验。每个测试用例都设计有明确的预期结果,并通过断言来验证这些预期是否得到满足。