如何提高Selenium测试案例的速度?

511 阅读8分钟

如何加快Selenium测试案例的速度?

发布者::Priyanka Charak inEnterprise Java August 20th, 2021 0 Views

当我们谈论自动化时,首先想到的工具之一就是Selenium。我们都知道,Selenium WebDriver是网络自动化的一个杰出工具。实施Selenium自动化测试的主要原因是为了加快Selenium测试的速度。在大多数情况下,Selenium的表现比手动的格外好。

但是,有时自动化脚本一般运行较慢。集成和单元测试相对来说比Selenium测试要快。有时一个测试需要几分钟的时间,当他们的数量较多时,就更慢了,因为这很难得到准确和快速的反馈。然而,你总是可以使用硒测试自动化的最佳方法来加快硒测试的速度。

如何才能更快地执行你的硒测试案例?

测试人员可以采用各种方法来加快Selenium测试用例的速度。你可以考虑使用显式等待、网络定位器、优选不同的浏览器、优化Selenium基础设施,并考虑其他最佳做法以提高软件性能。随着最终产品的大量更新,维护Selenium测试用例的过程变得很麻烦。因此,我们不能忽视Selenium测试用例的性能;相反,我们应该从初始阶段就专注于加速它们。在任何情况下,Selenium测试用例的关键任务是。

  • 利用Selenium Webdriver(本地/远程)打开被测URL
  • 利用相关的网络定位器,定位网络元素
  • 在被测页面上对定位的网络元素进行断言
  • 缓解WebDriver使用的资源

让我们强调一些方法来了解如何加快Selenium测试的速度。

Selenium自动化中的并行测试

这是加快Selenium测试案例的最简单的方法之一。平行测试允许你在不同的设备-浏览器组合和操作系统配置上同时执行多个测试,在短时间内覆盖整个测试套件。如果你有一个内部的Selenium Grid基础设施,你可以随时检查Selenium Grid 4的好处,看看它在加快Selenium测试案例的速度方面有什么优势。让我们假设你有十个测试要运行。如果你在不同的设备上运行它们,所有的十个测试可以在短短十秒内完成,而不是100秒。你可以在类和方法层面选择这种方法。对测试场景进行分组,它们的参数化,以及基于云的选项将进一步加强这一过程。

a.分组测试。

测试套件中的多个测试方法和测试文件使实施变得困难。如果我们根据被测功能的类型对测试场景进行分组,就会变得很容易管理任何新出现的复杂情况。

b.用 Selenium 4 替换 Selenium 3。

随着Selenium4的发布,Selenium已经有了很大的改进。它带有优化的Selenium网格,标准化的Selenium Webdriver世界网络联盟(W3C),增强的Selenium 4 IDE,此外,它还引入了Chrome Web工具和相对定位器。这些改进可以大大加快Selenium测试的速度。如果我们比较Selenium 3和4,我们会发现前者使用JSON有线协议在浏览器和测试代码之间进行交互,这造成了通过W3C对多个API请求进行加密和解码的额外负担。但后者利用WebDriver W3C协议,加快了网络浏览器和测试代码之间的互动。新引入的Selenium 4相对定位器,如 "上面"、"下面"、"左边"、"右边"、"附近",加快了Selenium测试案例的速度,提高了它们的整体稳定性。另外,从版本3升级到4也很容易,没有任何麻烦。

c. 基于云的Selenium网格。

每当你想测试大规模的网络应用程序,其中许多平行测试必须在多个浏览器-操作系统-设备组合中运行,你将需要一个基于云的Selenium网格来执行和加速Selenium测试案例。下面是Selenium Grid的图示。

选择相关的网络定位器

网络定位器是任何Selenium测试方案中不可缺少的部分。在定位了网络元素之后,需要一个适当的网络定位器来进一步行动。在众多的选择中,使用更快的网络定位器总是明智的。在所有的网络定位器中,ID定位器是Selenium WebDriver中最快的一个。让我们简单地讨论一下一些最常用的网络定位器。

