接口测试HTTP接口详细验证清单

接口测试HTTP接口详细验证清单

概述

当我们在构建、测试、发布一套新的HTTP API时,包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。

即使你对每一个组件都有深刻的理解,也可能会有太多的信息在你的脑海中出现。

以至于我们不可能一下把所有的信息进行梳理,形成成体系的API测试策略,下面我们就HTTP API测试将其checklist进行细化。

主要从以下四个方面进行:

HTTPAPI设计内容安全客户端其他 HTTP

HTTP RFC(Request For Comments)相关文档规定了HTTP交互机制及参数选项,因此你需要了解相关RFC文档才能做好HTTP API的测试:

HTTP1.0: https://tools.ietf.org/html/rfc1945

HTTP1.1: https://tools.ietf.org/html/rfc7232

HTTP2: https://tools.ietf.org/html/rfc7540

在进行HTTP API测试时,以下协议选项或机制是应该考虑覆盖的:

HTTP方法的安全性和幂等性。Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性。安全性,仅指该方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态。即,安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。幂等性,是指该方法多次调用返回的效果(形式)一致,客户端可以重复调用并且期望同样的结果。

HTTP方法的安全性和幂等性见下表:

方法

安全性

幂等性

GET

HEAD

OPTIONS

DELETE

PUT

POST

认证,验证准确地实现HTTP身份验证,API应该提供一个401状态代码。状态码201 Created,使用“201 Created”标识响应代码来表示请求已成功处理,并导致创建新资源。201响应可以包括位置标头中的新资源URI。状态码202 Accepted,使用“202 Accepted”的响应代码来表示请求是有效的,并且将被处理,但是还没有完成。通常情况下,这是在服务器端后台处理队列的情况下使用的。状态码4xx与5xx状态代码之间有一个重要的区别:4xx和5xx的状态码:4xx代码是用来表示客户端错误的,而5xx代码表示服务器端错误。状态码410 Gone响应代码是一种未得到充分利用的响应代码,该代码通知客户端在该URL中使用的资源,但不再是。可以在您的API中使用它来表示已删除、归档或过期的项。状态码100-Continue——如果API客户端准备发送一个大型实体的请求,比如POST、PUT或补丁,他们可以在HTTP头中发送“Expect:100-Continue”,然后在发送实体实体之前等待“100继续”响应。这允许API服务器在浪费带宽返回错误响应(例如401或403)之前验证请求的有效性。支持这种功能不是很常见,但是它可以提高API的响应能力并在某些场景中减少带宽。Connection Keep-Alive,为多个API请求维护与API服务器的连接可能是一个很大的性能改进。如果配置正确,几乎每个web服务器都应该支持保持生命连接。HTTP Compression,HTTP压缩既可以用于响应主体(接受编码:gzip),也可以用于请求主体(内容编码:gzip)来提高HTTP API的网络性能。HTTP Caching, 在API响应中提供一个cache-control报头。如果它们不能缓存,“cache-control:no-cache”将确保代理和浏览器能够理解这一点。如果它们是可缓存的,则需要考虑各种因素,比如缓存是否可以由代理共享,或者资源是否"fresh"。Cache Validation, 如果有可缓存的API,那么应该在响应中提供最后修改或ETag头,然后支持If-修饰性请求,因为有条件的请求。这将允许客户机检查它们的缓存副本是否仍然有效,并在不需要时阻止完整的资源下载。如果正确实现,可以使条件请求比通常的请求更有效,并节省一些服务器端负载。Conditional Modifications, ETag头也可以用于支持资源的条件修改。通过在获取上提供一个ETag头,稍后的POST、补丁或删除请求可以提供一个if-match头来检查它们是否在更新或删除它们上次看到的相同状态的资源。Absolute Redirects, 对http/1.1的重定向(例如:……201、301、302、303、307响应代码)应该包含位置响应头中的一个绝对URI。许多客户机在位置上支持相对uri,但是如果希望API与许多客户机广泛兼容,那么应该在任何重定向中使用绝对uri。Link Response Header,在RESTful API中,即使响应的内容类型没有提供

比丘资源网 » 接口测试HTTP接口详细验证清单

发表回复

提供最优质的资源集合

立即查看 了解详情