web博客系统的自动化测试

目录

  • 前言
  • 测试用例
  • 编写自动化脚本
    • 测试准备
    • 博客登录页相关测试用例
      • 登陆成功
      • 登录失败
    • 博客首页相关测试用例
      • 登陆成功
      • 登录失败
    • 博客详情页相关测试用例
      • 登录成功
      • 登录失败
    • 博客编辑页相关测试用例
      • 登陆成功
      • 登录失败
  • 编写测试文档
    • 测试类型内容

前言

本次测试是运用个人写的一个博客系统进行自动化测试。博客包含登录页,博客首页,博客详情页,博客编辑页。那么我们就进行以上页面进行自动化测试。这里用Edge浏览器进行测试

测试用例

我们设计测试用例的时候,一般都是用思维导图/脑图来进行列表,尽量思维多一些散发,用最少得测试用例覆盖的相对全面。
在这里插入图片描述

编写自动化脚本

我们可以根据上述的测试用例进行自动化脚本的编写,我们需要用到pycharm软件,并且要根据页面进行分类,来保证代码的清晰性和可读性。

测试准备

我们对web页面进行测试的时候,需要创建浏览器对象,然后请求url对页面进行访问,所以我们需要一个特殊的类就是until.py来做一些准备工作。

import datetime
import os.pathfrom selenium import webdriver
#因为我用的是Edge浏览器,所以要用edge的service
from selenium.webdriver.edge.service import Serviceclass Diver:diver=""def __init__(self):options=webdriver.EdgeOptions()self.diver=webdriver.Edge(service=Service(verbose = True))def getScreamShot(self):#屏幕截图dirname=datetime.datetime.now().strftime("%Y-%m-%d")if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)#有路径filename=datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")self.driver.save_screenshot("../images/"+dirname+"/"+filename)BlogDriver=Diver()

Edge其他的web使用方法请查阅:https://learn.microsoft.com/zh-cn/microsoft-edge/webdriver-chromium/?tabs=python

博客登录页相关测试用例

登录页的测试我们是根据登录成功和登录失败的区分的。

登陆成功

测试登录成功的流程:我们需要①先获取页面的元素(用户名框,密码框,登录按钮);②获取元素输入成功登录的密码和用户名,因为我们③登陆成功后首页会有用户名显示,我们可以用这来判断是否登录成功。④退出页面


from selenium.webdriver.common.by import By
from common.until import  BlogDriverclass BlogLogin:driver=""url=""def __init__(self):self.driver=BlogDriver.diverself.url="http://8.137.19.140:9090/blog_login.html"self.driver.get(self.url)self.driver.implicitly_wait(1)def LoginSucTest(self):#捕获页面元素,输入正确的用户名密码 zhangsan 123456self.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()#登录成功后,能找到用户昵称,说明登录成功autul=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")if  autul==None:print("登录不一致,失败")returnself.driver.quit()login=BlogLogin().LoginSucTest()

登录失败

登录失败就很多种情况了,比如说用户名不对,密码对,用户名对,密码不对,密码和用户名都不用,我们可以用其中一种测试就可以。并且通过手动输入,我们会发现他会出现弹窗!所以我们要处理弹窗
在这里插入图片描述
所以我们在登录页如果出现弹窗,那么证明登录失败了,我们只需要解决弹窗就可以了。

from time import sleepfrom selenium.webdriver.common.by import By
from common.until import  BlogDriverclass BlogLogin:driver=""url=""def __init__(self):self.driver=BlogDriver.diverself.url="http://8.137.19.140:9090/blog_login.html"self.driver.get(self.url)self.driver.implicitly_wait(1)def LoginSucTest(self):#捕获页面元素,输入正确的用户名密码 zhangsan 123456self.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()#登录成功后,能找到用户昵称,说明登录成功autul=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")if  autul==None:print("登录不一致,失败")returnself.driver.quit()def LoginFailTest(self):#捕获页面元素,输入正确的用户名,错误的密码 zhangsan 1234567self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234567")#密码不对self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#存在弹窗证明登录失败,处理弹窗sleep(2)#这里必须休眠,是因为处理速度太快了,会造成他找不到alert=self.driver.switch_to.alertalert.accept()self.driver.quit()
login=BlogLogin().LoginFailTest()

