当前位置: 首页 > news >正文

个人博客系统——测试报告

一 、项目介绍

     

本项目对“个人博客系统”进行功能、兼容性测试,并编写selenium自动化测试脚本对其进行自动化测试。测试的核心内容包括对用户登录页,博客列表页,博客详情页,博客编辑页,博客发布页进行测试。

二、测试

(1)功能测试

  • 测试环境:Windows 10
  • Chrome版本: 136.0.7091.2 (正式版本)  (64 位)
  • 测试方式:手动测试

1.  用户登录页面

测试步骤:

     1.输入正确的用户名和密码,点击提交

     2.输入错误的用户名/密码,点击提交

     3. 用户名/密码为空,点击提交

期望结果:

     1.成功登录,进入博客首页

     2.登录失败,弹窗显示“密码错误”

     3.登录失败,弹窗显示“账号或密码不能为空”

实际结果:

     1.与期望结果一致,测试通过

     2.与期望结果一致,测试通过

     3.与期望结果一致,测试通过

测试案例展示:

    测试步骤2:输入错误的用户名/密码,点击提交

2.  博客列表页

测试步骤:

       进入博客列表页后,查看博客列表是否加载成功,以及博客发布时间是否正确,标题、文章内容是否正确显示

期望结果:博客列表加载成功,博客发布时间,标题、文章内容正确显示

实际结果:与期望结果一致,测试通过

3.  博客详情页

测试步骤:

       打开某博客详情页,查看博客标题、时间、内容等信息是否正确显示

期望结果:博客标题、时间、内容等信息正确显示

实际结果:与期望结果一致,测试通过

4.  博客发布页

测试步骤:

       1.标题、内容不为空,点击发布文章

       2.标题/内容为空,点击发布文章

期望结果:

       1.成功发布博客

       2.博客发布失败,弹窗警告

实际结果:

       1.与期望结果一致,测试通过

       2.与期望结果一致,测试通过

测试案例展示 

       测试步骤2:标题/内容为空,点击发布文章

5.  博客编辑页

测试步骤:

       在博客详情页中点击“编辑”,进入博客编辑页,修改博客标题/内容,点击“更新文章

期望结果:博客成功修改

实际结果:与期望结果一致,测试通过

6.  删除文章

测试步骤:

       1.进入博客详情页,点击”删除“按钮,弹窗“确定删除?”,点击”确定”

       2. 进入博客详情页,点击”删除“按钮,弹窗“确定删除?”,点击”取消”

期望结果:

       1.跳转博客首页,博客不存在,删除博客成功

       2.博客保留

实际结果:

       1.与期望结果一致,测试通过

       2.与期望结果一致,测试通过

(2)兼容性测试

测试博客系统页面在不同浏览器上能否正常显示:

Chrome浏览器:

Edge浏览器:

 测试结果:博客系统页面在两个浏览器上各个页面均正常显示

(3)自动化测试

1.新建公共包和测试包

commom用来编写公共属性,tests用来编写各个页面的测试用例

]

Utils.py:

1.生成一个公用浏览器驱动对象,减少文件多次创建浏览器对象的消耗

2.提供公共函数

images:

1.用于存放不同日期生成的截图

Tests:

1.每个页面编写一个测试类,测试类中编写不同的测试用例

2.创建公共脚本Utils.py

  • 创建公用浏览器驱动对象
  • 创建公用屏幕截图方法
#创建一个驱动对象,避免频繁创建驱动
from selenium import webdriver
import datetime
import os.path
import sys

class Driver:
    driver=""
    def __init__(self):
        #这里可以添加浏览器参数
        options=webdriver.ChromeOptions()
        path = "C:\\Users\\Hasee\\Downloads\\chromedriver-win64\\chromedriver.exe"
        self.driver = webdriver.Chrome(executable_path=path,options=options)

    def getScreenShot(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)
        
BlogDriver=Driver()

3.博客登录页自动化测试

  • 测试用例

          1.测试成功登录(loginSucTest)

          2.测试登录失败(loginFailTest)

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

