API测试中常见的缺陷有哪些?

1 天前   出处: www.reddit.com  作/译者:r/QualityAssurance/Ares

某网站上有人提了一个问题:根据你的经验,API测试中最常见的缺陷是什么?

以下是一些网友的回复:

网友1:

毫无疑问,API测试中最困难的部分是从开发人员那里获得明确的指示信息,了解正确的请求体是什么,以及预期的响应体应该是什么。

网友2:

我认为问题出现得更早。业务分析师通常不具备技术能力,他们提交的需求往往充斥着假设和未知因素。这就是业务分析师存在的全部意义。

网友3:

我完全同意这一点……分析阶段太不可靠了,所有参与的人几乎都不想记录任何东西。所以,不可避免地会出现各种假设。

网友4:

我们要求他们在其PR(Pull Request,拉取请求)被批准之前,将Postman请求添加到我们的测试仓库中。这样我们至少有了请求体的成功案例。至于让他们进行模式验证测试,那就是另一回事了。

网友5:

以及那些没人告诉你的奇葩更新。

网友6:

有很多这类问题,关于安全方面的,最好通过谷歌搜索一下“owasp top 10 API”了解更多。我列举几个:

  1. 列表端点的限制参数没有设置最大边界(可能导致数据库拒绝服务攻击,即DB DOS)。
  2. 通过ID获取或更新实体时没有检查权限(允许一个已认证用户查看或更新属于另一个用户的实体)。
  3. 没有对查询参数、URL参数、有效载荷的输入进行清理(可能导致数据库或系统注入攻击)。
  4. 登录或获取令牌端点没有设置速率限制。
  5. 密码恢复端点没有基于IP的速率限制。

网友7:

需求规格说明与实现之间的不匹配。这里假设你接触到的是书面的需求说明,而不是由代码生成的说明。

我指的是请求体中那些本应为可空的部分,结果却要求你输入空字符串或空的Json对象。

网友8:

可能这不是一个常见的情况,但我最近就遇到了。我们的开发人员决定在搜索用户资料但未找到记录时返回404状态码。我建议我们应该返回204状态码,因为请求是成功的,只是没有找到记录。他们没有听取我的建议,我还告诉他们,这样会在我们上线后污染生产环境的日志。结果,上线后,果然在非工作时间接到了技术支持的电话,因为这个问题导致生产环境中触发了大量警报。他们很快就修复了这个问题。

我想说,一定要确保你的团队对响应码有统一的处理方式,因为这本不必引发这么多麻烦。

网友9:

你好,你的评论很引人深思。我立刻觉得这是错误的,而且问题不在于响应码,而在于警报规则。我从来没有想过这样的处理方式,尽管我感觉它不对,但一开始并不清楚为什么。经过一些思考和研究后,我明白了为什么这是错误的。

这违反了RESTful原则中的自描述性消息原则:

  • 在RESTful API中,每个URL都旨在表示一个特定的资源。如果客户端请求一个不存在的资源,返回404 Not Found状态码是正确的方式来表明该资源不存在。这与使用标准的HTTP方法和状态码来描述资源状态的原则是一致的。
  • 返回200 OK状态码意味着资源存在但当前为空,但如果路径参数无效或未映射到现有资源,则情况并非如此。

如果违反这一原则并遵循你的做法,可能会导致以下情况:

  • 误导客户端逻辑:客户端可能会错误地认为资源存在且为空,从而导致应用程序中出现潜在的错误或意外行为。
  • API设计不一致:这种做法可能导致API不一致且难以使用,因为它不符合RESTful服务所期望的标准做法。
  • 增加客户端复杂性:开发人员可能需要在客户端添加额外的检查来处理200 OK响应为空的情况,这增加了代码的复杂性并降低了清晰度。

我们每天都会学到一些东西。干杯。

网友10:

意外的空值。

网友11:

不确定这是否常见,但最近我们遇到了一个问题:消费者发送的可选请求体参数全部为小写,而API期望的是驼峰命名法(camelCase),不过由于API会忽略所有未知字段,因此没有抛出验证错误。

直到真实用户开始注意到一些不一致之处时,我们才在生产环境中发现了这个问题。

网友12:

运行负向测试时的错误处理。似乎每个人对于应有的响应都有不同的看法。

网友13:

文档/规范 - 通常API接口会被更新/修改,但文档却跟不上进度。对于公共API来说,这可能是个大问题。

网友14:

我对此的解决方案是保持API规范在线开放,并使用遵循此规范的库来验证测试中的每个请求和响应。如果有人更改了某个接口而没有更新并发布文档,那么所有测试都将失败。

是的,类似契约测试。你只需要为自己发布契约,这份契约同时也可以作为你API的公开文档或内部文档。

网友15:

空值、未定义值和空字符串的处理。通常,开发工程师应该在整个系统中遵循相同的规则,但我经常发现响应和处理方式往往不同。

网友16:

数据完整性和处理流程不符合要求。

网友17:

在我的工作中,最常见的问题是发送POST API调用时缺少了UI中所需的值。不知为何,我的API团队总是忽略这一点。

网友18:

合约失败。最具破坏性的是生产环境中的认证失败。

网友19:

资源不足(以及运维关注不够)的预发布环境,导致你请求所依赖的服务经常宕机。

网友20:

密码套件不匹配、未找到算法等问题会导致SSL/TLS握手失败,进而造成请求失败。

那么,各位小伙伴,你认为在API测试中常见的缺陷有哪些呢?欢迎在评论区进行评论。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
120° /1207 人阅读/0 条评论 发表评论

登录 后发表评论