博客首页相关测试用例

对博客首页的测试,我们要分为登录成功后的测试和登录失败的测试。

登陆成功

我们要测试登录成功情况下的,所以我们就需要让用户先登录成功,这个时候我们可以用这个形式。

#runTest.py
from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogListif __name__=="__main__":Bloglogin.BlogLogin().LoginSucTest()sleep(2)#登录成功之后,测试列表BlogList.BlogList().ListTestByLogin()sleep(2)#统一退出BlogDriver.diver.quit()

我们测试用例中需要测试他是否存在,所以直接检查是否存在即可,如果不存在会报错!

#博客首页测试
from selenium.webdriver.common.by import Byfrom common.until import BlogDriverclass BlogList:driver=""url=""def __init__(self):self.driver=BlogDriver.diverself.url="http://8.137.19.140:9090/blog_list.html"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")bloglist=BlogList().ListTestByLogin()

登录失败

因为登录失败的情况下,我们会出现弹窗,如果是弹窗的话,不解决弹窗是没有办法锁定任何元素的,那么我么你直接访问博客列表详情页会怎么样呢?
当我手动测试的时候,他会直接返回登录页。
经过我们测试,发现登录失败,在访问此页面,就会报错没有找到这些元素,也就是说登录失败,是没有办法访问博客列表页的
在这里插入图片描述

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogListif __name__=="__main__":Bloglogin.BlogLogin().LoginFailTest()sleep(2)#登录失败之后,测试列表BlogList.BlogList().ListTestByLogin()sleep(2)#统一退出BlogDriver.diver.quit()

博客详情页相关测试用例

对博客详情页的测试,我们要分为登录成功后的测试和登录失败的测试。

登录成功

当我们登录成功的时候,进入列表页,点击查看全文后,就可以查看博客的详细内容,包括标题、时间、内容、最好查看一下用户名。
在这里插入图片描述

from selenium.webdriver.common.by import Byfrom common.until import BlogDriverclass BlogDetail:driver = ""url = ""def __init__(self):self.driver = BlogDriver.diverself.url = "http://8.137.19.140:9090/blog_detail.html?blogId=7681"self.driver.get(self.url)#登录状态下的博客详情页def BlogDetaulTest(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")#用户名self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")

登录失败

登录失败,会发现我们找不到元素,也就是无法进入博客详细页。
在这里插入图片描述

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList
from test import BlogDetailif __name__=="__main__":Bloglogin.BlogLogin().LoginFailTest()sleep(2)#失败,列表点击后,查看内容BlogDetail.BlogDetail().BlogDetaulTest()sleep(2)#统一退出BlogDriver.diver.quit()

博客编辑页相关测试用例

对博客编辑页的测试,我们要分为登录成功后的测试和登录失败的测试。

登陆成功

如果登录成功,我们可以通过点击写博客,进行博客的编辑。我们需要写标题,然后内容,然后点击发布。
但是根据以下代码编写后发现,我们无法对MD外部插件进行空时,这个时候我们可以对md上述符号进行控制,编辑一部分内容。

在这里插入图片描述
在这里插入图片描述

from selenium.webdriver.common.by import Byfrom common.until import BlogDriverclass BlogEdit:driver = ""url = ""def __init__(self):self.driver = BlogDriver.diverself.url = "http://8.137.19.140:9090/blog_edit.html"self.driver.get(self.url)#正确发布博客def EditSucTest(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, "#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").send_keys("博客内容测试博客内容测试博客内容测试博客内容测试")#点击发布文章self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

登录失败

因为登录页面右上角,直接有点写博客按钮,所以我们可以直接访问网页,模拟没有登录的时候是否可以返回呢?
结果就是直接返回了登录页面。

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList
from test import BlogDetail
from test import BlogEditif __name__=="__main__":#点击写博客,然后编辑BlogEdit.BlogEdit().EditSucTest()sleep(5)#统一退出BlogDriver.diver.quit()

编写测试文档

测试文档包括以下几部分:项目背景、项目简介、测试计划、测试工具、设计的测试类型(功能测试、性能测试、自动化测试)、测试类型测内容、项目测试的bug简述、测试结论等。

测试类型内容

这里主要写你的测试类型中的内容,比如测试用例和测试的脚本。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink高可用配置(HA)

