自动化测试工程师正生活在一个大变革的时代,API测试是任何严谨的自动化测试策略所必须的。
测试人员需要停止将所有精力集中在难以维护的UI自动化测试上。
敏捷测试和持续集成测试(CI/CD)困扰了标准的测试自动化实践,导致测试工程师重新思考如何实现自动化。
如果您想在测试自动化工作中取得成功,那么就需要了解API和API测试。
这是一本很长的指南,下面是我们将要介绍的内容的概述:
1.什么是API测试?
2.为什么API测试很重要
3. 什么是API测试金字塔
4. 什么是API负载测试
5. 如何选择API测试工具
6. 如何测试Web服务
7. Web服务测试术语
8. 什么是HTTP
9.什么是REST API
大家可以暂时忘掉GUI自动化测试。今天的自动化工程师需要从GUI的底层深入到API层。
API测试之所以重要有很多原因:
更多测试覆盖率
执行速度
持续集成和交付需要快速反馈
物联网(IOT)
在我们进入API测试工具和技术之前,让我们快速看看什么是API?
什么是API测试?
应用程序编程接口(API)是作为软件组件接口的规范。虽然大多数功能测试都涉及到测试网页或.NET表单等用户界面,但API测试会绕过用户界面并通过调用应用程序的API直接与应用程序通信。
API测试允许用户测试无头技术(Headless Testing),如JMS、HTTP数据库和Web服务。
例如,许多现代web应用程序的业务逻辑都存在于后端中,我们需要通过API来调用后台逻辑。当与前端交互时,正在对这些支持的微服务进行呼叫。因此,api允许应用程序的不同部分相互通信。
什么是无头测试
大多数无头测试包括绕过GUI,将请求直接发送到应用程序的后端或服务,并在验证响应的同时接收响应,以确保事情按您期望的那样工作
上面的例子通常被称为客户机/服务器关系。 客户端通过请求资源来发出请求,而请求出去寻找将满足请求的服务器。 服务器定位所需资源,然后将响应发送回客户端。
为什么API测试很重要?
随着敏捷开发成为大多数组织的标准,我们开发软件和自动化测试的方式发生了巨大的变化。在敏捷开发之前,自动化的大部分时间都是在图形用户界面(GUI)上完成的。这是像Selenium和UFT/QTP这样的工具可以处理的部分。
但是如果你已经做了很长时间的自动化测试,你就会知道这些类型的测试是多么耗时、脆弱和难以维护。
很多自动化测试书都是关于组织如何投入时间和精力来创建GUI测试自动化框架的,但随着时间的推移,这些框架的可靠性却变得令人沮丧,以至于人们不再使用它,软件变成了货架上的东西。
而且,用户界面的GUI自动化测试往往需要很长时间才能运行完成。对于某些敏捷实践(如连续构建CICD),当开发人员提交新代码时,从GUI回归测试套件接收反馈所需的时间是不可接受的。
API快速反馈
在这种情况下,需要更快的反馈。
bug发现得越早越好,因为开发人员立即知道他们所做的代码更改破坏了构建,需要查看。在测试驱动流程中,用户需要大量的测试集才能快速、频繁地运行,并且必须能够将它们集成到开发生命周期中。
别误会-GUI测试仍然非常重要;它是唯一真正测试用户在生产过程中如何体验应用程序的测试类型。某些缺陷只能由GUI测试捕获。换句话说,尽管GUI很重要,但它不应该是用户关注的唯一自动化类型,也不应该是用户创建的自动化测试总量中最大的一部分。
我刚才列出的所有原因都给了测试自动化一个不可靠、不值得努力创建的名声。现在你可能在想,“这太臭了!测试自动化不是敏捷实践的核心吗?!?“不用担心!幸运的是,敏捷关注的自动化类型是单元测试(以及更可靠的API低级测试),而较少关注GUI自动化
什么是API测试金字塔
在《敏捷:使用Scrum的软件开发》一书中,作者Mike Cohn介绍了测试自动化金字塔的概念:
这张图片与大多数非智力开发团队执行自动化测试的方式相反。
什么是GUI测试
GUI测试侧重于测试应用程序用户界面,以确保其功能正确。GUI测试位于金字塔的顶端,代表了应该创建的自动化测试类型总数的一小部分。
什么是单元测试
单元测试构成了金字塔的最大部分,形成了坚实的基础。创建单元测试是为了验证源代码的单个单元,就像方法一样。通过这样做,开发人员可以隔离代码中最小的可测试部分。单元测试是最容易创建的,并且产生最大的“回报”。由于单元测试通常是用与应用程序相同的语言编写的,开发人员应该很容易将它们添加到开发过程中。
什么是API测试
中间服务层是创建Rest-Assured和Postman等工具的“最佳点”。
服务测试也称为集成测试。集成测试的重点是验证许多小组件的交互可以集成在一起而不会产生问题。由于API测试绕过了用户界面,因此它们往往比GUI测试更快、更可靠。
最重要的是,由于API测试不依赖于UI来准备,所以可以在开发周期的早期创建它们。(好处:API测试——我将在本指南的示例中演示——实际上比GUI测试更容易创建!)
什么是API负载测试
API测试的另一个好处是,您可以利用相同的功能API自动化测试来进行性能测试。当我与BlazeMeter的人员交谈时,他们提到他们发现他们的客户群中有相当一部分人使用JMeter来运行负载测试,这些测试中只有一个用户,甚至可能有一个迭代。
这给了他们一个想法来创建他们所称的API功能测试。
其基本思想是,您正在使用BlazeMeter之类的服务进行性能测试,但是在您针对您的API运行大规模负载测试之前,您需要确保它实际上能够正常工作。因此,您需要先进行功能测试,然后再进行性能测试。
因此,API脚本是性能测试工作流中的一大优势。
使用性能测试来帮助进行API测试也是很常见的。下面是一个使用LoadRunner测试web服务的示例
如何选择API测试工具
有许多工具可以帮助您实现API测试自动化。
很多时候,我从测试工程师那里得到这样的问题:他们是否可以使用Selenium来测试API。答案是否定的。
由于Selenium只是用于基于浏览器的测试,您可能想知道使用哪种工具进行基于Rest和soapweb服务的测试?
要获得令人敬畏的API测试工具的完整列表,请查看以下大神整理关于REST&SOAP服务的20个开源API测试工具的文章:
https://nordicapis.com/top-25-api-testing-tools/
有一个最忠告的是合适自己项目或者自己系统的工具才是最好的工具,工具的功能不在于多,在于满足要求。
如何测试Web服务
我经常被问到这样一个问题:“我如何开始测试web服务?“我经常给出的答案可能会让你大吃一惊——就像你测试任何其他应用程序一样!一般来说,正常功能测试的最佳方法与web服务相同(除了与大多数其他应用程序不同的是,web服务没有GUI用户界面)。
因此,您可以放心地了解您一直使用的功能测试技术仍然适用。只需将web服务看作没有IDE的业务流程,并相应地编写测试用例。
自动化web服务时要问一些好问题:
·服务是否以正确的值响应?
·行为是否符合最终用户的预期要求?
·服务以多快的速度向用户发送响应?
·服务能否处理预期和意外的用户负载?
·服务能否处理无效值和由坏数据引起的异常?
Web服务测试术语
对于大多数测试人员来说,最大的障碍是适应在谈论Web服务时使用的术语。
例如:
什么是XML
XML是一种创建标记语言的方法,您可以使用它定义自己的标记。XML允许用户与许多系统共享结构化数据,包括通过internet。
什么是WSDL
wsdl是一种XML格式,它告诉您如何访问web服务。(大多数测试工具读入WSDL并提供与之交互所需的所有信息。)
什么是SOAP
SOAP(Simple Object Access Protocol)是一种协议,它使用XML格式来交换来自Web服务的信息。
什么是SOA
SOA(面向服务的体系结构)是一种公司可以组织软件的方式,这些软件可以快速改变以响应市场的需求。Web服务是在网络中运行的小型软件单元。 它们通常用于处理特定的业务流程。 Web服务可以以多种方式串在一起,并被不同的应用程序用于创建所需的功能。
什么是REST或RestfulAPI
REST(representationalstateoftransfer)是开发使用HTTP协议的web服务的一个轻量级选项,这使得它比使用SOAP协议的web服务更简单,开销更小。
我相信,一旦上述术语被揭开神秘面纱,测试web服务的工作就相当简单了。我也觉得解开谜团的最好方法就是把它分解成简单的,实际操作的例子——这就是我在这本书中要采用的方法。现在,让我们看看如何调用http://webexerviceX.net网站.
什么是HTTP
HTTP是一种通过网络传输消息的通信协议。HTTP也称为无状态协议,因为它发出的每个请求都独立于以前的所有请求。
Cookie用于跟踪会话的前一个请求的状态。Cookie是存储在客户端上的文件,其中包含从HTTP头信息添加到其中的信息。当向用户已经访问过的网站发出请求时,存储在cookie中的信息会被发送回浏览器。这样,网站就能记住用户以前的活动。
了解HTTP将为我们理解API测试工具的大部分功能提供良好的基础。
在接下来的几个例子中,我们将使用大部分免费的REST客户机。按照简单的安装说明进行操作https://www.rest/download/
如何发出HTTP请求
·选择新的请求选项
·将请求命名为HTTPDemo并选择GET选项
·在“获取”字段下输入:https://testguild.com
·点击发送按钮
·应返回状态码200 OK
·要查看原始数据,请单击时间线选项卡
什么是HTTP请求
HTTP客户端请求由三个主要部分组成。他们是:
1) 请求行(HTTP方法)–它告诉服务器正在发出什么类型的请求。在上面的示例中,我们发出了一个GET请求,但是根据需要发出的请求的类型,您可以使用更多的请求。HTTP方法具有以下选项(前四种方法是最常见的):
·GET–从指定来源检索数据
·POST–将新数据发送到指定的源
·PUT–更新指定来源的信息
·DELETE-从指定来源删除数据
·TRACE–要求代理声明自己
·OPTIONS –询问服务器上可用选项的信息
·HEAD–类似于GET请求,但只发送有关文档的信息
·CONNECT–当客户端必须使用HTTPS服务器时使用
2) Header–包含要发送到服务器的其他信息,如浏览器、操作系统、接受和Cookie信息。不同类型的标头包括:
·General-包含当前时间等信息的可选标题
·Request-向服务器提供有关客户端的更多信息
·Entity-包含有关正在发送的文档的特定信息,如长度和编码方案。
3) Body–包含用于需要它的方法的数据,如PUT方法。在我们的示例中,Get方法是空的。
从服务器返回的响应还包含三个部分,如我们所看到的HTTP请求:
·响应线(状态代码)
·标题信息
·包含响应中所有文本的正文
什么是HTTP状态代码
在我们的例子中,状态码是200,这意味着一切正常。根据原始请求发生的情况,状态代码会有所不同。
可以从服务器返回的状态代码为:
·1xx–100-199范围内的响应表示服务器正在处理请求。1xx代码为un
·2xx–200-299范围内的响应表示请求成功。
·3xx–300-399范围内的响应意味着未执行请求–需要采取进一步行动。
·4xx–400-499范围内的响应意味着请求不完整,可能需要更多信息。
·5xx–500-599范围内的响应表示服务器遇到错误。
什么是RESTAPI?
REST(representationalstateoftransfer)是使用HTTP协议开发web服务的一个轻量级选项,这使得它比使用SOAP协议的web服务更简单,开销更小。
当一个API遵循REST架构时,它被称为restapi。当一个服务是围绕一个REST标准设计的时,它被称为使服务“RESTful”。web服务被认为是RESTful的主要要求是它必须:
·拥有独立的客户机和服务器
·使用HTTP
·无国籍
restapi由一堆或多个资源组成;这称为资源模型,它使用统一资源标识(uri)。URI语法允许您指定从restapi返回所需信息的查询。休息系统的主要元素包括:
·资源是来自客户机的请求,它希望从主机获得什么—比如网页或数据库记录。
·资源标识符是命名资源的URI。
·表示是当服务器以完成的格式发送带有资源的响应时。
restapi测试(如何创建restapi测试)
对于我们的REST测试示例,我将使用斯瓦皮公司
·创建一个新项目
·称之为RestDemo并选择type GET
·在“获取”字段中输入:https://swapi.co/api/people/10
·点击发送
在预览窗格下,我们得到的不是HTTP示例中的网站视图,而是JSON。
星球大战API的结果对你来说可能很奇怪。
到目前为止,我们只使用了返回XML的服务;现在,我们将首先了解一下使用返回JSON的服务的感觉。
也许是我,但每次听到“JSON”这个词,我脑海里都浮现出恐怖电影《13号星期五》中杰森的可怕形象,而不是享受一种宁静的感觉。
但实际上,JSON只是另一个无害的技术缩写,你很快就会发现它没什么可怕的。
什么是JSON?
JSON代表JavaScript对象表示法,是一种轻量级的数据交换格式。JSON正变得越来越流行,并且在某些情况下正在取代XML进行API数据交换。现场http://www.json.org描述如何在两种结构上构建JSON:
1.“名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组来实现的。
2.“值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的。”
到目前为止,我们已经看到了如何执行标准GET。
接下来,让我们看看如何使用REST实际发布数据
如何验证restapi测试
正如我们前面讨论的,有很多方法可以验证REST响应。这完全取决于您使用的测试工具。此外,工具的选择范围可以是在编程语言(如rest assured for java)中使用的库,也可以是来自Microfocus UFT API等供应商的成熟供应商API测试工具。
例如,下面是如何使用开放源代码解决方案(如soapui)创建restapi测试。
下面是一个使用类似BDD的方法测试restapi的示例。
对于测试REST-ful web服务的更具编程性的方法,这里是一个使用REST-assured.REST-assured的示例,它是一个流畅的Java库,可以用来测试基于HTTP的REST服务。它的设计考虑到了测试。
·放心开始
·测试JSON REST服务,并确保;给定,何时,然后
·使用Rest-Assured以Rest-Assured发布到JSON Rest服务
正如我在一开始所说的,这并不是对API测试自动化的详尽研究;我的目标是为您提供足够的信息,帮助您快速开始测试并创建您自己的自动化。
我希望我实现了那个目标。
如果你觉得有什么必要告诉我。
版权声明:本文由[筋斗云Tester]发表于https://zhuanlan.zhihu.com/p/351046639 如有侵权,
请联系[commuinty@eolink.com](mailto:commuinty@eolink.com)删除。