漫谈前端自动化测试演进之路及测试工具分析

漫谈,前端,自动化,测试,演进,之路,测试工具,分析 · 浏览次数 : 76

小编点评

**页面对象模型测试框架 (PageObject)** **功能** * 测试非常容易创建 * 有直观的用户界面 *维护测试绝佳策略 *支持多种测试语言 *团队协作 *云环境支持 **测试** * 测试非常容易创建 * 有直观的用户界面 *维护测试绝佳策略 *支持多种测试语言 *团队协作 *云环境支持 **测试报告** * 可视化的测试报告 **测试框架** * PageObject * Perfecto * Squish * AutonomIQ **优点** * 使用页面对象模型 (但仅在其生成的测试中) * 支持多种测试语言 *团队协作 *云环境支持 **缺点** * 测试脚本采用基于 TCL 的专有语言不能导入自己的 Selenium 脚本 * 开发人员需要一定的技术能力 *费用较高

正文

作者:京东零售 杜兴文

随着前端技术的不断发展和应用程序的日益复杂,前端自动化测试也在不断演进。

Web 前端 UI 自动化测试发展史可以追溯到 2000 年,当时最早的 Web 应用程序越来越复杂,开发人员开始使用自动化测试工具来确保应用程序的正确性和可靠性。

在早期,自动化测试是通过使用脚本或脚本来模拟用户的操作来完成的。这些测试工具通常基于 JavaScript 编写,并且需要对 Web 应用程序的交互方式进行深入了解。

随着 Web 应用程序变得越来越复杂,自动化测试的需求也越来越高。2005 年,Selenium 开始流行,它是一种基于 Java 的自动化测试框架,可以用于模拟用户操作并进行 Web 应用程序的自动化测试。

Selenium 和其他自动化测试工具的出现使得 Web 前端 UI 自动化测试变得更加容易和高效。随着 Web 应用程序的不断演变,自动化测试工具也在不断更新和发展。如今,自动化测试已经成为 Web 应用程序开发过程中不可或缺的一部分,它们可以帮助开发人员更快地发现和修复错误,提高应用程序的性能和可靠性。

下面是前端自动化测试经历的阶段:

  1. 手动测试:早期的前端开发过程中,开发人员需要手动测试代码的正确性,这需要大量的时间和精力。

2.单元测试:随着前端技术的不断发展,单元测试开始出现。单元测试是一种自动化测试方法,它测试代码中的最小可测试单元,例如函数或模块。单元测试可以帮助开发人员更快地发现和修复代码中的错误。

  1. 集成测试:集成测试是单元测试的进一步发展,它将单元测试集成到整个应用程序的测试中。这种方法可以更快速地发现整个应用程序中的错误。

  2. 端到端测试:端到端测试是一种自动化测试方法,它测试从输入到输出整个端到端应用程序的过程。这种方法可以帮助开发人员更快地发现和修复应用程序中的整个端到端错误。

  3. 持续集成和持续交付:持续集成和持续交付是一种自动化测试方法,它将测试集成到整个开发周期中,包括代码提交、构建、测试、部署等环节。这种方法可以帮助开发人员更快地交付高质量的应用程序。

  4. 自动化测试框架和库:随着前端自动化测试的不断发展,出现了许多自动化测试框架和库。这些框架和库可以帮助开发人员更快速地编写和运行测试用例,提高测试效率和质量。

  5. 人工智能和机器学习:最近这些年来,人工智能技术和机器学习方法逐渐应用于前端自动化测试中。这些方法可以帮助开发人员更快速地识别和修复错误,提高测试效率和质量。

总之,前端自动化测试是一个不断发展的领域,随着前端技术的不断发展和应用程序的日益复杂,测试人员需要不断地学习新技术和方法来跟上变化。

同时呢,我们在做前端自动化的时候又会伴随着一些挑战

编写 UI 测试脚本可能会很耗时,因为这部分工作需要测试循环之前就要做好。但这份辛苦是值得的;只不过,UI 脚本本质上是脆弱的。大多数测试是通过 Selenium 测试脚本完成的,这些脚本可以用多种语言编写,例如 Java、Python 和 C++。