class BlogLogin:
    driver=""
    url=""
    def __init__(self):
        self.url="http://8.137.19.140:9090/blog_login.html"
        self.driver=BlogDriver.driver
        self.driver.get(self.url)

    #封装“清空 登录输入框内容”函数
    def InputClear(self):
        self.driver.find_element(By.CSS_SELECTOR,"#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()


    def loginSucTest(self):
        time.sleep(2)
        self.InputClear()
        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.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img" )
        BlogDriver.getScreenShot()
        self.driver.back()
        time.sleep(2)

    #错误的用户名/密码
    #用户名/密码为空
    def loginFailTest(self):
        #(1).错误的用户名,正确的密码
        self.InputClear()
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("list")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(2)
        expect="用户不存在"
        alert=self.driver.switch_to.alert
        alert_text=alert.text
        print(alert_text)
        assert expect==alert_text
        time.sleep(2)
        alert.accept()
        #(2).正确的用户名,错误的密码
        self.InputClear()
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("111")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(2)
        expect = "密码错误"
        alert = self.driver.switch_to.alert
        alert_text = alert.text
        print(alert_text)
        assert expect == alert_text
        time.sleep(2)
        alert.accept()

4.博客列表页自动化测试

  • 测试用例

          1.测试 博客列表页(loginSucTest)

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

class BlogList:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.driver
        self.url="http://8.137.19.140:9090/blog_login.html"
        self.driver.get(self.url)


    def ListLogin(self):
        #进入博客主页
        self.driver.forward()
        time.sleep(2)
        #检查昵称是否存在
        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(1) > a")
        #检查博客标题,发布时间是否存在
        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.date")
        BlogDriver.getScreenShot()

5.博客详情页自动化测试

  • 测试用例

          1.测试 当前用户的详情页(DetailTestSelf)

          2.测试 访问其他用户的详情页(DetailTestOther)

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

class BlogDetail:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.driver
        self.url="http://8.137.19.140:9090/blog_detail.html?blogId=42491"
        self.driver.get(self.url)

    def DetailTestSelf(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,"#detail")
        #检查文章发布时间是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")
        time.sleep(2)
        BlogDriver.getScreenShot()
        #返回博客主页
        self.driver.back()

    def DetailTestOther(self):
        #访问其他用户的博客详情页
        self.driver.get("http://8.137.19.140:9090/blog_detail.html?blogId=42498")
        time.sleep(2)
        #检查是否为其他用户的文章
        text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").text
        print(text)
        assert text=="zhangsan"
        # 检查文章标题是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")
        #检查文章内容框是否存在
        self.driver.find_element(By.CSS_SELECTOR,"#detail")
        #检查文章发布时间是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")
        #返回博客主页
        self.driver.back()

6.博客编辑页自动化测试

  • 测试用例

          1.测试 博客编辑页(EditTest)

import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogEdit:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.driver
        self.url="http://8.137.19.140:9090/blog_update.html?blogId=42491"
        self.driver.get(self.url)

    def EditTest(self):
        # 检查博客编辑页的“更新文章”键是否存在
        self.driver.find_element(By.CSS_SELECTOR,"#submit")
        #测试能否正确编辑发布文章(编辑标题)
        #博客系统中编辑区域是第三方插件,不能通过元素定位
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,"#title").clear()
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试")
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.desc")
        #返回到博客列表页
        BlogDriver.getScreenShot()

三、项目bug

 (1)用户登录页面

bug①: 

    bug出现的步骤:进入用户登录页面

    预期结果:没有”主页“和”写博客“按钮

    实际结果:页面右上角有”主页“和”写博客“按钮,属于冗余操作

(2)博客列表页

bug①: 

    bug出现的步骤:登录,进入博客列表页,点击左侧“文章”

    预期结果:点击“文章”可以查看用户的全部博客

    实际结果:“文章”为文本形式,不可点击

bug② 

    bug出现的步骤:登录,进入博客列表页

    预期结果:博客部分内容折叠,用户点击“展开”按钮后才能查看全部内容。

    实际结果:博客内容为全文显示,浏览博客列表时被大量内容淹没,影响用户体验

(3)博客详情页

bug①: 

    bug出现的步骤:点击“查看全文”进入博客详情页

    预期结果:博客详情页包含作者信息

    实际结果:博客详情页不包含作者信息,影响用户体验

(4)博客发布页

bug①: 

    bug出现的步骤:进入博客发布页,编辑内容,点击“发布文章”

    预期结果:发布博客后,文章数增加1

    实际结果:发布博客后,文章数没有变化

(5)博客编辑页

bug①:

    bug出现的步骤:编辑博客内容后,点击“更新文章”

    预期结果:编辑后博客修改时间改变

    实际结果:编辑后博客修改时间不变

四、测试总结

待完善

相关文章:

  • Spring 中的 BeanFactory 和 ApplicationContext
  • V-SHOW和箭头函数在VUE项目的踩坑点
  • Excel + VBA 实现“准实时“数据的方法
  • 类与对象(上)
  • 每日一题(小白)字符串娱乐篇16
  • Python星球日记 - 第5天:循环结构
  • 代码随想录算法训练营Day20
  • 【USTC 计算机网络】第三章:传输层 - 面向连接的传输:TCP
  • 【堆排序】 及 【Top-K问题】
  • mysql和sqlite关于data数据的识别问题
  • 关于Ubuntu系统的远程控制及文件传输
  • C++中的匿名函数
  • 毕设论文的分类号与UDC查询的网站
  • 类似于langchain的开发框架有哪些?
  • Java内存模型详解:堆、栈、方法区
  • QVector成员
  • SQL Server表数据的插入、修改和删除
  • C++的多态-上
  • 【软件测试】性能测试 —— 基础概念篇
  • Kotlin语言进阶:协程、Flow、Channel详解(一)
  • 网站建设虚拟/长沙网络公司排名
  • 网站域名费用怎么做分录/优化网站seo公司
  • 上海高端网站建设定制/超级搜索引擎
  • 德州制作网站哪家最专业/站长统计幸福宝
  • wordpress播放直播/seo整站优化外包公司
  • 西宁市网站设计企业/成都官网seo厂家