博客系统自动化测试_测试报告

项目背景

开发出一个专属于自己的博客系统,可以完全按照自己的需求来设计,比如:去掉那些花里胡哨的功能和广告,只保留自己真正需要的,比如文章发布、分类、标签、搜索等。可以根据自己的审美设计界面,想要什么风格就做成什么风格,完全由自己掌控。不用担心平台限制或数据丢失,所有内容都保存在自己的服务器或电脑上。以后想加什么功能,都可以随时添加。

简单来说,就是做一个完全符合你心意的博客工具,记录笔记,不用在意写的好与不好,简直是为自己量身定制的创作天地。

项目简介

基于SSM框架实现的个人博客系统,由四个页面构成:用户登录页、博客编辑页、博客列表页以及博客详情页。登录即可查看自己与其他用户已发布的博客,也可以使用自己的账号发布博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对个人博客系统进行测试,测试的核心内容包括用户登录、博客列表、用户信息、查看全文、详情页内容、写博客、删除博客、编辑发布博客、退出账号等。该博客系统可以实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。

功能测试

设计用例测试一般从功能测试,性能测试,界面测试,安全测试,易用性和兼容性测试,但是一下我只对大部分功能和部分界面进行测试,如下图:

 

1.创建浏览器对象

请求URL访问对应的页面,进入到对应的页面之后,执行一系列的测试用例。浏览器对象是每个页面都会调用的,所以把创建浏览器对象单独拿出来放到一个文件中,用来生成测试文件中需要用到的配置内容。有时候我们想要知道每次运行结束前的界面是什么情况,就可以使用屏幕截图来保存当时的情况。

所以我们再第一个python文件中创建一个类

import datetime
import os
import sys

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

# 创建浏览器对象
class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.EdgeOptions()
        # 添加页面加载策略
        #options.page_load_strategy = 'eager'
        self.driver = webdriver.Edge(service=ChromeService(EdgeChromiumDriverManager().install()),options = options)
        self.driver.implicitly_wait(2)
    def getScreenShot(self):
        #创建屏幕截图
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否存在
        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.登陆界面测试

这其中存放三个测试函数,登录成功和登录失败,登录失败在博客系统中又分为两种情况,分别对警告密码错误和账户不存在。

# 测试博客登录页面
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
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()
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        #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.left > div > h3")
        BlogDriver.getScreenShot()
        # 返回登录页面
        # self.driver.back()
        #self.driver.quit()
    #异常登陆
    #正确的账号,错误的密码
    def LoginFailTest1(self):
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #time.sleep(2)
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "密码错误"
        alert.accept()
        BlogDriver.getScreenShot()
    #错误的账号/错误的账号,错误的密码
    def LoginFailTest2(self):
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("san")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #time.sleep(2)
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "用户不存在"
        alert.accept()
        BlogDriver.getScreenShot()


#login = BlogLogin()
#login.LoginFailTest1()
#login.LoginFailTest2()
#login.LoginSucTest()

 3.博客首页

在登录成功的情况下,我们能正常的访问到标题内容和博客信息等,但在未登录情况下,访问这些信息是会报错的。

# 博客首页测试用例
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 LoginListTest(self):
        # 检查博客标题是否存在
        #time.sleep(1)
        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")
        # 添加屏幕截图
        BlogDriver.getScreenShot()

    # 测试首页(未登录状态下)
    def NotLoginListTest(self):
        self.driver.back()
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        # 如果在未登录的情况下访问博客列表中的博客标题会出现报错,访问不到该元素
        self.driver.find_element("body > div.container > div.right > div:nth-child(1) > div.title")

    # 登录状态下退出账号
    def LoginExitTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()
        username = self.driver.find_element(By.CSS_SELECTOR, "#username").text
        password = self.driver.find_element(By.CSS_SELECTOR, "#password").text
        # 断言一下  登录页的账号和密码输入框为空 -- 测试通过
        assert username == ""
        assert password == ""

 4.博客详情页

针对详情页需要测试页面内容是否正常展示即可。

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=22231"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    # 登录状态下博客详情页的测试
    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")
        # 检查博客内容
        self.driver.find_element(By.CSS_SELECTOR, "#detail > p")
        # 添加屏幕截图
        BlogDriver.getScreenShot()

5.博客编辑页

编辑一个博客看它是否正常发布

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import BlogDriver

class BlogEdit:
    url = ""
    driver = ""

    def __int__(self):
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    def EditSucTestByLogin(self):
        #time.sleep(2)
        #wait = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#title")))
        self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试创建")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #time.sleep(1)
        actual = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title").text
        assert actual=="自动化测试创建"
        BlogDriver.getScreenShot()

项目bug描述

除内容加载较慢,无明显bug。

测试结论

