首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试后端API?

如何测试后端API?
EN

Stack Exchange QA用户
提问于 2013-09-05 05:45:07
回答 6查看 56.8K关注 0票数 15

我当时正在申请QA职位,SDET问我这个问题:

如何测试后端API?

在面试中。

我不确定我的回答是否正确。只是想知道我能不能从别人那里得到一些信息。

EN

回答 6

Stack Exchange QA用户

发布于 2013-09-05 16:30:44

如何测试API取决于很多事情。API是由外部人员/系统使用的公共API,还是更大的产品基础结构的一部分?API是一个通用术语,有时用于描述从COM接口到可以引用的DLL或JAR到REST web服务的任何内容。可以使用不同的方法来测试这些不同的东西。

通常,如果API是基础结构的一部分,您可以通过单元测试和使用它的产品对其进行彻底的测试。

如果它是一个外部可消费的API,那么您需要更彻底地使用它,因为人们使用它的方式可能比您预期的要不同,并且以非常不同的格式发送数据等等。如果它是外部可消耗的,它通常也需要有意义、直观和良好的文档记录。您还需要更加谨慎地对待什么是私有的和公开的,这对于一个只被单个产品使用的API来说可能不那么重要。

测试API几乎总是要求您为测试目的创建某种类型的使用者。您必须能够与API交互。消费者通常非常简单--或者是一个现有的工具--是由自动化测试用例驱动的,而不是手动用户交互,尽管我已经看到了一些情况,人们为测试目的创建了一个复杂的GUI应用程序,而在一些情况下,测试仍然主要是通过使用该应用程序来实现的。

如果API有依赖项,您可以选择模拟这些依赖项,以便更彻底地测试所有这些交互,并命中所有的正代码路径和负代码路径。例如,如果API与数据库交互,并且具有创建、修改和删除数据的能力,那么您可能希望模拟与数据库的交互,以便更容易地测试用例,例如当记录不存在时,或者当记录是最终记录时,或者当记录由于依赖关系或到数据库的连接不可用而无法删除时,您可以看到API将如何处理这些情况。

票数 21
EN

Stack Exchange QA用户

发布于 2013-09-07 16:38:46

在测试API时,选择工具并不是唯一需要做出的决定。至于任何测试任务,您需要决定:

  1. 你正在测试程序的哪些方面?您希望在API测试中包含哪些应用程序特性?您是否要验证一些有状态的场景(例如,当用户登录时)?或者您想要验证API对于不同配置的行为?
  2. 你在找什么类型的问题?应用程序的哪个部分最有可能失败?在什么条件下?是功能问题还是性能问题?这将帮助您理解使用API测试更容易/更快/更便宜的场景,而不是使用前端。
  3. 如何判断测试是通过了还是失败了?在向API发出请求之后,如何评估系统的行为是否正确?您是只评估明确的API响应(例如,它确认它发送了一封电子邮件)还是您还想验证它是否确实做了它说的(电子邮件实际上已经发送了您的帐户)?此外,您如何知道给定API调用的预期结果是什么?
  4. 具体而言,你会执行哪些任务?根据前面的答案中的指导,您可以想到探索性测试,当您只是探索API行为、搜索某些特定的bug或预先定义彻底的测试用例时?是手动执行还是自动执行?您是否将执行某些功能测试,或者更确切地说,性能测试或负载测试?
  5. 谁来做测试?您是将测试API的人,还是会有一些人会编写客户应用程序来测试API的不同部分?对于自动化测试的API相关技术,您了解多少?答案将帮助您选择正确的工具进行测试。

现在你可能掌握的信息太少,无法做出能让你、面试官和公司股东满意的决定性决定。因此,您可以问面试官更多关于后端API的性质的问题:

  • 谁或什么是API的使用者?前端层是SUT的一部分还是外部客户端应用程序?也许没有前卫?这是一个公共API还是内部只供少数人使用?答案会告诉您应该如何彻底地测试API?
  • 包括前端的端到端测试中包含了哪些场景,哪些方案还没有呢?通过前端进行测试的挑战是什么?答案将指导您了解您应该涵盖的场景类型,以及您不应该覆盖的场景类型。例如,如果仅在后端端实现无效的输入验证功能,则这是API测试中需要强调的一个方面。
  • 什么技术被用来公开一个API?SOAP或REST Web服务、RMI、CORBA、命令行、COM等。答案将暗示您应该使用什么样的工具或编程语言来实现测试用例。
  • API有什么正式的规范吗?或者您需要以某种方式猜测预期的行为,例如,从UI规范中猜测?
  • 后端是否与系统中的其他组件对话?数据库?它与外部服务有联系吗?
票数 7
EN

Stack Exchange QA用户

发布于 2013-09-05 06:01:38

一般来说,我认为您不应该期望一个连接到API调用进行测试的模拟前端(不过,如果您有一个幸运的话!)相反,API函数通常使用单元测试和集成测试进行测试。

您需要了解API函数本身的可见性,所以测试将是白盒,或者至少是灰盒。应该为您提供一个规范文档,其中应该列出每个API函数的签名(输入参数、函数或方法名以及返回类型)。然后,在Spec中,您将编写单元测试(在我的例子中,我更喜欢PHPUnit)来检查每个API函数的输入和返回,例如测试边界值和空输入。

最后,如果API是服务的一部分,您还需要进行集成测试。这些测试将类似于服务的“端到端”测试,在该测试中,您将测试包括对API函数的调用的整个特性。您通常将在客户入口点开始集成测试,如果对客户正确,则验证返回是否有效。就我个人而言,我更喜欢Behat、Mink或Cucumber作为我的特性测试。

这是我的高级概述,我将如何测试一个API,希望这有帮助!

票数 5
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/6745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档