【web自动化测试】实战

web自动化测试就是对界面的测试

1、编写测试用例

2、参考测试用例,创建自动化测试项目,编写自动化测试脚本

论坛登录页:ForumLoginTest.py

论坛首页:ForumListTest.py

论坛详情页:ForumDetailTest.py

论坛编辑页:ForumEditTest.py

创建浏览器对象,请求url访问对应的页面,进入到对应页面之后才可以执行一系列的测试用例

我们不能每次都进行创建。因此我们需要

Utils.py 生成测试文件中需要用到的配置内容

下面是项目设计的项目路径:

Utils.py

#创建一个浏览器对象
import os
import sys
from datetime import datetimefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerclass Driver:driver = ""def __init__(self):options = webdriver.ChromeOptions() #此时没有添加任何的配置,此时options为空self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()),options = options)#通过什么服务来打开浏览器:创建好的驱动来打开谷歌浏览器,而驱动在WebDriverManager里面,我们就要调用ChromeDriverManager,后面再调用一个install方法,表示要创建一个驱动 options是添加浏览器的配置def getScreeShot(self):#创建屏幕截图#图片文件名称以时间来生成,我们将同一天的图片放到同一个文件夹里面#因此,先创建文件夹,存放同一天的图片dirname = datetime.datetime.now().strftime("%Y-%m-%d")if not os.path.exits("../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"#图片路径:../images/调用方法(LoginSucTest、LoginFailTest)-2025-08-05/2025-08-05-173456.pngself.driver.save_screenshot("../images/dirname/filename")#图片保存的路径和文件名
#如果每次调用类的时候,创建类对象的时候,都会调用构造方法,都会创建出一个driver,这样就会创建出很多driver
#显然是与我们的预期不符的
#因此,我们就要使用单例模式---允许大家调用driver 但是每个测试文件调用的都是一个driver
ForumDriver = Driver()  #其他的测试文件想要调用driver成员,必须通过ForumDriver.Driver(),来调用driver方法

 ForumList.py

from selenium.webdriver.common.by import Byfrom common.Utils import ForumDriver
#博客首页测试用例
class ForumList:url = ""driver = ""def __init__(self):self.url = ""self.driver = ForumDriver.driverself.driver.get(self.url)#测试首页def ListTestByLogin(self):#测试论坛标题是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a > img")#添加屏幕截图ForumDriver.getScreeShot()
list = ForumList()
list.ListTestByLogin()

ForumLogin.py

from selenium.webdriver.common.by import By
from common.Utils import ForumDriver#测试博客登录页面
class ForumLogin:url = ""driver = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = ForumDriver.driverself.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()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("lhh")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#能够找到比特论坛说明登录成功,否则登录失败self.driver.find_element(By.CSS_SELECTOR, "body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a > img")#登录成功之后返回到登录界面才能继续测试异常登录self.driver.back()#返回登录成功页面之后,不能直接继续进行send_keys,这样会造成拼接,而不是替换。因此我们要先进行清空(clear)再进行send_keys#异常登录的测试用例def LoginFailTest(self):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("lhh")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#检查是否登录失败actual = self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div").text#通过断言检测一下是否符合预期assert actual =="用户名或密码错误"self.driver.quit()login = ForumLogin()
login.LoginSucTest()
login.LoginFailTest()

RunTest.py

from tests.ForumLogin import ForumLogin
from tests.ForumList import ForumList
from common.Utils import ForumDriverif __name__ == "__main__":ForumLogin.ForumLogin().LoginFailTest()ForumLogin.ForumLogin().LoginSucTest()#登录成功之后就可以直接调用博客首页测试首页的用例ForumList.ForumList().ListTestByLogin()#指定浏览器退出ForumDriver.driver.quit()

3、测试报告

当我们执行完项目测试之后,认为项目已经完成了就可以编写测试报告

至少完成了一次功能测试,要再加强测试质量就可以进行编写自动化脚本

提测:提交给测试人员测试的时间

回归测试:系统每个页面都是独立来测试的,最后还需要加上回归测试,将页面整体再回归一下

项目是分开提测还是整体提测之后测试再介入?