核心内容包括用户登录、博客列表、用户信息、查看全文、详情页内容、写博客、删除博客、编辑发布博客、退出账号等均可正常使用,可正常实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VUE】第一期——初使用、基本语法

目录 0 前言 1 准备工作 1.1 创建vue实例 1.2 vue开发者工具 2 插值表达式 2.1 基本用法 3 常用指令 3.1 内容渲染指令 3.1.1 v-text 3.1.2 v-html 3.2 条件渲染指令 3.2.1 v-show 3.2.2 v-if 3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 3.3.1 内联语句 3.3…

大数据学习(57)-DataX基础

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤(Ollama方式)1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…

Go加spy++隐藏窗口

最近发现有些软件的窗口就像狗皮膏药一样,关也关不掉,一点就要登录,属实是有点不爽了。 窗口的进程不能杀死,但是窗口我不想要。思路很简单,用 spy 找到要隐藏的窗口的句柄,然后调用 Windows 的 ShowWindo…

最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)

前期所需: 1.apache-tomcat-10.1.18-windows-x64(tomcat 10.1.8版本或者差不多新的版本都可以) 2.IntelliJ idea 24年版本 或更高版本 3.已经配置好MAVEN了(一定先配置MAVEN再搞TOMCAT会事半功倍很多) 如果有没配置…

【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程

智能 AI 旅游推荐平台开源文档 项目前端地址 ☀️项目介绍 智能 AI 旅游推荐平台(Intelligent AI Travel Recommendation Platform)是一个利用 AI 模型和数据分析为用户提供个性化旅游路线推荐、景点评分、旅游攻略分享等功能的综合性系统。该系统融合…

linux 系统内核查询

1. 使用uname命令 uname命令可以用来显示系统信息,包括内核版本。 查看完整的内核版本信息:uname -a [rootlocalhost ~]# uname -a Linux localhost.localdomain 4.18.0-448.el8.x86_64 #1 SMP Wed Jan 18 15:02:46 UTC 2023 x86_64 x86_64 x86_64 GN…

静态时序分析:报告命令report_timing详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 目录 指定时序路径起点 指定时序路径经过点 指定时序路径终点 指定不报告的路径 指定路径类型 指定延迟类型 指定每个终点报告的最大时序路径数 指定每个时序组的…

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

qt 播放pcm音频

一、获取PCM音频 ffmpeg -i input.mp3 -acodec pcm_s16le -ar 44100 -ac 2 -f s16le output.pcm -acodec pcm_s16le:指定16位小端PCM编码格式(兼容性最佳)-ar 44100:设置采样率为CD标准44.1kHz(可替换为16000/8000等&a…

OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度&#xf…

WPS AI+office-ai的安装、使用

** 说明:WPS AI和OfficeAI是两个独立的AI助手,下面分别简单讲下如何使用 ** WPS AI WPS AI是WPS自带AI工具 打开新版WPS,新建文档后就可以看到菜单栏多了一个“WPS AI”菜单,点击该菜单,发现下方出现很多菜单&#xf…

绝美焦糖暖色调复古风景画面Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 通过 Lr 软件丰富的工具和功能,对风景照片在色彩、影调等方面进行调整。例如利用基本参数调整选项,精准控制照片亮度、对比度、色温、色调等基础要素;运用 HSL 面板可对不同色彩的色相、饱和度以及明亮度进行单独调节;利…

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后,又一个AI沸腾,冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨,全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队(隶属中国夜莺科技)推出的“全球首款通用AI…

团队学习—系统思考

3月的团队学习将继续深入,与海外顾问共同探讨系统思考和心智模式的核心内容。回顾过去,这些每月一次的学习不仅成为我们审视思维框架的常规途径,更成为揭示潜在问题与盲点的高效工具。尤其是那些“我不知道我不知道”的领域,外部顾…

使用LVGL驱动三色墨水屏,Arduino

一、基本情况 本文代码基于以下软件版本: Arduino2.X LVGL8.3.11 GXEPD1.6.2 epdpaint---微雪EPD驱动的一部分,你可以在微雪的官网下载到 硬件: MCU:ESP32-S3-N16R8 屏幕:GDEY042Z98黑白红三色墨水屏,某…

DeepSeek未来发展趋势:开创智能时代的新风口

DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…

Go红队开发—编解码工具

文章目录 开启一个项目编解码工具开发Dongle包Base64编解码摩斯密码URL加解密AES加解密 MD5碰撞工具开发 开启一个项目 这作为补充内容,可忽略直接看下面的编解码: 一开始用就按照下面的步骤即可 1.创建一个文件夹,你自己定义名字(建议只用…

算法·搜索

搜索问题 搜索问题本质也是暴力枚举,一般想到暴力也要想到利用回溯枚举。 排序和组合问题 回溯法 去重问题:定义全局变量visited还是局部变量visited实现去重? 回溯问题 图论中的搜索问题 与一般的搜索问题一致,只不过要多…