如何更快地执行 Selenium 测试用例?

news2024/11/16 3:36:27

前言:

当我们谈论自动化时,首先想到的工具之一是 Selenium。我们都知道Selenium WebDriver 是一个出色的 Web 自动化工具。实施Selenium 自动化测试的主要原因是加速 selenium 测试。在大多数情况下,Selenium 的性能比手动的要好得多。但是,有时自动化脚本通常运行速度较慢。集成和单元测试比 Selenium 测试要快得多。有时,单个测试需要几分钟才能运行,当它们的数量更多时,速度会更慢,因为很难获得准确和更快的反馈。但是,你始终可以使用最好的selenium 测试自动化方法来加速selenium 测试。

如何更快地执行 Selenium 测试用例?

测试人员可以采用多种方法来加速 Selenium 测试用例。你可以考虑使用显式等待、Web 定位器、更喜欢不同的浏览器、优化 Selenium 基础架构,并考虑其他用于增强软件性能的最佳实践。由于最终产品中有如此多的更新,因此维护 Selenium 测试用例的过程变得繁琐。因此,我们不能忽视 Selenium 测试用例的性能;相反,我们应该专注于从初始阶段加速它们。Selenium 测试用例在任何给定场景中的关键任务是:

  • 使用 Selenium Webdriver(本地/远程)打开测试中的 URL
  • 利用相关的网页定位器,定位网页元素
  • 对被测页面上的定位 Web 元素执行断言
  • 释放 WebDriver 使用的资源

让我们重点介绍一些方法来了解如何加速 selenium 测试。

Selenium 自动化中的并行测试

这是加快 Selenium 测试用例的最简单方法之一。并行测试允许您在不同的设备浏览器组合和操作系统配置上同时执行多个测试,立即覆盖整个测试套件。如果您拥有内部 Selenium Grid 基础设施,您可以随时查看 Selenium Grid 4 的优势,并了解它在加快 Selenium 测试用例速度方面所提供的功能。让我们假设您有十个测试要运行。如果您在不同的设备上运行它们,则所有十个测试都可以在 10 秒内完成,而不是 100 秒。您可以在类和方法级别选择此方法。对测试场景进行分组、参数化和基于云的选项将进一步加强该过程。

A. 分组测试:

测试套件中的多个测试方法和测试文件使实现变得困难。如果我们根据被测功能的类型对测试场景进行分组,则可以轻松管理任何新出现的复杂性。

B. 用 Selenium 4 替换 Selenium 3:

随着Selenium 4的发布,Selenium有了显着的改进. 它配备了优化的 Selenium Grid、标准化的 Selenium Webdriver 万维网联盟 (W3C)、增强的 Selenium 4 IDE,此外,它还引入了 Chrome Web Tools 和相关定位器。这些改进可以显着加快 Selenium 测试。如果我们比较 Selenium 3 和 4,我们会发现前者使用 JSON 有线协议进行浏览器和测试代码之间的交互,这导致了通过 W3C 加密和解码多个 API 请求的额外负担。但后者使用 WebDriver W3C 协议,可加速 Web 浏览器和测试代码之间的交互。新引入的 Selenium 4 相对定位器,如 – ​'above' ​、​'below'​、​'to_left_of'​、​'to_right_of'​、​'near'​,加速了 Selenium 测试用例并提高了它们的整体稳定性。还,

C.  基于云的 selenium网格:

每当您想要测试必须跨多个浏览器-操作系统-设备组合运行许多并行测试的大型 Web 应用程序时,你将需要一个基于云的 Selenium Grid 来执行和加速 Selenium 测试用例。下面是 Selenium Grid 的图示。

选择相关的网站定位器

Web 定位器是任何 Selenium 测试场景中不可或缺的部分。定位网络元素后,需要一个合适的网络定位器来进一步发挥作用。在众多可用选项中,始终建议使用速度更快的网络定位器。在所有网络定位器中,ID 定位器是 Selenium WebDriver 中最快的。让我们简要讨论一些最常用的网络定位器:

A. ID 定位器:它使用与所有浏览器相关的​document.getElementById() javascript​ 命令运行速度最快。在许多唯一元素持续存在的情况下,此命令会生成第一个唯一匹配项。只有当 HTML 元素具有对页面上的每个元素都是唯一的 ID 属性时,它才起作用。在执行速度方面,在 ID 之后,Name、CSS Selector 和 XPath 分别是最快的。

B. 名称选择器:当 WebElement 中没有 ID 时,使用名称选择器 Web 定位器。

C. CSS Selector:如果 WebElement 没有 ID 或 NAME 属性,在这种情况下选择 CSS Selector Web locator 是合适的。CSS 在大多数常见的 Web 浏览器中通常没有什么不同,并且使用 Selenium 中的 CSS 选择器确保 CSS 引擎的更好性能。使用此 Web 定位器的优势是更快的元素识别、降低浏览器不兼容性和减少测试执行。与 XPath 相比,在 Internet Explorer 等传统 Web 浏览器的情况下首选 CSS 定位器,以提供更好的明确性。

D. XPath: XPath Selector 是最灵活的 Web 定位器,但它是最快的四个定位器中最慢的,因为必须跨越路径的每一层才能选择特定的 Web 元素并从一个浏览器移动到另一个浏览器。使用 XPath 定位器不应该是主要选择,而应该仅在这是剩下的唯一选项时才使用。

  • 使用少量 Web 定位器:将Web 定位器的数量保持在最低限度,可以提高测试脚本的可读性,从而减少 Selenium 脚本的执行时间。
  • Explicit Waits:用于自动化测试的 Explicitwait 命令将消除任何减速,并允许您执行等待条件,例如 Element 可见、Element 是可点击的、Element 是可选的页面 Web 元素,这在 Selenium 中的隐式等待的情况下是不可能的. 例如,当标识的元素可点击时,ToBeClickable 方法会生成一个 WebElement。一旦条件满足,显式等待就会撤退。这意味着元素作为结果返回并且不会等待整个持续时间。下面的代码片段显示了 ID = element 的 WebElement 在 6 秒内定位。在其位置之后,显式等待退出,并返回所需的 WebElement。

 利用显式等待的测试脚本展示了更好的性能。

  • 创建原子脚本:通过简化复杂场景来创建独立的测试用例使 Selenium 测试高效。像 TestNG 这样的框架支持测试方法之间的显式测试依赖关系,而原子测试可以轻松检测到故障,这减少了测试时间和维护工作,最大限度地减少了测试依赖关系,并加速了 Selenium 测试。
  • 禁用网页上的图像以加快页面加载速度:创建 Selenium 实例后,您可以使用 driver.get() 方法打开被测页面。许多网页内容丰富,由许多图像组成,导致页面加载速度变慢。但是可以通过使用浏览器相关设置禁用图像加载来加快页面加载速度。

下面的快照显示:

 如何在Chrome中使用 Selenium 脚本禁用页面加载以加快 Selenium 测试用例和页面加载。

如何在Firefox 中使用 Selenium 脚本禁用页面加载以加快 Selenium 测试:

在这种情况下,图像加载在 Amazon 电子商务网站中控制,其中 Firefox 首选项设置为 2,使用 permissions.default.image。

  • 参数化的数据驱动测试:让我们来看看如何使用​Parameterization​加速 selenium 测试。当涉及针对大量数据集进行测试,并在不同的测试输入上运行相同的测试时。参数化被证明是一个很好的选择。大多数自动化框架都很好地支持参数化,例如 ​TestNG(Selenium Java)​、​JUnit​、​NUnit(C#)​、​PyTest( Selenium Python )​ 等。
  • 使用无头浏览器/驱动程序:无头浏览器允许我们在没有浏览器图形用户界面 (GUI) 的情况下执行浏览器用户界面 (UI) 测试。它还有助于提高在后台运行的跨浏览器测试的效率。如果怒不想了解通过测试脚本收到的 UI 交互,则不需要此最佳实践。一些常见的无头浏览器是 ​HtmlUnit​、​Splash​、​PhantomJS ​等。在 ​PhantomJS ​驱动程序的上下文中查看 Selenium 浏览器测试的性能。

结论

Selenium 测试执行的速度对业务至关重要。即使它们很慢,也有很多方法可以加速硒测试。上述最佳实践有助于加速 Selenium 测试、加速和减少测试时间。在持续测试中及早发现错误可以更快地解决问题,从而提高测试性能并提高产品质量。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

vue3+ts之el-tooltip换行显示内容

<el-tooltip placement"top-end"><div slot"content" class"tips"><el-button type"primary" click"exportData">导出</el-button></div><template #content><span class"cont…

出差——蓝桥杯十三届2022国赛大学B组真题

问题分析 该题属于枚举类型&#xff0c;遍历所有情况选出符合条件的即可。因为只需要派两个人&#xff0c;因此采用两层循环遍历每一种情况。 AC_Code #include <bits/stdc.h> using namespace std; string str;//选择的两人 bool ok(){if(str.find("A")!-1…

关于如何取消数据请求的操作

直接上码&#xff1a; class RequestManager {constructor() {this.requestQueue []}addRequestQueue(axios) {// 创建取消令牌const cancelToken axios.CancelToken.source()this.requestQueue.push(cancelToken.cancel)return cancelToken.token}clearRequestQueue() {thi…

【Android】Kotlin学习之数据容器(数组for循环遍历)

数组遍历 1. for ( item in arr){…} 2. for ( i in arr.indeces ) {…} (遍历下标) 3. for ((index, item) in arr.withInfex()) {…} (遍历下标和元素) 4. arr.forEach {} ( 遍历元素 ) 5. arr.forEachIndexed{index, item -> …}

刷!简单的转录组分析+Cytoscape三小时工作量,思路易复现

说在前面 两样本孟德尔随机化应该大伙都了解的不少&#xff0c;不过今天看到一篇&#xff0c;有点“料”的文章&#xff0c;一句话总结&#xff1a;Cytoscape乱拳打死老师傅&#xff0c;通篇除了WGCNA、差异分析是作为常规的转录组分析方法&#xff0c;剩下的几乎都是ClueGO的…

C盘文件清理

WinSxS里面的文件是不可删除的。WinSxS下有很多重要的组件&#xff0c;版本也很繁杂&#xff0c;为了保证Windows的正常运行&#xff0c;请确保这些文件一个都不能少。这些文件支撑着mscorwks.dll&#xff0c;没有它们&#xff0c;mscorwks也无法加载。强行删除后可能只有以安全…

大模型日报|今日必读的 8 篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.清华、智谱AI 团队推出代码评测基准 NaturalCodeBench 大型语言模型&#xff08;LLM&#xff09;在为生产活动生成代码方面表现出强大的能力。然而&#xff0c;目前的代码合成基准&#xff0c;如 HumanEval、MBPP …

Latex编辑器WinEdt修改正文字体大小方法,防止字体大小对眼睛不好

一、背景 使用Latex编辑器WinEdt写论文时&#xff0c;默认的正文字号太小&#xff0c;看起来比较累眼&#xff0c;如下图所示。但是该编辑器没有简单的设置菜单&#xff0c;不能一键修改字体大小。因此通过百度测试以下方法可以&#xff0c;特记录如下。 二、WinEdt修改正文字…

院校信息 | 伯明翰大学24Fall新增3个专业!附截止时间!

伯明翰大学针对2024年秋季入学&#xff0c;推出3个新的授课型硕士项目&#xff1a; MSc Financial Data Science 金融数据科学理学硕士 MSc Statistical Data Science 统计学数据科学理学硕士 MSc Statistics 统计学理学硕士 以上所有课程24fall申请截止时间为6月1日&#xf…

2024年,UTONMOS也许能带领元宇宙走向下一个征程

“元宇宙元年”开启时&#xff0c;科技的触角企图在0与1构成的世界里、安放可以数字化的一切&#xff0c;绘制出时间与空间的虚拟延长线。 尼尔斯蒂芬森笔下的虚拟城市沿着一条100米宽的道路发展&#xff0c;楼宇上的电子标志在昏暗的街区蔓延&#xff0c;人们可以通过虚拟现实…

一站式HMI软件开发套件eStation,让开发更简单高效

4月份举办的北京国际车展上全球首发车117辆&#xff0c;新能源车型278个&#xff0c;越来越多的车厂通过差异化和改善UI/UE体验&#xff0c;来获取更多用户的青睐。为快速响应差异化竞争需求&#xff0c;智能座舱HMI市场遇到以下挑战&#xff1a; 如何兼容不同项目开发人员编程…

MySQL利用变量进行查询操作

新建连接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 # MySQL利用变量进行查询操作 set cityNameHaarlemmermeer; select * from city where NamecityName;# 多个结果查询 set cityName1Haarlemmermeer; set cityName2Breda; set cityName3Willemstad; selec…

个人直播/流媒体服务解决方案实践

目录 1. 说明 1.1 拓扑结构图 2. 准备工作 2.1 软硬件清单 3. 步骤 3.1 按上面的软硬件清单准备好材料 3.2 内网检查测试 3.3 透传到公网服务器 3.5 机顶盒配置 4. 总结 5. 参考 6. 后语 1. 说明 - 在本地局域网建立流媒体服务&#xff0c;并发布到公网服务器供终…

读天才与算法:人脑与AI的数学思维笔记22_中文房间

1. 华生的工作模式 1.1. 请你想象一个巨大的场景&#xff0c;其中有单词、名字和其他可能的答案&#xff0c;它们散布在各处 1.1.1. IBM所做的第一步是以某种连贯的方式排列单词 1.1.2. 第二步是理解每个问题&#xff0c;并为该问题生成候选位置标记 1.1.2.1. 爱因斯坦会演…

ChatGPT Web Midjourney一键集成最新版

准备工具 服务器一台 推荐使用浪浪云服务器 稳定 安全 有保障 chatgpt api 推荐好用白嫖的api 项目演示 项目部署 浏览器访问casaos 添加软件原添加 https://gitee.com/langlangy_1/CasaOS-AppStore-LangLangy/raw/master/chatmjd.zip 安装此软件 等待安装 安装后再桌面设置…

开发Web3 ETF的技术难点

开发Web3 ETF&#xff08;Exchange-Traded Fund&#xff0c;交易所交易基金&#xff09;软件时&#xff0c;需要注意以下几个关键问题。开发Web3 ETF软件是一个复杂的过程&#xff0c;涉及到金融、法律和技术多个领域的专业知识。开发团队需要综合考虑上述问题&#xff0c;以确…

和comate一起,用JavaScript实现一个简易版五子棋小游戏

前言 五子棋起源于中国&#xff0c;是全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连珠者获胜。 这次和Baidu Comate智能代码助手共同完成这个小游戏…

设置LCD为第二终端

我一直使用xshell端&#xff0c;开发板通过串口和 xshell进行通信。 调试好LCD 驱动之后&#xff0c;可以设置 LCD 作为终端&#xff0c;也就是开发板使用自己的显示 设备作为自己的终端&#xff0c;然后接上键盘就可以直接在开发板上敲命令了&#xff0c;将 LCD 设置为终端控制…

wish、亚马逊怎么给店铺引流?怎么运用自养号测评提高流量的转化率?

作为全球知名的跨境电商平台&#xff0c;wish、亚马逊为卖家提供了一个拓展海外市场的机会。然而&#xff0c;在wish、亚马逊平台上建立和经营一家成功的店铺需要有效的引流策略。那么&#xff0c;Wish、亚马逊怎样才能给店铺引流呢&#xff1f; 一、Wish、亚马逊怎么给店铺引…

C++STL细节,底层实现,面试题04

文章目录 19. STL19.1. 序列容器19.1.1. vector19.1.1.1. 底层实现和特点19.1.1.2. 常用函数19.1.1.3. emplace_back() vs push_back() 19.1.2. array19.1.2.1. 底层实现和特点19.1.2.2. 常用函数 19.1.3. deque19.1.3.1. 底层实现和特点19.1.3.2. 常用函数 19.1.4 list19.1.4.…