下面列举一些挑战事项:

  • 重知识。编写脚本的人必须具有该方面的技术知识和经验。
  • 耗时。由于流程的原因,一项测试可能需要 5 – 10 多分钟才能运行。加载浏览器 > 执行任务 > 设置和解析测试 > 数据加载等等。
  • 维护。现代应用程序具有动态前端 UI。当同一页面重新加载时,其中的元素定位器和链接可能会在后台更改它们的定义方式。等待条件可能会破坏测试。如果页面加载时间更长,则会返回一个损坏的测试。
  • 处理多个错误。复杂的场景意味着巨大的数据量。筛选这个可能很麻烦。
  • 故障排除。根据问题的频率和修复它所花费的时间,找出是什么破坏了测试可能很困难。
  • 动态应用。由于敏捷开发,Web 应用程序以及应用程序本身一直在发生变化。测试必须从维护角度和结果角度来考虑。

前端自动化测试最佳实践又是什么呢,下面列举一些:

由于用户界面是用户触摸和看到的,因此实现自动化测试以缩短发布周期至关重要。与开发一样,所有团队都可以遵循一些类似的最佳实践,以确保从他们的自动化投资中获得丰厚的投资回报。

1. 遵循一致的命名约定。

2. 查看哪些测试用例应该自动化。

3. 创建质量测试数据。

4. 保持测试独立。

5. 不要只依赖一种类型的测试。

6. 当您实际上应该暂停 UI 测试时,请避免系统休眠。

7. 并非所有测试都必须在所有目标浏览器中使用。

8. 研究无头浏览器测试。

9. 考虑使用BDD 框架。

10. 使用数据驱动与重复测试。

11. 简单化测试。

12. 截取屏幕截图以改进故障调查。

13. 使用正确的自动化测试工具。

在过去的几年里,至少出现了十几种全新的 UI 测试自动化工具。由于每个工具都有自己的重点和策略,因此很难从中选择。不过您可以参考10 个必不可少的 Web UI 测试工具,只需要辨别哪一个有您的团队所需要的功能。

正如任何一个UI测试人员可能会争论的那样,UI 测试相对简单,只要您的 GUI 中没有任何变化,但问题是……界面一直在变化。根据您为 UI 测试选择的解决方案,不断变化的条件可能是具有自我修复和 AI 定位器的革命性体验,也可能是复杂的手动工作流程的严重失败。

以下是一些常用的 Web 前端 UI 自动化测试工具:

1. Parasoft Selenic

2. Katalon

3. Selenium IDE

4. mabl

5. TestIM

6. Functionize

7. Perfecto

8. TestCraft

9. Squish

10. AutonomIQ

1. Parasoft Selenic

Parasoft Selenic最亮的功能莫过于自我修复和AI驱动建议,可帮助团队有效维护其现有的Selenium脚本,无需退出Selenium即可从高级UI测试稳定性中受益,通过将简单的单行代码更改为命令行执行,即可激活适合现有CI / CD管道的功能; 一个智能的测试创建工作流程,使测试人员可以使用页面对象模型快速创建可维护的Selenium测试。

优点:

  • 智能记录器可以轻松创建使用页面对象模型的 Selenium 测试
  • 可以对现有的 Selenium 测试执行故障恢复,并在现有的 Selenium 测试中推荐智能定位器
  • 通过利用您现有的 Selenium 脚本或创建新的 Selenium 脚本,直接集成到您的 CI/CD 管道中
  • 提供测试影响分析技术,自动识别需要在 CI/CD 管道中执行哪些 Selenium 测试以验证新的代码更改
  • 提供各个级别的客户支持(不仅仅是企业)
  • 支持 BDD。专注于底层Java(JUnit和TestNG)Selenium测试代码的维护

缺点:

  • 此商业产品没有免费许可证,但可以免费试用。
  • 这个产品还是比较新的。当前版本支持 Java、JUnit 4 & 5、TestNG、Cucumber、Eclipse 和 IntelliJ。未来版本将考虑其他支持。

2. Katalon

katalon是近几年来比较流行的自动化测试工具,在自动化测试工具年度评选中仅次于selenium位居第二,他与selenium有着很多相似的地方又有很多不同,比如说他们有如下相同点:

他们都可以进行网页自动化测试。katalon的recorder 对标于selenium IDE,都可以进行网页的自动化脚本录制

他们都可以导出代码,其中katalon的recorder 也可以导出selenium的代码

katalon 的recorder 与seleniumIDE的功能有很多相同。

Katalon的优点:

  • 推荐智能定位器
  • 使用页面对象模型(但仅用于在 IDE 中生成和管理的测试)
  • 具有故障恢复功能(通过付费插件)
  • 能够导出到多种不同类型的测试脚本
  • 支持 BDD。功能文件执行 Katalon 测试代码

缺点:

  • 虽然您可以将测试导出为 Selenium 和其他测试脚本,但是一旦导出,将失去 Katalon 的所有可用性,并且导出不包括页面对象模型,这意味着测试变得难以重用和维护
  • 他们的客户支持仅在企业级别可用,而且非常昂贵
  • 不直接集成到您现有的执行框架中(使用专有框架,CI 集成可用作插件)

3. Selenium IDE

Selenium IDE应该说是我们用的最多的web自动化测试工具了,Selenium IDE(集成开发环境)是套件中可用的最简单的框架。 它用作为Firefox插件,因此安装和使用非常简单。 通过极少的编程知识和接近零的培训,就可以开始使用Selenium IDE。 对于初学者,要了解Selenese命令,还要了解脚本语法,这是一个很好的工具。

它提供了一个GUI(图形用户界面),用于在Firefox浏览器中记录必要的操作。选择在Firefox浏览器当前显示的页面上显示的UI元素时,Selenium IDE运行时的右键单击将根据所选UI元素的上下文显示具有预定义参数的Selenium命令列表。这使脚本变得更加容易!

更多请阅读:https://www.yiibai.com/hotnews/tempa/ide-benefits-limitations.html

优点:

  • 很容易安装和使用。
  • 不需要编程经验。
  • 具有内置的帮助功能,并显示所选或输入的命令的文档
  • 通过显示信息和错误消息帮助调试。
  • 它允许在必要时设置断点,插入命令和注释。
  • 为扩展提供良好的支持,有助于导出可在Selenium RC和WebDriver中执行的测试。

缺点:

  • 作为Firefox插件,它不支持Mozilla Firefox以外的任何浏览器。
  • 它没有明确提供帮助来支持警报,弹出窗口和导航。
  • 它不支持监听器。
  • 不支持错误处理和数据库测试。
  • 它不能用于测试iPhone和Android应用程序。
  • 不支持从外部文件读取和上传文件。
  • 不支持迭代和条件操作。

//更多请阅读:https://www.yiibai.com/hotnews/tempa/ide-benefits-limitations.html

关键要点:Selenium IDE 使用简单,让用户能够快速创建针对其 Web UI 的测试。它对 Selenium 非常友好,对于习惯了该框架的人来说会感觉很便利。

4. mabl

优点:

  • 推荐智能定位器(但对用户来说有点模糊)
  • 故障恢复功能运作良好
  • SaaS解决方案;易于访问和入门
  • 可扩展的定价模型

缺点:

  • 记录流程时不使用页面对象模型
  • 使用自己的框架,没有测试脚本的导入导出
  • 虽然存在 CI 集成,但您无法将解决方案直接集成到现有框架中
  • 如果某些事情没有按您预期的方式工作,则很难访问“代码”以进行配置或操作
  • 对“流程”的关注使得创建“功能验证”(即带有断言的测试)感到尴尬
  • 仅 SaaS 解决方案;没有内部部署,也无法访问公共互联网中不可用的应用程序
  • 没有对 BDD 的内置支持

5.TestIM

优点:

  • 测试非常容易创建,具有直观的用户界面
  • 推荐智能定位器,以及维护它们的绝佳策略
  • 多种测试模式:TestIM 提供了多种测试模式,包括单元测试、集成测试、端到端测试等,可以满足不同场景和需求的测试需求。
  • 自动化测试:TestIM 支持自动化测试,可以使用 Python、Java 等编程语言编写测试脚本,提高测试效率和准确性。
  • 测试报告:TestIM 提供了可视化的测试报告,可以实时展示测试结果和缺陷数量,帮助开发人员快速了解测试进展情况。
  • 团队协作:TestIM 支持团队协作和任务分配,可以方便地管理和协调测试任务,提高测试效率和质量。
  • 云环境支持:TestIM 支持云环境部署和运行,可以方便地在不同设备和环境中进行测试和部署。

