API(应用程序编程接口)测试是一种直接在API级别执行验证的软件测试。它是集成测试的一部分,它确认API是否满足测试人员对功能、可靠性、性能和安全性的期望。与UI测试不同,API测试是在没有GUI层执行操作的。

API测试技巧

Web API有两大类Web服务:SOAP和REST。SOAP(简单对象访问协议)是W3C标准定义的一种标准协议,用于发送和接收Web服务请求和响应。REST(表示状态传输)是使用HTTP的基于Web标准的体系结构。与基于SOAP的Web服务不同,没有针对RESTful Web API的正式标准。

以下是API测试的10条基本技巧:

了解API要求

在测试API之前,需要回答以下问题以彻底了解API的要求:

  • API的功能是什么?业务流程是什么?使用场景是什么?

通常,应用程序的API用于对资源进行操作。它们常用于读取,创建,更新。了解API的用途将为输入和输出准备好测试数据奠定坚实的基础。此步骤还可以帮助您定义验证方法。例如,对于某些API,您将针对数据库验证响应。对于其他一些,最好根据其他API来验证响应。

例如,“创建用户” API的输出将是“获取用户” API的输入以进行验证。“获取用户” API的输出可以用作“更新用户” API的输入,依此类推。

指定API输出状态

您需要在API测试中验证的最常见的API输出是响应状态代码。

新API测试人员熟悉验证响应代码是否等于200以确定API测试是通过还是失败。这不是错误的验证。但是,它并不反映API的所有测试方案。

在通用标准中,所有API响应状态代码均分为五类。状态码的第一位数字定义响应的类别。后两位没有任何类别或分类作用。

第一位数有五个值:

  • 1xx(信息性):收到请求并继续进行处理
  • 2xx(成功):成功接收,理解并接受了请求
  • 3xx(重定向):需要采取进一步的措施来完成请求
  • 4xx(客户端错误):请求包含错误的语法或无法实现
  • 5xx(服务器错误):服务器无法满足看似有效的请求

API的实际响应状态代码由构建API的开发团队指定。

专注于小型功能性API

在测试项目中,总是有一些简单的API,只有一个或两个输入,例如登录API,获取身份令牌API,运行状况检查API等。但是,这些API是必需的,被视为进入其他业务的“门API”。首先关注这些API,将确保API服务器,环境和身份验证正常工作。

还应该避免在一个测试案例中测试多个API。如果发生错误,这是很痛苦的,因为您将不得不按顺序调试API生成的测试数据。保持测试尽可能简单。在某些情况下,如果需要调用一系列API来实现端到端测试流程,这些任务应该在所有API都经过单独测试之后完成。

分类API

一个测试项目可能有几个甚至数百个用于测试的API。强烈建议将它们分类,以更好地进行测试管理。它需要采取额外的步骤,但是将大大帮助您创建具有高覆盖率和集成度的测试方案。

同一类别的API共享一些公共信息,例如资源类型,路径等。以相同的结构组织测试将使您的测试在集成流程中可重复使用和扩展。

利用自动化功能进行API测试

尽可能早地利用自动化进行API测试。以下是自动化API测试的一些重要好处:

  • 测试数据和执行历史记录可以与API信息一起保存。这使得以后重新运行测试变得更加容易。
  • API测试稳定且较少更改。API反映了系统的业务规则。API的任何更改都需要明确的要求;因此,测试人员始终可以及时了解更改并进行调整。
  • 与Web UI测试相比,测试执行速度要快得多
  • API测试被视为灰盒测试,用户可以在其中发送输入数据并获取输出数据以进行验证。数据驱动方法的自动化(即在同一测试场景中应用不同的数据集)可以帮助增加API测试覆盖率
  • 数据输入和输出遵循某些特定的模板或模型,因此您只能创建一次测试脚本。这些测试脚本也可以在整个测试项目中重复使用
  • API测试可以在软件开发生命周期的早期进行。具有模拟技术的自动化方法可以帮助在开发实际的API之前验证API及其集成。因此,减少了团队内部的依赖性。

选择合适的自动化工具