从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…

基于Springboot的流浪宠物管理系统

基于javaweb的流浪宠物管理系统 介绍 基于javaweb的流浪宠物管理系统的设计与实现,后端框架使用Springbootmybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同权限级别…

unity 绿幕抠图

1.硬件:Insta360 Link 2C摄像机 2.引用shader Shader "Demo/ChromaKey" { Properties { _MainTex("Texture", 2D) "white" {} _KeyColor("KeyColor", Color) (0,1,0,0) _TintColor(&q…

Linux中离线安装gcc

gcc在安装一些其他工具的经常用到,在此记录下如何安装gcc。 1.在线安装 yum -y install gcc 2.离线安装 2.1 获取安装包链接: https://pan.baidu.com/s/1oDvt64ByWs1w-evz5TXU7w?pwd9cfo mpfr-3.1.1-4.el7.x86_64.rpmlibmpc-1.0.1-3.el7.x86_64.rp…

继续完善wsl相关内容:基础指令

文章目录 前言一、我们需要安装wsl,这也是安装docker desktop的前提,因此我们在这篇文章里做了介绍:二、虽然我们在以安装docker desktop为目的时,不需要安装wsl的分发(distribution),但是装一个分发也是有诸多好处的:三、在使用wsl时,不建议把东西直接放到系统里,因…

GITEX GLOBAL聚焦AI创新,Soul App创始人张璐团队带来多模态社交新体验

2024年10月,全球瞩目的科技盛会GITEX GLOBAL在迪拜举行。作为全球三大IT展之一,GITEX GLOBAL一直是展示全球尖端科技的重要平台,今年吸引了全球超6700家科技企业及创新公司参展。 在此次展会中,Soul App创始人张璐团队携自主研发的多模态大模型首次在国际大型展会亮相,展示了其…

C++——map相关的oj题

前言:菜鸟写博客给自己看,我是菜鸟。 1:随机链表的复制 1.1题目要求: 1.2解题思路: 可以分两步来实现代码: ①先将示例1链表中的val值以及next的指向关系深拷贝到另一个新的链表当中 ②再处理新链表中&am…

go web单体项目 学习总结

为什么学习go 博主的主语言是Java,目前的工作也是做Java web开发,有了Java的经验后就想着再学一门语言,其实有两个原因,第一是基于兴趣,也想和Java对比下到底有什么不同,在学习go的时候让我更加了解了Java…

paimon的四种changelog模式(2)-none模式

# 请先了解input模式 环境创建 CREATE CATALOG fs_catalog WITH (typepaimon,warehousefile:/data/soft/paimon/catalog );USE CATALOG fs_catalog;drop table if exists t_changelog_none ;CREATE TABLE t_changelog_none (age BIGINT,money BIGINT,hh STRING,PRIMARY KEY (h…

新型大语言模型的预训练与后训练范式,阿里Qwen

前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内的完整…

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址,使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换&#xff1…

notepad++文件github下载

1、github下载网址:Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件: 3、CSDN下载链接:https://download.csdn.net/download/u013083576/90046203

【AI绘画】Midjourney进阶:色调详解(下)

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调纯色调灰色调暗色调 &#x1f4af…

【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

PH热榜 | 2024-11-27

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Agentplace 标语:这是一个能创建互动式AI网站和应用的平台。 介绍:Agentplace是一个平台&#xf…

ffmpeg 增亮 docker 使用

使用最新的 docker pull jrottenberg/ffmpeg docker run -it --rm -v /path/to/input:/input -v /path/to/output:/output jrottenberg/ffmpeg <ffmpeg command>比如我想增亮 在 /home 目录下 有一个 video.mp4 docker run --rm -v /home:/home jrottenberg/ffmpeg:7…

单片机学习笔记 11. 外部中断

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【PyTorch】(基础一)----pytorch环境搭建

PyTorch环境搭建 该系列笔记主要参考了小土堆的视频教程&#xff0c;传送门&#xff1a;P1. PyTorch环境的配置及安装&#xff08;Configuration and Installation of PyTorch)【PyTorch教程】_哔哩哔哩_bilibili PyTorch 是一个开源的机器学习库&#xff0c;主要用 Python 编…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

YOLOv11融合PIDNet中的PagFM模块及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2…