当我们大谈特谈基于人工智能和UI测试工具的好处时,基于人工智能和机器学习的API测试也同时到来。
1. 为什么要进行API测试?
随着越来越多的公司转向DevOps、持续集成(CI)和持续部署(CD),测试反馈需要比以往更快。仅仅关注UI自动化测试(它是出了名的慢)可能会扼杀我们的测试自动化工作。当我们确保快速、高质量地交付应用程序新版本时,API测试应该是整体自动化策略的一部分。API是当今软件开发的基础,尤其是随着越来越多的团队远离单体架构、开始采用微服务方法进行软件开发。随着微服务成为大多数新开发工作的支柱,API测试变得比以前更加关键。
2. API测试的障碍
考虑到API测试即将兴起,Joe Colantonio 在2014年就写过一本API测试的书——The UFT API Testing Manifesto: A step-by-step, hands-on testing guide for the masses。从2019年开始,每年都有2-3本接口测试的图书出版,也说明接口测试已引起大家足够的重视。接口测试本身的设计与执行并不困难,但如果考虑接口参数组合、从业务角度进行接口调用链的测试,人们还是遇到一些困难。其次,要想实现自动化测试,工作量也不小,特别是设置验证点,也无法自动生成,需要手工配置。这些,都成为借口测试的障碍。
3. 人工智能、机器学习可以帮上忙
为了降低API测试的复杂性,一些供应商已经创建了利用人工智能(AI)将手动UI测试转换为API测试的实用工具。这些工具就像嗅探器,使用机器学习(ML)自动发现模式,并在用户与应用程序交互时,它能发现不同服务之间的连接关系。随着AI/ML方法变得更加完善,我们能想象到API测试生成的复杂性将会显著降低。但AI/ML方法应用在API测试上,只有商业工具开始引入,还没有在开源API工具中看到这方面的能力,但不要因此而阻碍我们的学习,无论是现在还是未来的AI驱动API。
4. 11款优秀的API测试工具,希望能帮助你选择最适合自己的工具
1)REST-Assured
使用Java时,REST-Assured是进行API自动化测试的首选,也是许多人从事API测试的主要工具之一。
REST assured是一个流畅的Java库,可以用来测试基于http的REST服务。它在设计时考虑了测试,并且能与现有的、基于Java的自动化框架(如JUnit)集成起来。即使你不是HTTP专家,也可以使用REST-Assured 进行API测试。
它提供了一种类似于行为驱动开发(BDD)的DSL(特定领域的描述语言),使得用Java创建API测试变得简单。它还有很多内置的功能,这意味着我们不必从头开始编写代码。
其它优势:如果你使用Serenity自动化框架,你会喜欢与REST- assured无缝集成,这意味着你可以将UI和REST测试都组合在一个框架中,生成统一对、很棒的测试报告。
在Java中测试和验证REST服务,比在动态语言 (如Ruby、Groovy) 中更难。这是使用REST-Assured的另一个原因,因为它带来了在Java领域中使用这些语言的简单性。如果产品主要由Java代码开发,强烈推荐使用REST-Assured进行API测试。
2)Postman
有些人不希望在集成开发环境中使用与开发人员相同的语言编写代码。毕竟,如果开发人员不为自动化测试工作做出贡献,为什么要强迫自己使用开发人员的技术堆栈,而这对我们来说不是最好的选择?
有时,只是想要一个成本相对低的、快速而粗略的API测试,或者需要一个工具来帮助对API进行探索式测试。Postman在这样应用场景中是完美的选择,但它也足够强大,只要我们乐意,我们也能创建更集成的解决方案。
Postman是一个易于使用的REST客户端,可以通过利用它的Chrome插件快速开始使用它,也有支持Mac和Windows的客户端版本。
Postman有许多REST客户端没有的丰富界面,这使得它易于使用。它还可以让我们轻松地与同事分享使用技巧,因为可以打包所有请求和预期的响应,并将它们发送给其他人,以便他或她可以查看。
某休闲游戏公司使用Postman作为协作工具。据该公司的测试软件开发工程师说,他一个人负责研究并找出API的所有测试用例,然后他将该信息发布到wiki上,这样其他人就可以运行API测试,并确保他们所做的不会破坏现有的API功能。Postman甚至允许在公司内部网站上放置一个按钮——上面写着“在Postman中运行”,它会自动启动Postman测试。
如果测试团队不仅想测试API,而且还想拥有一个工具来帮助自动化一些探索性API测试工作,那么Postman是一个很好的选择。
3)Postwoman
Postwoman是Postman的另一种选择,是一个在过去几个月里越来越受欢迎的新工具。它有一个干净且现代的UI,使创建API请求快速和容易。
Postwoman因下列特点而闻名,在GitHub上获得了近1.5万颗星,说明它很受欢迎:
● 能够在线运行所有东西(不需要安装)
● 支持多平台和多设备
● 可以从任何地方访问它
● 高可定制性
如果需要开始测试API,并且不想在机器上安装臃肿的软件,那么就选这个工具。
4)SoapUI
如果我们面对复杂的API测试场景,并且侧重于专业的测试工程师来使用的API测试工具,SoapUI是值得首先试用的工具,它有下列优势:
● ReadyAPI使强大的REST API测试自动化变得容易
● 从API的服务描述生成测试,然后使用测试覆盖率特性动态分析功能测试覆盖率
● 数据驱动测试:使用外部数据源来模拟不同的用户行为
● 通过点击属性转换和断言加速API测试
● 快速生成针对所有API测试运行的安全扫描
SoapUI功能完备,可以满足API测试的全面需求(基于API的功能测试、性能测试和安全性测试等),而且可以从零开始生成完整的API测试方案。如果出于某种原因需要创建自定义工作流或功能,可以使用Groovy在SoapUI中编写解决方案。
5)JMeter
虽然JMeter是为负载测试而创建的,但许多人也将它用于功能API测试。
JMeter包括测试API所需的所有功能,以及可以增强API测试工作的额外特性。例如,JMeter可以自动处理3文件,这样可以快速为API测试生成惟一的参数值。它还能与Jenkins集成,因此可以在CI管道中包含API测试。
如果我们计划创建API功能测试,并希望在性能测试中利用这些功能测试,那么可以使用JMeter作为主要API测试系统,从而一举两得。
6)Karate
几年前由Intuit公司创造的Karate(https://intuit.github.io/karate),已经发展成为具有综合能力的测试框架,覆盖了API 接口功能测试、性能测试,并提供Mocks支持(mock API servers:API test Doubles),甚至支持UI的自动化测试,下面这张图就充分证实了这一点。
测试是使用BDD编写的,类似于Cucumber的语法,但与大多数BDD框架(Cucumber、JBehave、SpecFlow)不同的是:不需要编写步骤定义。Karate已经创建了开始测试api所需的所有步骤定义。
如果您是编程或自动化方面的新手,那么空手道很容易使用,因为您不需要任何Java知识。如果这是你的情况,Karate可能是完美的选择。
7)Citrus框架
Citrus框架(https://citrusframework.org/)于2009年9月发布,自那以后一直在稳步更新,现在最新版本是2.8。Citrus框架可以帮助我们为各类消息协议或数据格式自动集成测试,其优势有:
● 与REST、SOAP、HTTP、JMS、TCP/IP和其他协议一起工作。
● 使用Java或XML创建测试。
● 有很好的文档,完整的指导文件(600多页)。
如果我们计划测试REST services之外的其他headless技术,Citrus是比较好的选择。它可以处理任何headless协议,为所有非UI测试需求提供了优秀的解决方案。如果在企业环境中工作,并且需要测试许多不同类型的应用程序,那么这种灵活性是有益的。
8)PowerShell
你可能会问: “PowerShell?真的吗? ” 是的,真的。
随着在基于windows的组织中采用DevOps, PowerShell在从命令行自动化许多事情方面表现得非常出色。使用PowerShell进行API测试的一些好处是:
● 只需一行代码就可以导入Web服务描述语言。
● 只需要一行代码就可以发送请求并获得输出。
● 它是在所有的Windows机器上安装的,所以公司的所有员工都可以使用它。
● 很容易学。
● 它非常快,因为它从命令行运行,没有任何UI开销。
PowerShell是一个开源的微软产品。因此,任何时候想要使用命令行或自动化任何东西,比如Windows生态系统(或几乎任何微软产品)中的API测试,我们都应该使用PowerShell。
9)Insomnia
Insomnia (https://insomnia.rest)不仅有一个漂亮的界面、易于使用,而且是免费的,以及有下列这些优势:
● 创建HTTP请求
● 查看server 响应细节
● 有效组织测试过程
● 易于复用
● 生成的代码片段
10)Taurus
Taurus(https://gettaurus.org/)是一个友好的、持续测试的自动化框架,之前在2020年软件测试趋势报道:彻底实现持续测试 也提到过它。Taurus可以和JMeter集成,进行有效的API测试,其强大之处在于它允许我们用YAML(Yet Another Markup Language,一种人类可读且可编辑的方法,完成了巨大的飞跃)编写测试,也允许用简单的文本文件描述测试。实际上,可以用大约10行文本描述一个完整的脚本,这允许团队在YAML或JSON文件中描述所计划的测试。
Taurus的其他主要功能包括:
● 测试可读性更强,因此更容易执行代码审查,因为测试用例是用YAML编写的。
● 可以更有效地将性能测试整合到CI/CD管道中。
● 在JMeter、Locust、Gatling、Grinder和Selenium等工具之上提供了一种抽象层。
当团队想采用基于BDD的测试方法进行API测试工作时,Taurus非常适合。使用YAML文件可以提供清晰、易于阅读的测试,团队中的任何人都可以理解。
11)Fiddler
Fiddler能监视、操作和重用HTTP请求,还能做很多事情,如调试网站问题等。它有许多扩展功能,其中API测试就是其中的一个扩展,有很强能力验证web API的行为。对于更多的硬核API测试开发,使用FiddlerCore——NET类库来构建API测试基础设施。
对使用.NET语言的团队来说,Fiddler是一个很好的选择,因为可以使用.NET语言开发所要完成的测试。
是时候做出明智的选择
没有适合每个人的完美工具,因为每个组织都有不同的要求。实际上,上面列出的API测试工具都很不错,但是否适合你的环境,需要根据自己的需求、开发环境和产品特点等来进行选择,希望上述介绍有助于你做出最好的选择。
这些工具只是开源API测试工具的一小部分。你最喜欢哪一个?还缺少哪一个优秀工具?欢迎大家留言补充。