一、测试目标及测试任务概括

        验证博客系统各个模块功能完整性,以及确保用户登录功能,首页,文章详情页和发布功能等核心模块符合要求

二、测试文档

类别 配置/版本
硬件 Dell G15 5530
手动测试浏览器 Microsoft Edge版本 148.0.3967.83
开发工具 Pycharm 2025.3.1
自动化测试工具 Selenum 4.0.0
操作系统 Windows 11 家庭中文版
自动化测试浏览器 Microsoft Edge版本 148.0.3967.83

三、测试用例

3.1登录界面测试用例

3.2主页面测试用例

四、手动功能测试系统

4.1登录页面

1.输入正确的用户名和密码

预期结果:登录成功

2.用户名为空和输入正确的密码

预期结果:登录失败,弹出警告“账号和密码不为空”

3.密码为空,输入正确的用户名

预期结果:登录失败,弹出警告“账号和密码不为空”

4.输入错误的用户名和密码

预期结果:登录失败,弹出警告“用户不存在”

4.2主页面

4.2.1首页

1.首页的昵称和登录的账号是否一致

预期结果:昵称和账号一致

2.点击“首页”按钮

预期结果:跳转到首页

3.点击博客列表的“查看全文”按钮

预期结果:打开文章

4.点击“写博客”按钮是否跳转到博客编辑页

预期结果:跳转到博客编辑页

5.点击“注销”按钮查看是否跳转到登录页面

预期结果:跳转到登录页面

4.2.2 博客详情页

1.查看是否存在博客标题

预期结果:存在博客标题

2.查看是否存在发布时间

预期结果:存在发布时间

3.查看是否存在博客的内容

预期结果:存在博客内容

4.查看是否成功返回首页

预期结果:成功返回首页

4.2.3博客编辑页

1.输入标题和内容,点击“发布”按钮

预期结果:发布成功

2.标题为空,正常输入内容,点击“发布”按钮

预期结果:弹出警告弹窗,发布失败

3.内容为空,正常输入标题,点击“发布”按钮

预期结果:发布失败


五、界面测试

图片正确显示、不遮挡关键信息、页面无错别字:

提示信息准确:

主页面图片正常显示、不遮挡关键信息、无错别字:

六、兼容性测试

6.1在Google Chrome浏览器打开

预期结果:正常打开,可以使用完整功能

6.2在Mircosoft Edge浏览器打开

6.3在vivo浏览器中打开

七、自动化测试

6.1创建utils.py文件,并在该文件中创建Driver类,用来存放自动化代码中的通用方法:

#创建驱动对象
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 BlogDriver:
    driver=None
    #共享浏览器
    @classmethod
    def init_driver(cls):
        if cls.driver is None:
            # 写手动下载的驱动路径
            edge_driver_path = r"D:\cxdownload\edgedriver_win64\msedgedriver.exe"
            service = Service(edge_driver_path)
            # 配置启动参数
            options = Options()
            # 解决跨域报错
            options.add_argument("--remote-allow-origins=*")
            # 创建浏览器对象
            cls.driver = webdriver.Edge(service=service, options=options)
    @classmethod
    def getScreeShot(cls):
        #创建屏幕截图
        #图片文件名称:./2026-05-25-173456.png
        #图片路径:../images/调用方法(这样可以快速判断是哪一个用例的截图)-2026-05-25/2026-05-25-173456.png
        #图片路径:../images/LoginFailTest1-2026-05-25/2026-05-25-173456.png
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否已经存在,若不存在则创建文件夹
        #../ images /2026-05-25
        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"
        cls.driver.save_screenshot("../images/"+dirname+"/"+filename)

6.2登录页面测

import time
from common.utils import BlogDriver
from selenium.webdriver.common.by import By
#测试博客登录页面

