众所周知,优秀的自动化测试工具可以让用户在采用DevOps或Agile的过程中,为团队的自动化提供良好的支持。因此在面对用户需要以更快的速度、交付出更高质量的软件产品时,许多企业自然会通过搜寻各种自动化测试工具,以满足他们在持续集成和DevOps方法论方面的需求。
本文向您介绍20种自动化测试工具与库,其中包括一些对于自动化测试、单元测试、以及各种其他类型测试需求非常实用的工具。希望它们能够对您的项目有所帮助。
1.Selenium
Selenium由如下三个工具组成:
Selenium WebDriver能够让用户就像在本地或远程使用Selenium服务器那样,在本机上驱动浏览器,以实现基于浏览器的自动化测试。
Selenium Grid是一个智能代理服务器。它允许用户将测试命令路由到远程Web浏览器的实例上。同时,它能够提供一种能够在多台计算机上并行运行测试的简便方法。
Selenium IDE可以被用于Web的开源记录和回放自动化测试。
许可证:开源
2.Appium
Appium是一款开源、且跨平台的自动化测试工具。它适用于原生的移动Web、以及混合式的桌面应用。Appium支持iOS模拟器、Android模拟器、以及各种类型的实际设备,包括:iOS、Android、Windows和Mac。
由于在默认情况下,Appium不包含任何驱动程序。因此任何人都可以通过Appium 2.0的构建方式,创建和发布某个驱动程序。也就是说,驱动程序的版本维护与Appium的版本并无直接关系。同时,Appium提出了一个基于插件的生态系统。在该生态系统中,用户可以在真实的Appium命令之前、或之后任意添加各种插件功能。
许可证:开源
3.Taiko
Taiko是由来自ThoughtWorks的团队,所构建的、免费开源的浏览器自动化工具。作为一个Node.js库,Taiko具有清晰而简洁的API,可以自动化诸如Chrome、Microsoft Edge、以及Opera等浏览器。通常,用Taiko编写出的测试程序,具有很高的可读性和可维护性。
用户可以使用ChromeDevtoolsProtocol,让Taiko专注于围绕着UI的功能,进行自动化测试。Taiko的功能可以通过各种插件来进行扩展,其中包括:
Taiko-accessibility是一种测试网站可访问性的Taiko插件。
Taiko-android是一种在Android设备和模拟器上运行网络测试的Taiko插件。
Taiko-diagnostics是一种提供诸如:测量速度、网页性能指标等诊断功能的Taiko插件。
许可证:开源
4.TestProject
TestProject是一个免费的端到端自动化测试平台,可被用于Web、移动和API等测试。基于Selenium和Appium等开源工具构建的TestProject,能够得到自动化测试社区的支持,其中包括:轻松地编写脚本、协作测试脚本、以及智能测试记录器等的附加组件。
作为一个开源的平台,TestProject具有强大且齐全的功能,可供任何人免费使用。另外,TestProject也能够轻松地支持诸如Windows、macOS、Linux、iOS、Android、Web服务等平台。
TestProject有着一些不错的特有功能,其中包括:iOS和Android设备的屏幕镜像、元素检查器与资源管理器、报告仪表板与智能测试记录器等。同时,其支持社区也通过使用TestProject SDK,构建出了一些附加的组件。其中包括:NLP引擎、RESTful客户端、Android权限管理器等,它们都可以通过浏览器记录器的形式、或直接在测试类中被使用到。
许可证:免费
5.WebdriverIO
WebdriverIO是一款基于JavaScript的自动化测试框架。它能够让您基于Webdriver协议和Appium自动化技术开展测试。它不但支持常用的BDD/TDD(行为驱动开发/测试驱动开发)测试框架,也能够使用Sauce Labs、BrowserStack或TestingBot,在本地或云中运行各种测试。
作为一款被广泛使用的自动化测试框架,WebdriverIO在开发人员和测试人员中非常流行。它能够提供的服务包括:
@ wdio / appium-service是一种用于启动和停止Appium服务器的WebdriverIO服务。
@ wdio / applitools-service是一种用于针对Applitools进行视觉回归测试WebdriverIO服务。
@ wdio / devtools-service是一种WebdriverIO服务,可让您在测试中运行Chrome DevTools命令。
@ wdio / firefox-profile-service是一种可以让您在wdio.conf.js中定义Firefox配置文件的WebdriverIO服务。
许可证:开源
6.Applitools
Applitools是一款针对应用程序可视化管理,以及基于AI的可视化UI测试与监控的软件。Applitools能够自动在每个应用程序、浏览器、操作系统、以及屏幕尺寸上,进行大规模的功能性和视觉测试。
利用现有的测试,Applitools可以基于AI的认知视觉,实现自动化的测试维护、跨设备和浏览器的测试、以及视觉测试的管理和分析。最近,Applitools推出了Ultrafast Grid,可用于大规模的、跨浏览器的并行多视口(viewport)测试。
7.Cypress
Cypress可谓专为现代网络打造的下一代前端测试工具。Cypress可以被用来编写单元测试、端到端测试、以及集成测试。它可与用户的应用程序在同一个运行循环中被执行。作为一个节点服务器的进程,Cypress可以在这两个进程中,始终保持相互通信,并同步执行各项任务。当然,Cypress也有一定的局限性,它能够支持的测试框架比较有限,调试起来也非常困难。另外,在同一个测试中,Cypress无法在不同的来源或域之间,实现跨域的iframe。
值得一提的是,Cypress测试库,具有简单而完整的自定义Cypress命令和实用程序,可被用户用来培养良好的测试习惯。
许可证:开源
8.Pact
Pact是一种代码优先(code-first)类型的工具,可以通过contract test来测试各种HTTP和消息集成。也就是说,使用Pact,我们可以contract的形式(即库的名称)定义给定提供者(provider,可以是一种HTTP REST服务)的消费者(consumer)期望。此处,消费者驱动类型的contract也是一种从消费者的角度驱动提供者开发的模式。
许可证:开源
9.REST-assured
REST-assured是一种Java DSL(Domain-specific language),它构建于HTTP Builder之上,可被用于简化针对基于REST服务的测试。它能够支持POST、GET、PUT、DELETE、OPTIONS、PATCH和HEAD等请求,可用于验证和确证此类请求的响应。
旨在简化REST API测试与验证的REST-assured,受到了Ruby和Groovy等动态语言在测试技术方面的影响。因此,该工具库为标准的HTTP操作提供了可靠的支持。
许可证:开源
10.OWASP ZAP
作为一款开源的Web应用安全扫描程序,OWASP ZAP适合于应用安全的新手和专业渗透测试人员。ZAP提供了丰富的测试功能,适用于各种主要操作系统、以及Docker版本。它是目前最流行的开放式Web应用安全项目,其核心是所谓的“中间人代理”。也就是说:它位于测试人员的浏览器和Web应用程序之间,以便拦截和检查两者之间往来的消息,进而按需修改内容,将新的数据包转发到目标位置上。而且,它既可以用作独立应用程序,又可以被当作守护进程被使用。
许可证:开源
11.JMeter
Apache JMeter是一款纯Java应用的开源软件,它能够测试各项功能的行为,以衡量其性能。JMeter最初是为测试Web应用而设计的。不过,如今它已经扩展到了其他功能性测试场景中。Apache JMeter的主要功能包括:
能够针对多种不同的应用程序、服务器、协议类型等开展负载和性能测试。
具有功能齐全的Test IDE,能够快速地记录来自浏览器、或本机应用的测试计划、构建和调试。
完整的多线程框架既允许通过多个线程进行并发采样,又能够通过单独的线程组,同时对不同的函数进行采样。
能够缓存、脱机分析、并重放各种测试结果。
能够从HTML、JSON、XML或任何文本格式中提取数据,并轻松地进行关联。
许可证:开源
12.Gatling
Gatling是一个基于Scala、Akka和Netty的开源式负载和性能测试框架。它能够支持HTTP、WebSocket、服务器发送事件(Server-Sent-Events),以及JMS。
Gatling不会为每个用户分配单独的线程。相反,所有的多线程都是通过参与者之间的消息(并发计算)来完成。也就是说,该消息允许仅使用单个线程来模拟一系列用户。
Gatling不但拥有断言和人类可读的测试,还能够提供开箱即用的详细指标仪表板。此外,通过Taurus,Gatling还能够提供可配置的测试执行和详细的实时在线报告。
许可证:开源版本和企业版本。
13.Terratest
Terratest是一个Go库,能够对Terraform、Packer、Docker、Kubernetes、AWS、以及GCP等提供一流的支持。同时,它为常见的基础架构测试任务提供了多种帮助类程序功能和模式,其中包括:
测试Terraform的代码。
测试Packer的模板。
测试Docker的镜像。
通过SSH在服务器上执行命令。
与AWS、Azure、GCP和Kubernetes API的协同。
测试Helm Charts。
发出HTTP请求。
运行shell命令等。
14.Axe-Core
作为测试引擎,Axe可被用于测试网站和其他基于HTML界面的可访问性。它不但快速、安全、轻巧、而且能够与任何现有的测试环境进行无缝集成,因此您可以在进行常规功能性测试的同时,自动执行可访问性的测试。
借助Axe,开发人员可以在任何主流的浏览器、工具和测试环境中,将可访问性作为单元测试、集成测试、以及功能测试的一部分来予以执行。
Axe不但能够与现有的功能测试或验收测试相集成,而且可以通过评估上下文来自动确定需要运行的规则。此外,Axe还能够支持内存中(in-memory)的固定、静态固定、集成测试、无限深度iframe,以及具有高度可配置性。
许可证:开源
15.Testcontainers
作为一个Java库,Testcontainers能够支持各种JUnit测试。它提供常见的数据库、Selenium Web浏览器、以及能够在Docker容器中运行的轻量级一次性实例。通过Testcontainer,您可以轻松地开展数据访问层集成测试、应用程序集成测试、以及UI接受性测试。
许可证:开源
16.Jest
Jest是一款简单的JavaScript测试框架。它通过协助执行快照测试,以检测出UI中的任何意外更改。Jest既不会存储UI的图像截图,也不会执行图像的比较,而是会在快照文件中存储被测React组件的标准输出版本。
通常,快照文件与单元测试会一起被提交。在后续的测试中,测试框架将其与既有组件的输出进行比较。如果测试失败,Jest则会显示出预期结果与实际输出之间的差异。
许可证:开源
17.Locust
Locust是用Python编写的一种可扩展的用户负载测试工具。作为一款易用的分布式测试工具,Locust能够通过对网站(或其他系统)产生负载,以确认目标系统能够处理的并发用户数。
在测试期间,该工具可以模拟“一群蝗虫”攻击目标网站。您可以定义每个“蝗虫”(如:测试用户)的行为,并能够通过Web UI来实时监视群集的整个过程。此举可以协助您在允许真正的用户使用之前,事先测试并发现代码中的瓶颈。目前,Locust的功能包括:测试分发和可扩展性。作为一种轻量级的过程,它不像市场上的其他工具那样用到了回调(callback),而是采用专用的Web服务器发布测试结果。
许可证:开源
18.Pywinauto
pywinauto是一个功能强大的Python模块,可被用于自动执行Windows GUI的应用。它允许用户将鼠标和键盘事件发送到Windows的对话框和控件中。相对于广为大家所熟悉的Sikuli或Appium等Windows驱动程序,pywinauto拥有强大的社区支持,并能得到持续的模块维护。
Pywinauto既可以灵活、且隐式地等待对话框的初始化(使用的是默认超时),也可以显式地使用专用的方法和函数,来简化并加固程序代码。
许可证:开源
19.Burp Suite
Burp Suite是一个用于执行Web应用安全性的集成测试平台。它的各种工具可以无缝地协同工作,以支持整个测试过程,进而对应用攻击面的初始化映射进行分析,发现那些可能被利用安全漏洞。
此外,Burp Suite的其他特性还包括:目标站点的地图功能,使用Spider爬取Web应用程序,处理Web请求,以及对数据进行解码和编码。
许可证:开源版、专业版和商业版
20.GTXiLib
GTXiLib是一款用于iOS的Google辅助功能工具集。其中,GTX-eye是用于iOS辅助功能测试的框架。它能够与EarlGrey等基于XCTest的框架无缝集成。用户可以将现有的XCTests集成到GTXiLib中,以实现在无需修改大量代码的情况下,执行可访问性的检查。而此类检查主要关注的是屏幕上元素是否存在可访问性标签。
通过将GTXiLib安装到单个测试用例、测试类、以及特定的测试子集中,您可以自由地添加各种可访问性测试。这将有助于用户在大型项目中逐步推进可访问性的勘察。另外,您还可以根据GTXiLib所提供的简单API,按照目标应用的特定需求,自定义创建检查测试的关键点。