取决于不同的页面之间是否存在测试耦合的地方,如果存在大量的耦合则需要整体提测,反之可以分开提测

1、测试计划:

功能、后端开发、前端开发、提测日期、测试、测试日期、测试结果

2、bug简述 

本次项目测试发现了多少个bug,有多少个崩溃级别的bug,有多少个严重级别的bug,有多少个一般级别的bug 

bug标题              报告人(提bug的人)            是否修复

放上bug链接        张三                                        修复完成

放上bug链接        李四                                        修复完成

3、遗留问题

例如:

1)需求变更,本次由于xxxx原因,推迟到下一个版本进行修复

2)低优先级的bug,由于xxx原因,推迟到下一个版本进行修复

3)流程上的问题,需求上的问题

..................................等等

4、测试结论

本次测试项目测试通过,项目开发耗时多久,项目测试耗时多久

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

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

相关文章

在Maxscript中随机化对象变换、颜色和材质

只需几行Maxscript,即可为3ds Max场景带来更多活力和变化! 在本文中,您将学习如何快速随机化选定对象的位置、旋转、线颜色和材质。 非常适合在ArchViz、动态图形和产品可视化项目中创建更自然、更少机械的布局。 为什么要使用随机化脚本? 1.快速为场景添加自然随机性 2.…

分类数据集 - 交通事故场景分类数据集下载

数据集介绍:交通事故场景分类数据集,真实交通场景高质量图片数据;适用实际项目应用:公共场所监控场景下是否发生交通事故检测项目,以及作为监控场景通用交通检测数据集场景数据的补充;数据集类别&#xff1…

内网公网详解,及无公网IP内网穿透给外网直接远程连接访问的具体实现方法步骤

一、什么是内网、外网1、内网IP(局域网IP)是指在私有网络或局域网内部使用的IP地址,无法直接从互联网访问,需通过NAT(网络地址转换)技术实现对外通信。内网IP(Intranet IP)是专为局域…

Redis协议数据迁移方式

主从复制(REPLICAOF/SLAVEOF):目标实例挂为从节点,通过复制协议全量增量同步后切换为主。模拟从节点工具:模拟复制协议同步数据,常见两种实现:(1) 拉取全量和增量命令流,在本地生成 …

英语中日期与时间缩写

日常使用中,时间缩写无处不在。掌握这些缩写不仅能提高沟通效率,还能让您的英语表达更加地道和专业。本文将系统性地介绍英语中各类时间相关缩写,包括月份、星期、时刻表达等,并提供实用记忆技巧和应用场景。 一、时间缩写基础概…

【Spring Cloud】-- RestTeplate实现远程调用

实现远程调用有很多种方式,这里我们使用RestTemplate来进行实现。 REST :表现层资源状态转移(资源在网络中以某种表现形式进行状态转移),是一种软件架构风格,状态转移:数据状态的变化。 表现层&…

2025年信创政策解读:如何应对国产化替代挑战?(附禅道/飞书多维表格/华为云DevCloud实战指南)

本文核心产品:​​禅道(国产项目管理工具)、飞书多维表格(协同办公工具)、华为云DevCloud(云端研发平台)​​ ——在“自主可控”成为国家战略关键词的2025年,国产化替代已从“可选动…

如何让 RAG 检索更高效?——大模型召回策略全解

如何让 RAG 检索更高效?——大模型召回策略全解 一、引子:RAG 的“强”靠得住吗? RAG(Retrieval-Augmented Generation)作为一种将文档检索与大语言模型结合的框架,已成为企业落地知识问答、搜索增强、智能…

Bilateral Reference for High-Resolution Dichotomous Image Segmentation

代码来源 https://github.com/ZhengPeng7/BiRefNet 模块作用 DIS 是一种旨在对高分辨率图像中的目标物体进行精确分割的技术,尤其适用于具有复杂细微结构的物体,例如细长的边缘或微小细节。传统方法在处理这类任务时往往难以捕捉细微特征或恢复高分辨…

RAGFlow 0.20.0 : Multi-Agent Deep Research