利用API测试的自动化功能的另一步骤是从市场上的数百种选择中选择最合适的工具或一组合适的工具。选择API自动测试工具时,应考虑以下一些标准:

  • 该工具是否支持测试您的AUT(被测应用程序)正在使用的API / Web服务类型?如果您在AUT使用SOAP服务时所选的工具支持测试RESTful服务,则没有任何意义。
  • 该工具是否支持您的AUT服务所需的授权方法?以下是您的API可以使用的一些授权方法:No Auth、Bearer Token、Basic auth、Digest Auth、NTLM Authentication、OAuth 1.0、OAuth 2.0、Hawk Authentication、AWS Signature。这是一项必不可少的任务,因为你无法在未经授权的情况下开始测试API。
  • 该工具是否支持从WSDL,Swagger,WADL和其他服务规范中导入API / Web服务端点?这是一项可选功能。但是,如果您要测试数百个API,这一点非常重要。
  • 该工具是否支持数据驱动的方法?这也是一项可选功能。
  • 最后但并非最不重要的一点是,除了API测试之外,您是否还需要执行其他类型的测试,例如WebUI或数据源?API测试在数据源和UI之间的业务层执行。所有这些层都必须进行测试是正常的。支持所有测试类型的工具将是理想的选择,这样您的测试对象和测试脚本可以在所有层之间共享。

选择合适的验证方法

当响应状态代码告诉请求状态时,响应主体内容就是API通过给定输入返回的内容。API响应内容因数据类型和大小而异。响应可以是纯文本,JSON数据结构,XML文档等。它们可以是简单的几个单词的字符串(甚至为空),也可以是一百页的JSON/XML文件。因此,必须为给定的API选择合适的验证方法。

通常,有一些验证API响应正文内容的基本方法:

  • 将整个响应正文内容与预期信息进行比较,此方法适用于具有静态内容的简单响应。日期时间,增加的ID等动态信息会在断言中引起麻烦。
  • 比较响应的每个属性值,对于JSON或XML格式的响应,很容易获得给定键或属性的值。因此,此方法在验证动态内容或单个值而不是整个内容时很有用。
  • 比较匹配与正则表达式,与验证单个属性值一起,此方法用于验证具有特定模式的数据响应以处理复杂的动态数据。

每种验证方法都有其优点和缺点,并且没有“一刀切”的选项,需要选择最适合您的测试项目的解决方案。

创建正面和负面的测试

API测试需要正向测试和反向测试,以确保API正常运行。由于API测试被视为一种灰盒测试,因此两种类型的测试均由输入和输出数据驱动。

正向测试

  • 验证API是否已接收输入并按要求中指定的那样返回预期的输出。
  • 验证是否按要求指定返回了响应状态代码,无论它返回的是2xx还是错误代码。
  • 用最小的必填字段和最大的字段指定输入。

反向测试

  • 当预期的输出不存在时,请验证API是否返回了适当的响应。
  • 执行异常输入验证测试。
  • 使用不同的授权级别验证API的行为。

现场测试流程

建议在测试过程中安排每天的API测试执行。由于API测试执行快速,稳定且足够小,因此很容易以最小的风险将更多测试添加到当前测试过程中。这只有通过具有以下功能的自动API测试工具才能实现:

  • 使用内置测试命令进行测试计划
  • 与测试管理工具和缺陷跟踪工具集成
  • 与各种领先的CI工具进行持续集成
  • 可视日志报告生成

测试过程完成后,每天都可以得到这些测试的结果。如果发生失败的测试,则可以立即检查输出并验证问题以找到适当的解决方案。

不要小看API自动化测试

API测试流程非常简单,只需三个主要步骤:

  • 发送带有必要输入数据的请求
  • 获取具有输出数据的响应
  • 验证响应是否按要求返回

API测试最重要的部分既不是发送请求也不是接收响应。它们是测试数据管理和验证。通常,测试一些第一个API(例如登录,查询一些资源等)非常简单。因此,API测试任务很容易被低估。在常规手段方法无法达到你的目的时,使用编程技能可以极大拓展API测试的边界。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

非技术文章精选