**a.ID定位器。*它使用document.getElementById()*javascript命令工作得最快,这与所有的浏览器有关。在许多独特元素持续存在的情况下,该命令会产生第一个独特的匹配。只有当HTML元素的ID属性对页面上的每个元素都是唯一的,它才会起作用。就执行速度而言,在ID之后,Name、CSS Selector和XPath分别是最快的。

**b.名称选择器。**当WebElement中没有ID时,就利用Name Selector网络定位器。

c.CSS选择器。 如果WebElement没有ID或NAME属性,在这种情况下选择CSS选择器网络定位器是合适的。CSS通常在大多数常见的Web浏览器中没有差异,使用Selenium中的CSS选择器可以确保CSS引擎的更好性能。使用这种网络定位器的好处是可以更快地识别元素,降低浏览器的不兼容性,并减少测试执行。在像Internet Explorer这样的传统网络浏览器中,CSS定位器是首选,与XPath相比,它提供了更好的明确性。

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

  • 使用很少的网络定位器。 将网络定位器的数量保持在最低水平,可以提高测试脚本的可读性,减少Selenium脚本执行的时间。
  • **明确的等待。**自动化测试的显式等待命令将消除任何减速,并允许你执行等待条件,如元素是可见的,元素是可点击的,元素是可选择的网页元素,这在Selenium的隐式等待中是不可能的。例如,ToBeClickable方法在识别的元素是可点击的时候产生一个WebElement。显式等待在条件得到满足后立即撤退。这意味着该元素作为一个结果被返回,而不需要等待整个时间长度。下面有一个代码片段,显示ID=element的WebElement在6秒内被定位。在找到它之后,显式等待退出,所需的WebElement返回。

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

  • **创建原子式脚本。**通过简化复杂的场景来创建独立的测试案例,使Selenium测试变得高效。像TestNG这样的框架支持测试方法之间明确的测试依赖性,而原子测试很容易检测到故障,这减少了测试时间,在维护中花费的精力,它最大限度地减少了测试依赖性,并加速了Selenium测试。
  • 禁用网页上的图像,以加快页面加载。 在创建Selenium实例后,你可以使用driver.get()方法打开被测页面。许多网页内容丰富,由许多图片组成,导致页面加载时间缓慢。但是,通过使用浏览器相关设置禁用图像加载,可以加快页面加载速度。

下面的快照显示。

- 如何在 **Chrome**中使用Selenium Scripts禁用页面加载(在Amazon网站上),以加快Selenium测试用例和页面加载速度。

-如何在 Firefox 中使用Selenium Scripts禁止页面加载以加速Selenium测试。

在这种情况下,在亚马逊电子商务网站中控制图像加载,其中Firefox偏好设置为2,使用permissions.default.image。

  • 参数化的数据驱动测试。让 我们研究一下如何使用参数化来加快硒测试的速度。当它涉及到针对广泛的数据集进行测试,并在不同的测试输入上运行相同的测试。参数化被证明是一个不错的选择。大多数自动化框架都支持参数化,如TestNG(Selenium Java)、JUnit、NUnit(C#)、PyTest(Selenium Python)等。

  • 使用无头浏览器/驱动程序。

    无头浏览器允许我们在没有浏览器图形用户界面(GUI)的情况下执行浏览器用户界面(UI)测试。它也有助于提高在后台运行的跨浏览器测试的效率。如果你不想知道通过测试脚本收到的UI交互,你不需要这种最佳实践。一些常见的无头浏览器有HtmlUnit、Splash、PhantomJS等。看看Selenium浏览器测试在PhantomJS驱动下的表现吧。

总结

Selenium测试的执行速度对企业来说是至关重要的。即使它们很慢,也有很多方法可以加快Selenium测试的速度。前面提到的最佳实践有助于加快Selenium测试的速度,加速和减少测试时间。在连续测试中及早发现错误,可以更快地解决问题,从而提高测试性能,增强产品质量。

由我们JCG项目的合伙人Balamurugan授权发表在Java Code Geeks上。点击这里查看原文。如何提高Selenium测试案例的速度?

Java Code Geeks撰稿人所表达的观点属于他们自己。

Selenium 测试 2021-08-20

Priyanka Charak