缺点:

  • 在他们的测试中不使用页面对象模型
  • 缺乏导入和导出测试脚本的能力
  • 用户无法访问代码或从 TestIM 中进行测试
  • 供应商锁定框架——脚本在 TestIM 框架中
  • 对 BDD 的支持不明确

6. Functionize

优点:

  • 出色的测试流程可视化显示
  • 为元素推荐多个定位器
  • 简单易用:Functionize 的文档和 API 非常清晰易懂,使得初学者可以快速上手。
  • 功能强大:Functionize 支持多种 Web 应用程序自动化功能,如请求拦截器、响应拦截器、请求工厂、数据可视化等。
  • 可扩展性:Functionize 支持自定义插件和扩展,使得开发人员可以轻松地添加和自定义功能。
  • 跨平台支持:Functionize 可以在 Windows、macOS 和 Linux 等多个操作系统上运行,使得开发人员可以在不同的环境下进行开发。

缺点:

  • 不能使用页面对象模型
  • 供应商锁定框架
  • 没有导入和导出测试脚本
  • 学习曲线较陡峭:Functionize 的文档和 API 较为复杂,需要开发人员有一定的 Python 编程基础才能理解和运用。
  • 需要大量的配置:Functionize 的功能非常丰富,但这也需要大量的配置和设置,可能会让开发人员感到繁琐。

7. Perfecto

优点:

  • 使用页面对象模型(但仅在其生成的测试中)
  • 为记录的 Web 元素提供多个定位器
  • 最近引入了故障恢复(虽然有点不清楚它的作用或性能如何)

缺点:

  • 测试脚本采用基于 TCL 的专有语言
  • 不能导入自己的 Selenium 脚本
  • 虽然它们提供 CI 集成,但它并未直接集成到您现有的框架中
  • BDD 通过第三方实施支持,Project Quantum

8. TestCraft

优点:

  • 使用页面对象模型(但仅在其生成的测试中)
  • 推荐智能定位器,称为“智能绑定”
  • 功能强大:TestCraft 提供了许多功能,能够满足不同类型的测试需求。
  • 易于使用:TestCraft 的安装和使用方法比较简单,可以快速上手。
  • 跨平台支持:TestCraft 可以在不同的操作系统上运行,包括 Windows、macOS 和 Linux 等。
  • 支持多种测试语言:TestCraft 可以与多种测试语言集成,包括 Python、Java、c 等。
  • 可以集成到其他工具中:TestCraft 可以与许多其他工具集成,例如 Git、Jenkins 等。

缺点:

  • 使用专有框架
  • 您不能导入/导出测试脚本
  • 不直接集成到您现有的框架中(CI 集成可用作插件)
  • 学习曲线较陡峭:TestCraft 的功能很多,因此需要一定的学习曲线,需要花费一定的时间来了解它的使用方法。
  • 复杂度比较高:TestCraft 的使用需要一定的技术能力,如果不熟悉测试理论、方法和工具,可能会感到复杂和困难。
  • 费用较高:TestCraft 是一种商业测试框架,需要支付一定的费用。

9. Squish

优点:

  • 广泛的跨平台测试支持
  • 强大的光学字符识别 (OCR) 功能
  • 独立于屏幕布局的可靠对象识别和验证
  • 对脚本语言的良好支持

缺点:

  • 可能需要改进最终用户培训和技术支持,尽管大多数反馈是有利的
  • 向对象映射添加新对象时报告的一些问题

10. AutonomIQ

优点:

  • 强大的 NLP、AI 和 ML
  • 使用页面对象模型(但仅在其生成的测试中)
  • 通过 Chrome 插件推荐智能定位器
  • 在执行过程中故障恢复
  • 传统 BDD 的替代方法(使用专有 NLP)。如果您想做传统的 BDD(即 Cucumber),可能是个缺点