初学者的API测试技巧的更多相关文章

  1. [翻译] API测试最佳实践 - 组织你的测试

    组织你的测试 适用级别:初学者 在最底层,一个测试步骤(Test Step)用来验证一个单独的操作.组合若干测试步骤到测试用例,允许你验证那些被分隔出来的一个一个的功能,这些功能是应用程序所需要的.接 ...

  2. Sentry 开发者贡献指南 - 测试技巧

    作为 CI 流程的一部分,我们在 Sentry 运行了多种测试. 本节旨在记录一些 sentry 特定的帮助程序, 并提供有关在构建新功能时应考虑包括哪些类型的测试的指南. 获取设置 验收和 pyth ...

  3. API测试

    API(Application Programming Interface)包含: 单元测试(Unit Testing).模块测试(Module Testing).组件测试(Component Tes ...

  4. 使用python+pychram进行API测试(接口测试)初级STEP 1

    花了一天时间安装了解了下最基本的python+pychram进行API测试,下面这个可以指导自己以后入门:基本的开发级别还需要学习 1.python下载地址:https://www.python.or ...

  5. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载

    [Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...

  6. 接口API测试和返回值JSON解析的插件

    火狐插件1.   HttpRequest作用:接口API测试例子:http://192.168.10.61:8080/ZHCS/user/loginApp.do?phone=admin&pwd ...

  7. asp.net web api 测试帮助页面建立并测试

    asp.net web api 测试帮助页面建立并测试 现在使用WEB API来开发,越来越流行. 在开发过程中的测试调试,可以使用Fiddler等工具来帮助测试外,还有: 在asp.net 中有种方 ...

  8. Aliexpress API 测试工具

    Aliexpress API 测试工具 上回简单说了 Aliexpress API 的认证流程, 这回在奉送一个小工具, API 测试工具. 点我下载 做这一行,和做程序员的生活完全不搭调, 格格不入 ...

  9. API测试自动化——基于CDIF的SOA基本功能(实例篇)

    今天我们通过一些实例来体验一下API的自动化测试,感受一下基于CDIF的SOA的一些基本功能. 传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的 ...

随机推荐

  1. oracle避免使用耗费资源的操作

    带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需 ...

  2. phpstorm 中git 的使用

    phpstorm 是一款不可多得的IDE 环境,它既是一款强大的编辑器,还是一款调试器,同时还是一款git 可视化管理工具哟,phpers 值得拥有.今天介绍的是他不为人知的强大功能 —— git. ...

  3. vue+vant 购物车的全选和反选

    https://blog.csdn.net/wjswangjinsheng/article/details/91392694

  4. Python--day30--tcp协议(建立链接三次握手,断掉链接四次挥手)和UDP协议

    TCP协议: tcp是可靠的,面向连接的.建立全双工通信. 建立链接的三次握手 链接一旦建立一定是全双工工通信,必然是双方通信. UDP协议: TCP协议和UDP协议的对比: QQ使用的是UDP,因为 ...

  5. PHP+MySQL实现对一段时间内每天数据统计优化操作实例

    http://www.jb51.net/article/136685.htm 这篇文章主要介绍了PHP+MySQL实现对一段时间内每天数据统计优化操作,结合具体实例形式分析了php针对mysql查询统 ...

  6. 2018-8-10-WPF-好看的矢量图标

    title author date CreateTime categories WPF 好看的矢量图标 lindexi 2018-08-10 19:16:53 +0800 2018-5-16 11:4 ...

  7. HashMap和HashSet的使用,区别。集合,Array、Collection(List/Set/Queue)、Map

    HashMap和HashSet的区别 HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collectio ...

  8. 【js】vue 2.5.1 源码学习(二) 策略合并

     一.  整体思路     1 首先是代码的大体构造,先判断引入代码的环境,即对应amd 和cmd的处理     2 vue_init 需要借助 initMinxin    ==>>> ...

  9. 配置DNS代理

  10. js 设置当前时间的后24小时、后一小时等相对时间

    不管是设置相对当前时间有多久时间差的时间,思路:先获取当前时间的时间戳,再根据需求加减时间获得新的时间戳,然后取年月日与时分秒.实例: // 设置默认时间——先转化为毫秒数,加上 24 小时的毫秒数, ...