class BlogLogin:
    url=""
    driver=""
    def __init__(self):
        self.url=r"http://49.235.61.184:19090/blog_login.html"
        BlogDriver.init_driver()
        self.driver=BlogDriver.driver
        self.driver.get(self.url)
    #成功登录的测试用例
    def LoginSucTest(self):
        self.driver.get(self.url)
        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("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #能够找到博客登录首页用户的昵称,说明登录成功,否则登录失败
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        # 添加屏幕截图
        #BlogDriver.getScreeShot()
    # 异常登录的测试用例
    def LoginFailTest1(self):
        self.driver.get(self.url)
        #若连续多次的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()
        # 添加屏幕截图
        #BlogDriver.getScreeShot()
        #是否登录失败
        time.sleep(2)
        alert=self.driver.switch_to.alert
        alert.accept()
    def LoginFailTest2(self):
        self.driver.get(self.url)
        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("zansa")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # 添加屏幕截图
        BlogDriver.getScreeShot()
        # 是否登录失败
        time.sleep(2)
        alert = self.driver.switch_to.alert
        alert.accept()

6.3博客列表页测试

from selenium.webdriver.common.by import By
from common.utils import BlogDriver

#博客首页测试用例
class BlogList:
    url=""
    driver=""
    def __init__(self):
        self.url = r"http://49.235.61.184:19090/blog_login.html"
        BlogDriver.init_driver()
        self.driver = BlogDriver.driver
        #因为我的登录页面和博客详情页的url相同,所以并不下需要再次打开url
    #测试首页(登录情况下)
    def ListTestByLogin(self):
        #测试标题是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(155) > div.title")
        #测试博客内容是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(155) > div.date")

        #个人信息-检查昵称是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        # 测试按钮是否存在
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(155) > a").click()
        # 添加屏幕截图
        #BlogDriver.getScreeShot()

6.4博客详情页测试

import time
from selenium.webdriver.common.by import By

from common.utils import BlogDriver

#测试博客详情页
class BlogDetail:
    url=""
    driver=""
    def __init__(self):
        self.url = r"http://49.235.61.184:19090/blog_login.html"
        BlogDriver.init_driver()
        self.driver = BlogDriver.driver
    #登录状态下的博客详情页的测试
    def DetailTestByLogin(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")
        time.sleep(2)
        #检查内容
        self.driver.find_element(By.CSS_SELECTOR,"#detail > p")
        time.sleep(2)
        self.driver.back()
        time.sleep(2)
        #屏幕截图
        BlogDriver.getScreeShot()

6.5博客编辑页测试

import time
from selenium.webdriver.common.by import By
from common.utils import BlogDriver

#博客编辑页
class BlogEdit:
    url=""
    driver=""
    def __init__(self):
        self.url = r"http://49.235.61.184:19090/blog_login.html"
        BlogDriver.init_driver()
        self.driver = BlogDriver.driver

    #正确发布博客(登录状态)
    def EditSucTestByLogin(self):
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()
        self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("嘻嘻")
        #找到编辑区域,输入关键字发现编辑区无法操作,是因为有第三方插件的存在
        #菜单栏元素无法定位
        #博客系统编辑区默认情况下不为空,可以暂不处理测试

        #直接点击发布按钮来发布博客
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

        #点击完成之后出现页面的跳转,页面的跳转需要加载时间,可能会出现代码执行的速度比页面渲染的速度要快,导致元素查不到,英雌可以添加等待
        #添加隐式等待和显示等待都可以,任选一个
        #隐式等待:创建浏览器对象之后就可以加上,因为隐式等待的作用域在driver整个生命周期
        #显示等待:可以作用在当前代码中
        self.driver.refresh()
        time.sleep(2)
        actual=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(162) > div.title").text
        assert actual=="嘻嘻"
        # 添加屏幕截图
        BlogDriver.getScreeShot()

6.6集成测试

        所有的测试用例都在RunTest.py文件例运行:

from test import BlogLogin
from test import BlogList
from common.utils import BlogDriver
from test import BlogDetail
from test import BlogEdit
if __name__=="__main__":#这行代码代表着项目中程序的入口
    BlogDriver.init_driver()
    BlogLogin.BlogLogin().LoginFailTest1()
    BlogLogin.BlogLogin().LoginSucTest()
    #登录成功之后就可以调用博客首页测试首页的用例(登录状态)
    BlogList.BlogList().ListTestByLogin()
    #博客详情页的测试用例(登录状态)
    BlogDetail.BlogDetail().DetailTestByLogin()
    #博客编辑页的测试用例
    BlogEdit.BlogEdit().EditSucTestByLogin()
    #指定浏览器的退出
    BlogDriver.driver.quit()

更多推荐