缺点:

  • 使用专有框架
  • 您无法导入测试脚本
  • 不直接集成到您现有的框架中(CI 集成可用作插件)
  • 不完全成熟的技术

与漫谈前端自动化测试演进之路及测试工具分析相似的内容:

漫谈前端自动化测试演进之路及测试工具分析

随着前端技术的不断发展和应用程序的日益复杂,前端自动化测试也在不断演进。随着 Web 应用程序变得越来越复杂,自动化测试的需求也越来越高。如今,自动化测试已经成为 Web 应用程序开发过程中不可或缺的一部分,它们可以帮助开发人员更快地发现和修复错误,提高应用程序的性能和可靠性。

以前端视角,漫谈「云端」

当今世界,云计算技术在快速发展,不断为我们带来新的应用场景和解决方案。作为一名前端开发者,了解云技术并掌握如何在前端中应用它们是必不可少的。本篇文章将介绍云计算技术的基本概念,并从前端角度探讨如何使用云技术提高应用的可扩展性、安全性、性能和用户体验。

一个前端大佬的十年回顾 | 漫画前端的前世今生

回到十年前,前端技术就像一名戴着厚重眼镜的书呆子,总是小心翼翼,被各种各样的浏览器兼容性问题欺负(就像在小学被欺负一样)。

为什么 C# 可能是最好的第一编程语言

纵观神州大地,漫游中华互联网,我看到很多人关注为什么你应该开始学习JavaScript做前端,而对blazor这样的面向未来的框架有种莫名的瞧不起,或者为什么你应该学习Python作为你的第一门编程语言,恕不知有多少公司业务是用Python开发的,Python更多是粘合剂,作为胶水语言来使用。我用C

千姿百态,瞬息万变,Win11系统NeoVim打造全能/全栈编辑器(前端/Css/Js/Vue/Golang/Ruby/ChatGpt)

我曾经多次向人推荐Vim,其热情程度有些类似现在卖保险的,有的时候,人们会因为一些弥足珍贵的美好暗暗渴望一个巨大的负面,比如因为想重温手动挡的快乐而渴望买下一辆二十万公里的老爷车,比如因为所谓完美的音质而舍不得一个老旧的有线耳机,比如因为一个铜炉火锅而期待北京那漫长而寒冷的冬天。

楠姐技术漫话:图计算的那些事 | 京东云技术团队

不知道大家在平时的工作中有没有听说过“图计算”这个名词,但大家一定在各工作汇报,技术分享中听说过“智能化”,“人工智能”这样的字眼,而我们今天要唠的这个图计算就是人工智能领域内近几年炙手可热的前沿宠儿

高一下三调模拟赛5.13(附关于二分图匈牙利建边的详细思考)

前言注:本篇为知识性内容,A题附详解关于匈牙利算法求最大独立子集难以理解的建边问题的思考,若有不当之处感谢指出。暂时只写了A篇题解,以供帮助大家理解相关问题,剩余题解会进行补充。 又是小集训的一周,总要伴随着模拟赛... 还是五道题目: A. 攻击装置 B. 循环 C. 漫步 D. 穿越 E. 结队

漫谈Python魔术方法,见过的没见过的都在这里了

漫谈Python魔术方法,见过的没见过的都在这里了 就说一下,不深入 假的一览 提到魔术方法,学过python都应该知道一些。至少你得会__init__吧。 在我之前写的博文中有很多都涉及魔术方法。比如 浅谈Python中的if,可能有你不知道的,涉及__bool__和__len__ 浅谈Pytho

随机数漫谈

随机数对程序设计来说很重要,今天就从几方面探讨下一些常见的随机数相关的问题。 本文只讨论整数相关的随机数,另外需要你对概率论有最基本的了解(至少知道古典概型是什么)。 本文索引 如何从rand7生成rand5 go标准库的做法 从rand5生成rand7 充分利用每一个bit 带有权重的随机数 随机

[转帖]动态追踪技术漫谈

https://blog.openresty.com.cn/cn/dynamic-tracing/ 本文最初成稿于 2016 年 5 月初,后于 2020 年 2 月中进行了较大的更新和修订,后续会持续保持更新。 什么是动态追踪 动态追踪的优点 DTrace 与 SystemTap SystemTa