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变更),开发人员只需在一个地方修改页面对象类,而不必逐一更新测试脚本中的元素定位逻辑。

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

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

相关文章

STM32——串口通信 UART

一、基础配置 Universal Asynchronous Receiver Transmitter 异步,串行,全双工 TTL电平 :高电平1 低电平0 帧格式: 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD,…

flink集成tidb cdc

Flink TiDB CDC 详解 1. TiDB CDC 简介 1.1 TiDB CDC 的核心概念 TiDB CDC 是 TiDB 提供的变更数据捕获工具,能够实时捕获 TiDB 集群中的数据变更(如 INSERT、UPDATE、DELETE 操作),并将这些变更以事件流的形式输出。TiDB CDC 的…

DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元

背景 在全球人工智能技术高速迭代的背景下,算力成本高企、异构资源适配复杂、模型部署效率低下等问题,始终是制约企业AI规模化应用的关键。 DeepSeek以创新技术直击产业痛点,而博云先进算力管理平台AIOS的全面适配,则为这一技术…

ArcGIS Pro建库中常用公式的应用与技巧

在当今数字化的时代,地理信息系统(GIS)在各个领域都发挥着至关重要的作用。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提供了丰富的工具和功能,使得数据处理、地图制作和空间分析变得更加高效和便捷。 本文将为您…

C++入门基础

文章目录 C核心特性详解(基础增强版)一、第一个C程序:Hello World完整代码解析新手常见问题 二、命名空间(详解版)1. 为什么需要命名空间?2. 命名空间使用场景3. 嵌套命名空间4. 匿名命名空间 三、输入输出…

探秘基带算法:从原理到5G时代的通信变革【三】Turbo 编解码

文章目录 2.2 Turbo 编解码2.2.1 基本概念与系统构成2.2.2 编码过程分步解析交织器递归系统卷积编码器复接器总结 2.2.3 译码算法分类与原理Turbo码的强大主要来源于其解码器理论基础解码过程详解交织与解交织译码算法总结 2.2.4 Turbo码的应用场景无线通信卫星通信深空通信 2.…

一键无损放大视频,让老旧画面重焕新生!

打工人们你们好!这里是摸鱼 特供版~ 嘿,朋友们!在数字时代,视频已经成为我们生活中不可或缺的一部分。无论是珍贵的家庭录像,还是老旧的影视素材,我们都希望能以高清画质重温那些美好瞬间。但很多时候&…

build gcc

1,下载源码 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz git clone --mirror https://github…

《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》

导语​ "你是否想过用Python开发一款可玩性高的双人合作游戏?本文将分享如何从零开始实现一款类《吸血鬼幸存者》的生存射击游戏!包含完整源码解析、角色系统设计、敌人AI逻辑等核心技术点,文末提供完整代码包下载!" 哈…

AutoGen学习笔记系列(一)Tutorial - Model

这个系列文章记录了学习微软 AutoGen 的过程,与 smolagents 学习笔记系列一样,仍然以官方教程自己的理解为主线,中间可能穿插几个番外支线的形式写博客。 【注意】:在阅读这篇文章之前需要确保已经按照其 Installation 小节完成必…

探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调

文章目录 2.7 QAM 调制 / 解调2.7.1 概述2.7.2 星座图星座图的结构与性能发射端的信息编码与接收端的解码差分编码的分类与实现差分编码的模4格雷加法器公式16QAM星座图与映射关系 2.7.3 信号表达式正交振幅调制的基本原理与系统分析相位误差对QAM性能的影响多电平正交振幅调制…

本地YARN集群部署

请先完成HDFS的前置部署,部署方式可查看:本地部署HDFS集群https://blog.csdn.net/m0_73641796/article/details/145998092?spm1001.2014.3001.5502 部署说明 组件配置文件启动进程备注Hadoop HDFS需修改 需启动: NameNode作为主节点 DataNode作为从节点 Secondary…

vivado 充分利用 IP 核

充分利用 IP 核 使用预先验证的 IP 核能够大幅减少设计和验证工作量,从而加速产品上市进程。如需了解更多有利用 IP 的信息,请参 阅以下资源: • 《 Vivado Design Suite 用户指南:采用 IP 进行设计》 (UG896) [ 参照 1…

Python-07PDF转Word

2025-03-04-PDF转Word DeepSeek等大模型从来都不是简单的写一个静态博客这么肤浅(太多博主都只讲这个内容了)借助全网大神的奇思妙想,拓展我狭隘的思维边界。 文章目录 2025-03-04-PDF转Word [toc]1-参考网址2-学习要点3-核心逻辑4-核心代码 …

android11使用gpio口控制led状态灯

目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求:这里是用2个gpio口来控制LED灯,开机时默认亮蓝灯,按开机键,休眠亮红灯,唤醒亮蓝灯。 原理图: 这里由于主板上电阻R63…

el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头

光标上移 设置 el-input 的 typenumber后,只能输入数字,输入中文后会自动清空,但是会出现一个问题:【光标会上移,如下图】 解决方法:修改样式 注意:需要使用样式穿透 :deep( ) /*解决el-in…

el-table一格两行;概率;find

样式&#xff1a; 根据概率表头关键代码&#xff1a;rateRanges&#xff1b; scope.row.targetHitTable.find((target:any) > target.targetHitRate > range.min && target.targetHitRate < range.max)!.targetHitNum &#xff08;1&#xff09;!.是TypeScri…

CSS定位详解上

1. 相对定位 1.1 如何设置相对定位&#xff1f; 给元素设置 position:relative 即可实现相对定位。 可以使用 left 、 right 、 top 、 bottom 四个属性调整位置。 1.2 相对定位的参考点在哪里&#xff1f; 相对自己原来的位置 1.3 相对定位的特点&#xff1…

二、Java-封装playwright UI自动化(根据官网执行步骤,首先封装BrowserFactory枚举类及BrowserManager)

前言 查看playwright官网&#xff0c;api文档了解到&#xff0c;playwright的基本步骤&#xff1a; 1、实例化一个playwright 2、启动一个浏览器类型 3、打开一个页面 所以&#xff0c;在封装时需要有一个浏览器工厂类&#xff0c;定义不同的浏览器类型&#xff0c;在配置文…

【问题解决】Jenkins使用File的exists()方法判断文件存在,一直提示不存在的问题

小剧场 最近为了给项目组提供一个能给Java程序替换前端、后端的增量的流水线&#xff0c;继续写上了声明式流水线。 替换增量是根据JSON配置文件去增量目录里去取再替换到对应位置的&#xff0c;替换前需要判断增量文件是否存在。 判断文件是否存在&#xff1f;作为一个老Ja…