UI自动化框架介绍
selenium+ Pytest + Allure
优势
1.1 更高效的自动化测试
- Selenium 提供了强大的浏览器自动化能力,可以模拟用户与网页的交互。它能够在不同浏览器上运行测试,确保 Web 应用程序在多种环境下的兼容性。
- Pytest 是一个非常灵活、简洁的 Python 测试框架,它支持多种测试需求,如单元测试、集成测试和功能测试。Pytest 具有简单易用的语法,支持自动发现测试用例,并具有强大的插件体系,能帮助你实现更高效的测试。
- Allure 是一个流行的测试报告框架,专为生成美观且富有洞察力的测试报告而设计。它与 Pytest 和 Selenium 配合得很好,能够生成清晰的 HTML 测试报告,帮助团队理解测试结果。
1.2 易于扩展和维护
- Pytest 的插件机制非常强大,可以通过简单的配置扩展功能。例如,你可以很容易地与 Selenium 集成,也可以使用 Pytest 的 fixture 功能来组织测试准备工作(例如启动浏览器、登录等)。
- Selenium 跨浏览器的支持使得你能够在不同环境下运行相同的测试,确保 Web 应用在各大浏览器中的表现一致。这使得测试具有较强的可维护性。
- 使用 Allure 生成的报告可以清晰地展示每个测试的执行情况,帮助开发人员和测试人员快速诊断问题。
1.3 生成易于理解的测试报告
- Allure 的测试报告功能非常强大,能够提供详细的测试执行信息,包括测试步骤、日志、截图、失败的原因等。它能够清晰地展示测试用例的执行结果,便于团队成员分析问题。
- Allure 生成的报告非常直观,支持丰富的格式(如历史趋势图、失败用例统计、测试步骤等),让项目团队更容易了解项目的测试状况,并作出相应的决策。
1.4 并行测试和性能优化
- 使用 Pytest 与 pytest-xdist 插件,你可以轻松地将测试并行化,在多台机器或多个处理器上运行测试,显著提高测试的效率。
- Selenium 的并行化测试可以通过 Selenium Grid 配合 Pytest 执行,这样就能在多个浏览器和操作系统上同时运行测试,提高测试覆盖率并减少执行时间。
1.5 更清晰的日志和调试
- Pytest 提供了强大的日志功能,能够帮助你记录测试的执行过程并对失败的测试进行调试。在测试过程中,你可以通过 Pytest 的日志记录详细的信息。
- 当与 Selenium 一起使用时,Pytest 能帮助你捕获 WebDriver 操作中的异常,并通过详细的日志进行追踪。这使得你可以更快速地定位和解决问题。
- 在出现失败时,Allure 会自动展示失败的截图、日志和详细的堆栈信息,进一步帮助排查问题。
1.6 提高开发和测试效率
- Selenium + Pytest 提供了灵活的测试组织方式。你可以利用 Pytest 的标记和 fixture 来复用测试代码和环境,避免冗余的测试代码。
- 配合 Allure 使用时,测试人员和开发人员能够迅速理解报告,做出响应,避免在重复的测试调试上浪费过多时间。
Selenium介绍
Selenium 是一个广泛使用的自动化测试框架,主要用于自动化Web应用程序的UI测试。它可以模拟用户在浏览器中的操作,从而帮助测试人员验证网页的功能、UI设计、响应性等方面。以下是 Selenium 的一些基本介绍:
1. Selenium 简介
Selenium 是一个开源的自动化测试工具,支持多种浏览器和操作系统。它的核心功能是自动执行用户操作,如点击按钮、输入文本、选择下拉框等,帮助开发者和测试人员进行自动化测试。
2. Selenium 的组件
Selenium 主要包括以下几个组件:
- Selenium WebDriver:这是 Selenium 的核心组件,允许程序控制浏览器并模拟用户行为。它提供了与浏览器交互的接口,可以通过编程语言(如 Java、Python、C# 等)编写脚本来执行各种操作。
- Selenium IDE:是一个用于记录和回放浏览器操作的工具。适合初学者,它可以通过简单的点击和录制操作生成测试脚本。
- Selenium Grid:这个组件允许你并行执行测试,能够在多台机器和不同浏览器之间分配测试任务。对于分布式测试环境非常有用。
3. WebDriver 的工作原理
WebDriver 是 Selenium 的核心,它模拟浏览器的用户操作,通过发送指令来控制浏览器的行为。
- 它通过与浏览器的通信协议(如 ChromeDriver、GeckoDriver)实现浏览器控制。
- WebDriver 通过对浏览器的具体实现进行调用来完成动作,并且能获取页面元素进行验证。
4. 常用的 WebDriver 操作
Selenium WebDriver 允许测试人员进行以下操作:
- 打开/关闭浏览器:打开指定的 URL,关闭浏览器窗口。
- 查找元素:通过元素的 ID、类名、标签名、XPath 或 CSS 选择器等方式查找页面中的元素。
- 模拟用户操作:如点击、输入文本、选择下拉框选项、模拟键盘输入等。
- 获取页面信息:获取当前页面的标题、URL、页面源代码等信息。
- 等待元素:设置等待时间,确保元素加载完成后再进行操作(如显式等待和隐式等待)。
5. 编程语言支持
Selenium 支持多种编程语言,开发者可以选择他们熟悉的语言来编写自动化脚本。常见的语言包括:
- Java
- Python
- C#
- Ruby
- JavaScript(通过 Node.js)
6. Selenium 的优势
- 跨浏览器支持:Selenium 可以与多种主流浏览器(如 Chrome、Firefox、Edge、Safari 等)兼容,支持跨平台运行。
- 支持多种编程语言:用户可以选择适合自己的编程语言来编写自动化测试脚本。
- 开源且活跃的社区:Selenium 是一个开源项目,具有庞大的社区支持,用户可以轻松获取帮助和资源。
- 与其他工具兼容:Selenium 可以与 Jenkins、TestNG、JUnit 等工具配合使用,支持集成持续集成/持续交付(CI/CD)流程。
7. Selenium的缺点
尽管 Selenium 功能强大,但它也有一些限制:
- 学习曲线:对于新手而言,Selenium 的学习曲线较陡,尤其是在选择正确的等待策略、处理动态内容和调试测试脚本时。
- 对复杂UI测试支持有限:对于一些需要复杂图形界面或无法简单通过 DOM 操作的页面,Selenium 可能不够灵活。
8. 总结
Selenium 是一个强大且灵活的自动化测试工具,适用于 Web 应用程序的 UI 自动化测试。通过模拟用户操作,测试人员可以高效地执行功能验证和回归测试。虽然学习曲线相对较陡,但它的跨平台、跨浏览器支持和与多种工具的兼容性,使其成为UI自动化测试的首选工具之一。
PO设计模式
Page Object模式的核心思想是将页面中的元素和操作封装在一个独立的类中,使得UI测试脚本与页面的具体实现细节解耦。通过这种方式,UI测试脚本与页面对象之间的交互变得更加抽象,从而简化了测试的维护工作。
PO模式的六大原则:
1、公共方法代表页面提供的服务
---要封装页面中的功能(或者服务),比如点击页面中的元素,可以进入到新的页面,于是,可以这个服务封装方法“进入新页面”
2、不要暴露页面操作
---封装细节,对外只提供方法名(或者接口)
3、不要把断言和操作细节混用
---封装的操作细节中不要使用断言,把断言放在单独的模块中,比如testcase
4、方法可以return到新打开的页面
---点击一个按钮会开启新的页面,可以使用return方法表示跳转,比如return Mainpage()表示跳转到新的PO:MainPage
5、不要把整页的内容都放到PO中
---只为页面中重要的元素进行PO设计,舍弃不重要的内容。
6、相同的行为会产生不同的结果,可以封装不同结果
---一个动作可能产生不同结果,比如点击按钮后,可能点击成功,也可能点击失败,为两种结果封装两个方法,click_success和click_error。
PO模式的优点:
- 提高可维护性:
- 通过将页面元素和操作封装在页面对象中,减少了测试脚本的重复代码。如果页面结构或元素发生变化,只需要修改页面对象类,而不必更新每个测试脚本。
- 提高可读性:
- 测试脚本中只关心业务逻辑和断言,页面操作被抽象化为简单的函数调用,使得测试脚本更加简洁和易懂。
- 提高可重用性:
- 页面对象类可以被多个测试用例共享,从而避免了重复的代码,提高了代码的复用性。
- 减少维护成本:
- 如果页面发生变化(例如HTML结构或元素的ID变更),开发人员只需在一个地方修改页面对象类,而不必逐一更新测试脚本中的元素定位逻辑。
相关文章:
UI自动化框架介绍
selenium Pytest Allure 优势 1.1 更高效的自动化测试 Selenium 提供了强大的浏览器自动化能力,可以模拟用户与网页的交互。它能够在不同浏览器上运行测试,确保 Web 应用程序在多种环境下的兼容性。Pytest 是一个非常灵活、简洁的 Python 测试框架&a…...
【工具推荐】在线提取PDF、文档、图片、论文中的公式
网址1:https://simpletex.cn/ai/latex_ocr 网址2: https://www.latexlive.com/home 推荐理由:无需下载,在线使用,直接 截图 CTRLV 效果更佳。...
帮我设计一个c语言学习阶段
以下是一个针对不同学习阶段的C语言学习计划,你可以根据自己的基础和目标进行调整: 第一阶段:基础语法与程序结构(第1-4周) 目标 熟悉C语言的基本语法和程序结构。 能够编写简单的程序。 学习内容 环境搭建 安装…...
解决windows npm无法下载electron包的问题
1.将nsis.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 2.将winCodeSign.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 3.将electron-v20.3.8-win32-ia32.zip复制到C:\Users\XXX\AppData\Local\electron\Cache 4.将electron-v20.3.8-win32-…...

网络编程 day01
网络编程 day01 0. 网络编程课程介绍1. 认识网络1.网络发展史2.局域网与广域网局域网(LAN)广域网(Wan) 3.光猫4.路由器5.交换机与路由器6.网线 2. IP1. 基本概念2. 网络号/主机号(二级划分)3. IP地址分类整…...

【三.大模型实战应用篇】【4.智能学员辅导系统:docx转PDF的自动化流程】
去年团队庆功宴上,我司CTO端着酒杯过来:“老王啊,咱们现在文档解析做得挺溜了,但老师们总抱怨下载的作业格式乱码…” 我看了眼手机里凌晨三点收到的崩溃警报,把杯里的可乐一饮而尽——得,新的副本又开了。 一、为什么PDF转换比想象中难十倍? 某次用户调研中,数学教研…...
2915. 和为目标值的最长子序列的长度
给你一个下标从 0 开始的整数数组 nums 和一个整数 target 。 返回和为 target 的 nums 子序列中,子序列 长度的最大值 。如果不存在和为 target 的子序列,返回 -1 。 子序列 指的是从原数组中删除一些或者不删除任何元素后,剩余元素保持原来…...
谷仓的安保
Farmer John给谷仓安装了一个新的安全系统,并且要给牛群中的每一个奶牛安排一个有效的密码。一个有效的密码由L(3 < L < 15)个小写字母(来自传统的拉丁字母集a...z)组成,至少有一个元音(a, e, i, o, 或者 u),至少两个辅音(除去元音以外…...
vcredist_x64 资源文件分享
vcredist_x64 是 Microsoft Visual C Redistributable 的 64 位版本,用于在 64 位 Windows 系统上运行使用 Visual C 开发的应用程序。它包含了运行这些应用程序所需的运行时组件。 vcredist_x64 资源工具网盘下载链接:https://pan.quark.cn/s/ef56f838f…...

MySQL零基础教程14—子查询
子查询比较简单,我们还是通过案例引入。 有时候我们查询的时候,需要用到的不止一个表的数据,比如下面的场景: 查询名字叫李晓红同学的班主任姓名 我们提供三个表的基础信息如下: 从三张表的结构,我们不难…...

使用mermaid查看cursor程序生成的流程图
一、得到cursor生成的流程图文本 cursor写的程序正常运行后,在对话框输入框中输入诸如“请生成扫雷的代码流程图”,然后cursor就把流程图给生成了,但是看到的还是文本的样子,保留这部分内容待用 二、注册一个Mermaid绘图账号 …...
L1-031 到底是不是太胖了
L1-031 到底是不是太胖了 - 团体程序设计天梯赛-练习集 (pintia.cn) 解题思路 输入数据 首先从输入中读取正整数 n,表示要处理的人数。 然后通过循环 n 次,每次读取一个人的身高 h(单位:厘米)和实际体重 w࿰…...
服务器时间同步
[rootbogon hwh-ansible]# cat time-sync.sh #!/bin/bash # NTP 服务器信息 NTP_SERVER"192.168.42.12" PASSWORD"123456" # 多个 IP 地址 HOSTS("192.168.42.8" "192.168.42.9" "192.168.42.10" "192.168.42.11"…...

01. HarmonyOS应用开发实践与技术解析
文章目录 前言项目概述HarmonyOS应用架构项目结构Ability生命周期 ArkTS语言特性装饰器状态管理 UI组件与布局基础组件响应式布局样式与主题 页面路由与参数传递页面跳转参数接收 数据绑定与循环渲染数据接口定义循环渲染 条件渲染组件生命周期最佳实践与性能优化组件复用响应式…...

【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法
【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 文章目录 **01 自动作诗缘起****1. 诗歌自动写作** **02 九歌的模型…...

JS基础之函数
函数使用 函数名命名规范 和变量命名基本一致> 尽量小驼峰式命名法 前缀应该为动词 命名建议:常用动词约定 动词含义can判断是否可执行某个动作has判断是否含义某个值is判断是否为某个值get获取某个值set设置某个值load加载某些数据 有返回值的函数 细节: 在函数体中使用…...

基于java SSM springboot学生信息管理系统设计和实现
基于java SSM springboot学生信息管理系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 …...

【MongoDB】在Windows11下安装与使用
官网下载链接:Download MongoDB Community Server 官方参考文档:https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-windows/#std-label-install-mdb-community-windows 选择custom类型,其他默认 注意,此选…...
HTML在网页开发中的应用与重要性
## 摘要 HTML(HyperText Markup Language)是网页开发的基础语言之一,它定义了网页的结构和内容。随着互联网的快速发展,HTML不断演进,从HTML4到HTML5,其功能和特性得到了极大的增强。本文将探讨HTML在网页…...

深度学习-140-RAG技术之Agentic Chunking分块技术的实现细节和完备实现
文章目录 1 类AgenticChunker1.1 add_propositions添加命题列表1.2 add_proposition添加单个命题1.3 add_proposition_to_chunk命题添加到块中1.4 _update_chunk_summary更新块摘要1.5 _update_chunk_title更新块主题1.6 _get_new_chunk_summary获取新块摘要1.7 _get_new_chunk…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...