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

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模式的优点:

  1. 提高可维护性:
    • 通过将页面元素和操作封装在页面对象中,减少了测试脚本的重复代码。如果页面结构或元素发生变化,只需要修改页面对象类,而不必更新每个测试脚本。
  2. 提高可读性:
    • 测试脚本中只关心业务逻辑和断言,页面操作被抽象化为简单的函数调用,使得测试脚本更加简洁和易懂。
  3. 提高可重用性:
    • 页面对象类可以被多个测试用例共享,从而避免了重复的代码,提高了代码的复用性。
  4. 减少维护成本:
    • 如果页面发生变化(例如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给谷仓安装了一个新的安全系统&#xff0c;并且要给牛群中的每一个奶牛安排一个有效的密码。一个有效的密码由L(3 < L < 15)个小写字母(来自传统的拉丁字母集a...z)组成&#xff0c;至少有一个元音(a, e, i, o, 或者 u)&#xff0c;至少两个辅音(除去元音以外…...

vcredist_x64 资源文件分享

vcredist_x64 是 Microsoft Visual C Redistributable 的 64 位版本&#xff0c;用于在 64 位 Windows 系统上运行使用 Visual C 开发的应用程序。它包含了运行这些应用程序所需的运行时组件。 vcredist_x64 资源工具网盘下载链接&#xff1a;https://pan.quark.cn/s/ef56f838f…...

MySQL零基础教程14—子查询

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

使用mermaid查看cursor程序生成的流程图

一、得到cursor生成的流程图文本 cursor写的程序正常运行后&#xff0c;在对话框输入框中输入诸如“请生成扫雷的代码流程图”&#xff0c;然后cursor就把流程图给生成了&#xff0c;但是看到的还是文本的样子&#xff0c;保留这部分内容待用 二、注册一个Mermaid绘图账号 …...

L1-031 到底是不是太胖了

L1-031 到底是不是太胖了 - 团体程序设计天梯赛-练习集 (pintia.cn) 解题思路 输入数据 首先从输入中读取正整数 n&#xff0c;表示要处理的人数。 然后通过循环 n 次&#xff0c;每次读取一个人的身高 h&#xff08;单位&#xff1a;厘米&#xff09;和实际体重 w&#xff0…...

服务器时间同步

[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实践】清华&#xff1a;清华古典诗歌自动生成系统“九歌”的算法 &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 文章目录 **01 自动作诗缘起****1. 诗歌自动写作** **02 九歌的模型…...

JS基础之函数

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

基于java SSM springboot学生信息管理系统设计和实现

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

【MongoDB】在Windows11下安装与使用

官网下载链接&#xff1a;Download MongoDB Community Server 官方参考文档&#xff1a;https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-windows/#std-label-install-mdb-community-windows 选择custom类型&#xff0c;其他默认 注意&#xff0c;此选…...

HTML在网页开发中的应用与重要性

## 摘要 HTML&#xff08;HyperText Markup Language&#xff09;是网页开发的基础语言之一&#xff0c;它定义了网页的结构和内容。随着互联网的快速发展&#xff0c;HTML不断演进&#xff0c;从HTML4到HTML5&#xff0c;其功能和特性得到了极大的增强。本文将探讨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…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...