Deep Research:Agent 时代的核心能力2025 年被称为 Agent 落地元年,在解锁的各类场景中,最有代表性之一,就是 Deep Research 或者以它为基座的各类应用。为什么这么讲? 因为通过 Agentic RAG 及其配套的反思机制&#…

CMakeLists.txt学习

一:#是行注释 ,[[ 块注释 ]]0.cmake_minimum_required: 指定使用的cmake的最低版本1.project() 定义工程名称并可以指定工程的版本,工程描述,web主页地址,支持的语言(默认情况支持所有语言)2.…

Pytorch-04 搭建神经网络架构工作流

搭建神经网络架构 在pytorch中,神经网络被抽象成由一系列对数据执行特定操作的层或者模块组成,比如下面的Attention实现,每个块都是一个模块或者层。 如果你想快速搭建网络架构,torch.nn这个命名空间提供了所有很多开箱即用的层…

从“碎片化”到“完美重组”:IP报文的分片艺术

前言 在网络通信中,当IP层需要传输的数据包大小超过数据链路层的MTU限制时,就必须进行分片处理。本文将完整解析IP分片的工作机制,包括分片字段的作用、如何减少分片,以及分片报文的组装原理。 IP报头解析请参考&#xff…

[GESP202306 四级] 2023年6月GESP C++四级上机题超详细题解,附带讲解视频!

本文为2023年6月GESP C四级的上机题目的详细题解!觉得写的不错或者有帮助可以点个赞啦! (第一次讲解视频,有问题可以指出,不足之处也可以指出) 目录 题目一讲解视频: 题目二讲解视频: 题目一: 幸运数 题目大意: …

内网穿透 FRP 配置指南

关键词:内网穿透、FRP配置、frps、frpc、远程访问、自建服务器、反向代理、TCP转发、HTTP转发 在开发或部署项目时,我们经常遇到内网设备无法被公网访问的问题,例如你想从外网访问你家里的 NAS、远程调试开发板,或是访问本地测试环…

SpringBoot 信用卡检测、OpenAI gym、OCR结合、DICOM图形处理、知识图谱、农业害虫识别实战

信用卡欺诈检测通常使用公开数据集 数据准备与预处理 信用卡欺诈检测通常使用公开数据集如Kaggle的信用卡交易数据集。数据预处理包括处理缺失值、标准化数值特征、处理类别特征。在Spring Boot中,可以使用pandas或sklearn进行数据预处理。 // 示例:使用Spring Boot读取CS…

使用 Docker 部署 Golang 程序

Docker 是部署 Golang 应用程序的绝佳方式,它可以确保环境一致性并简化部署流程。以下是完整的指南: 1. 准备 Golang 应用程序 首先确保你的 Go 应用程序可以正常构建和运行。一个简单的示例 main.go: package mainimport ("fmt""net/http" )func ha…

从零开始的CAD|CAE开发: LBM源码实现分享

起因:上期我们写了流体仿真的经典案例: 通过LBM,模拟计算涡流的形成,当时承诺: 只要验证通过,就把代码开源出来;ok.验证通过了,那么我也就将代码全都贴出来代码开源并贴出:public class LidDrivenCavityFlow : IDisposable{public LidDrivenCavityFlow(int width 200, int hei…

仓库管理系统-17-前端之物品类型管理

文章目录 1 表设计(goodstype) 2 后端代码 2.1 Goodstype.java 2.2 GoodstypeMapper.java 2.3 GoodstypeService.java 2.4 GoodstypeServiceImpl.java 2.5 GoodstypeController.java 3 前端代码 3.1 goodstype/GoodstypeManage.vue 3.2 添加菜单 3.3 页面显示 1、goodstype表设…

共识算法深度解析:PoS/DPoS/PBFT对比与Python实现

目录 共识算法深度解析:PoS/DPoS/PBFT对比与Python实现 1. 引言:区块链共识的核心挑战 2. 共识算法基础 2.1 核心设计维度 2.2 关键评估指标 3. PoS(权益证明)原理与实现 3.1 核心机制 3.2 Python实现 4. DPoS(委托权益证明)原理与实现 4.1 核心机制 4.2 Python实现 5. P…