[转载自“龙腾测试”公众号]
我们都希望为 Web 应用程序构建易维护的测试。作为这个目标的一部分,我们都希望能集中精力在测试本身,而尽量避免困在实施的具体细节中。从长远来看,测试应该是可维护的,对软件定期的变更并不会破坏测试本身或者让团队的开发节奏变慢。
迭代速度 / 现实环境:某些测试工具可以在做出更改和查看结果之间提供简短的反馈循环,但不能精确地模仿浏览器的行为。其他工具可能会使用实际的浏览器环境,但会降低迭代速度,并且在连续集成系统中可能会变得更加脆弱。
1、Selenium
知名的浏览器 web 应用测试框架,可以用 Java、C#、Ruby、JavaScript、R 和 Python 等多种编程语言编写测试案例。
Selenium 为每种语言提供客户端 API。
Selenium WebDriver 尽可能使用原生操作系统级别的功能,而非基于浏览器 JavaScript 的命令来驱动浏览器。
这样就绕过了原生功能和 JavaScript 命令之间由于细微差别而产生的问题(包括安全限制)。它提供了很大的灵活性,甚至还支持 iframe 和多个浏览器标签。
卓越的跨浏览器功能令人印象深刻。可以在主流浏览器(Chrome、Firefox、Safari、Edge、Internet Explorer)上执行 Selenium 测试。
Selenium Grid 可以与 WebDriver 一起使用,以在远程系统上执行测试。
使用 Selenium 的唯一缺点是,它需要大量的技能,并且编写测试非常耗时。对没有编程经验的人来说,乍一看用 Selenium 编写测试似乎很容易;但是如果没有最佳实践,将导致项目内的测试自动化框架难以维护且不够稳定可靠。
2、Endtest
Endtest 是智能自动化测试解决方案,它使用多个开源和闭源组件去简化创建和执行测试的流程。其中之一就是 Recorder 组件可以让用户不用编程技巧就能创建和执行测试。你可以用图形化界面编辑管理自己的测试案例,而不用编写任何代码。
它和 Selenium 一样拥有灵活性,允许你自动化测试场景,其中包含 iframe、多个浏览器标签、文件上传、ShadowDOM等等。它同 Selenium 一样拥有跨浏览器的特性,支持所有主流的浏览器(Chrome、Firefox、Safari、Edge、Internet Explorer)。同时,它也包括跨浏览器的云框架,支持 Windows、Mac 以及移动设备上的浏览器。
此外,它还有支持 JavaScripts 执行的组件,以及发送 API 请求和连接数据库执行 SQL 语句的组件。
这些组件可用于在测试中添加额外的验证步骤,并可准备或清理测试环境。
3、Watir
Watir 是一个 Ruby 的浏览器自动化测试开源库。
Watir 与对浏览器的互动方式和人类是一样的:如点击一个网页元素,填输入字符。
它的底层使用了 Selenium 并且提供同样的灵活性,也支持跨浏览器。同时,它也支持 iframes 以及多个浏览器标签。
Watir 最大的优点是 API 很容易使用,它在繁复的 Selenium API 之上增加了一层简单性。
不过,它的主要缺点是,它不如 Selenium 受欢迎,在寻找答案和解决方案方面你会遇到一些困难。
4、Puppeteer
一个 Node 库,它提供了高级的 API 并通过 DevTools 协议来控制 Chrome(或 Chromium)。
我认为未来它可以代替 Selenium。它也具有支持 iframe 和多个浏览器标签的灵活性。
值得一提的是,它有 2 种不同的软件包:puppeteer-core 和 puppeteer
唯一的区别是 puppeteer-core 在安装后不会自动下载 Chromium。
puppeteer 的主要缺点是缺乏跨浏览器功能,因为它仅适用于基于 Chromium 的浏览器。
即使 Opera 和 Edge 迁移到 Chromium,也无法保证 Firefox 和 Safari 将来也会这样做。
另一个缺点是,唯一受支持的语言是 Node.js。即使到 2020 年一切似乎都围绕 JS 展开,但是仍然有一些用户可能想使用其他语言进行自动化测试的开发。
5、Playwright
一个 Node 库,可通过单个 API 在 Chromium、Firefox 和 WebKit 浏览器上执行自动化测试。
Playwright 旨在不断增长的 Web 浏览器集上实现自动化操作。Playwright 类似于 Puppeteer。
它支持多页面、多域名和 iframes 测试,还可以模拟移动端设备,地理指向和权限控制也是可以测试的。
即使它具有更广泛的跨浏览器支持,但它也不支持 Internet Explorer。
因为它是一个相对较新的库,所以你可能现在在线上找不到很多资源。
如果你在编写 Node.js 代码方面有扎实的经验,那么 Playwright 可以一试。
6、Sikuli
在运行 Windows、Mac 或 Linux 的台式计算机屏幕上看到的任何内容,都可以使用 Sikuli 执行自动化测试。
它使用由 OpenCV 支持的图像识别来识别视觉组件。如果无法轻松访问 GUI 内部或要操作的应用程序或网页的源代码,这个工具会非常方便。实际上,这是大多数现代 RPA 解决方案背后的技术。
Sikuli 的优点是,元素具有唯一属性或属性是否更改都无关紧要,因为 Sikuli 仅依赖于视觉识别。
它的主要缺点是视觉容忍度让用户很难在不同的浏览器和屏幕尺寸之间实现自动化。
并且,使用 Sikuli 库需要编程技巧,并且你可以在 Python、Ruby 和 Java 之间选择。
如果你有涉及 Web 应用程序和桌面应用程序的混合自动化测试,则较好的做法是将 Selenium 用于 Web 组件,将 Sikuli 用于桌面组件。
7、Micro Focus UFT (QTP)
专有解决方案,以前称为 QuickTest Professional(QTP)。它提供了使 Web 应用程序和桌面应用程序自动化的功能。
它使用 Visual Basic 脚本语言来定位应用程序中的元素并与之交互。同时,它还提供了一个 IDE,你只需在 GUI 中创建一个流程即可在不编写任何代码的情况下构建测试。
该工具已经存在很长时间,并且确实使 Selenium 失去了很多市场份额。
8、IBM Rational Functional Tester
一个提供功能、回归、GUI 和数据驱动测试的自动化测试的专业工具。它确实包括有限的跨浏览器功能,因为它仅适用于 Chrome、Firefox 和 Internet Explorer。主要优点是它还可用于自动化桌面应用程序。
优势之一是它具有 Eclipse Java Developer Toolkit 编辑器,这让你的团队可以轻松地使用 Eclipse 在 Java 中编写测试脚本。自带的 IDE 工具箱编辑器包含以下功能,如代码自动完成和高级调试选项。
将 IBM Rational Functional Tester 与 CI/CD 系统集成可能会很困难,因为它被设计用在你自己的工作站上
9、Jest
Jest 是一个 JavaScript 框架,允许你通过 jsdom 访问 DOM。
值得一提的是,jsdom 只是浏览器工作方式的一个近似值,用于 React 应用程序的测试框架,但不是跨浏览器测试的可靠选择。
Jest 确实提供了良好的迭代速度,并且具有强大的功能,例如模拟模块和计时器。
理想情况下,开发人员应使用它来测试某些组件,但结果不能保证该应用程序在实际的浏览器中可以正常工作。
10、Cucumber
Cucumber 是一个开源的行为驱动测试工具,支持多种编程语言,包括 Ruby,Java,Scala 和 Groovy。
创建测试案例需要编程技术。实际功能可以通过使用 Gherkin 来调用。
使用 Cucumber 的明显优势是,非技术用户可以轻松理解这些方案。
可以说 Cucumber 并不是 Selenium 的替代品,而仅仅是对 Selenium 进行了一层包装。
Selenium 和 Cucumber 的组合可提高代码的可读性,并使其更易于重用组件。