博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
API 测试你所需要知道的……
阅读量:4040 次
发布时间:2019-05-24

本文共 3732 字,大约阅读时间需要 12 分钟。

API 测试你所需要知道的……

API测试是不同于UI级自动化测试,其主要关注在系统架构的业务逻辑层,所以其主要关注不在于UI操作或用户感观上,更重调用逻辑关系。

与UI级自动化测试通过控制键盘输入和鼠标等操作不同的是:API测试,我们是通过工具或代码方式去调用特定的API,获取输出,并记录系统的响应。

API测试需要与应用程序的API进行交互,为了测试这些API,我们可以:

  • 使用测试工具来进行测试
  • 自己写代码的方式进行测试

一个例子

如下图所示:我们打开了一个website,出现了如下的界面,用户需要填写用户名,选择CheckBox中列出的条目(至少选择一项),点击下拉列表选择一个条目(例如:Adoption),然后点击Submit按钮提交。

这是一个非常常见的应用场景,如何对它进行测试呢?

请思考一下。

如果我们点击 Submit 按钮时,提交的表单数据是类似这样的内容:

https://petadopt.com/api/v2/user/?name=daniel&pets=cats%20fish&method=adoption

那我们有什么好的测试方法呢?

 

API测试的优势

尽早的开始测试

使用API测试,一旦设计了逻辑,就可以构建测试来验证响应和数据的正确性。我们不必等待各个团队完成他们的工作,也不必等待构建完整的应用程序 —— 测试用例是孤立的,可以立即构建。

更容易的测试维护

用户界面不断地变化,并根据它们的访问方式(浏览器、设备、屏幕方向等)四处移动。这造成了一个噩梦般的场景,在这个场景中,测试不断地被重写,以跟上生产中的实际代码。API更改更受控制,也更不频繁——通常情况下,像OpenAPI Spec这样的API定义文件可以帮助重构测试只需几秒钟。

更快的解决时间

当API测试失败时,我们确切地知道我们的系统在哪里坏了,在哪里可以找到缺陷。这有助于减少在构建、集成甚至不同团队成员之间对bug进行分类的时间。API测试的小而孤立的足迹非常适合更快的MTTR统计,这对于DevOps团队来说是一个有价值的KPI。

测试的速度和覆盖率

300个UI测试可能需要30小时才能运行。300个API测试可以在3分钟内运行。这意味着您将在更短的时间内发现更多的bug,同时也将立即修复它们。

API级测试至少应该覆盖以下测试要点

  • 验证API所暴露的资源是否恰当的列出、创建、修改、和删除
  • 验证API是否功能可用以及用户友好,是否便于与其他平台集成
  • 安全测试,验证API是否包含了必要的认证以及敏感数据是否做了脱敏处理,是否支持加密或明码的http访问
  • 自动化测试,将API高度业务场景化,实现自动化测试
  • 文档,形成足够的文档,确保API质量的可维护行

API 测试类型

  • Validation testing
  • Functional Testing
  • UI Testing
  • Loading Testing
  • Security Testing
  • Runtime and error detection
  • Penetration testing

  • Fuzz testing

API测试的工具推荐

  • Postman
  • SoapUI
  • JMeter

API测试一般会发现哪些类型的Defect

  • 无法正确处理错误的深入条件
  • 缺少或重复功能
  • 可靠性问题
  • 安全问题
  • 多线程问题
  • 性能问题
  • 响应数据结构不规范问题
  • 有效参数值不能正确处理

API测试返回码状态含义(HTTP请求)

http网络请求 返回statusCode(状态码) 200、300、400、500

201-206 都表示服务器成功处理了请求的状态代码,说明网页可以正常访问。

200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建) 请求成功且服务器已创建了新的资源。
202(已接受) 服务器已接受了请求,但尚未对其进行处理。
203(非授权信息) 服务器已成功处理了请求,但返回了可能来自另一来源的信息。
204(无内容) 服务器成功处理了请求,但未返回任何内容。
205(重置内容) 服务器成功处理了请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。
206(部分内容) 服务器成功处理了部分 GET 请求。

300-3007 表示的意思是:要完成请求,您需要进一步进行操作。通常,这些状态代码是永远重定向的。
300(多种选择) 服务器根据请求可执行多种操作。服务器可根据请求者 来选择一项操作,或提供操作列表供其选择。
301(永久移动) 请求的网页已被永久移动到新位置。服务器返回此响应时,会自动将请求者转到新位置。您应使用此代码通知搜索引擎蜘蛛网页或网站已被永久移动到新位置。
302(临时移动) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。会自动将请求者转到不同的位置。但由于搜索引擎会继续抓取原有位置并将其编入索引,因此您不应使用此代码来告诉搜索引擎页面或网站已被移动。
303(查看其他位置) 当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。
304(未修改) 自从上次请求后,请求的网页未被修改过。服务器返回此响应时,不会返回网页内容。
如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应。由于服务器可以告诉 搜索引擎自从上次抓取后网页没有更改过,因此可节省带宽和开销。
305(使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。
307(临时重定向) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。会自动将请求者转到不同的位置。但由于搜索引擎会继续抓取原有位置并将其编入索引,因此您不应使用此代码来告诉搜索引擎某个页面或网站已被移动。
300(多种选择) 服务器根据请求可执行多种操作。服务器可根据请求者 来选择一项操作,或提供操作列表供其选择。
301(永久移动) 请求的网页已被永久移动到新位置。服务器返回此响应时,会自动将请求者转到新位置。您应使用此代码通知搜索引擎蜘蛛网页或网站已被永久移动到新位置。

4XX HTTP状态码表示请求可能出错,会妨碍服务器的处理。
400(错误请求) 服务器不理解请求的语法。
401(身份验证错误) 此页要求授权。您可能不希望将此网页纳入索引。
403(禁止) 服务器拒绝请求。
404(未找到) 服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。
例如:http://www.0631abc.com/20100aaaa,就会进入404错误页面、
405(方法禁用) 禁用请求中指定的方法。
406(不接受) 无法使用请求的内容特性响应请求的网页。
407(需要代理授权) 此状态码与 401 类似,但指定请求者必须授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。
408(请求超时) 服务器等候请求时发生超时。
409(冲突) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表。
410(已删除) 请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久删除,您应当使用 301 指定资源的新位置。
411(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型) 请求的格式不受请求页面的支持。
416(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态码。
417(未满足期望值) 服务器未满足"期望"请求标头字段的要求。500至505表示的意思是:服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

500(服务器内部错误) 服务器遇到错误,无法完成请求。
501(尚未实施) 服务器不具备完成请求的功能。例如,当服务器无法识别请求方法时,服务器可能会返回此代码。
502(错误网关) 服务器作为网关或代理,从上游服务器收到了无效的响应。
503(服务不可用) 目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。
504(网关超时) 服务器作为网关或代理,未及时从上游服务器接收请求。
505(HTTP 版本不受支持) 服务器不支持请求中所使用的 HTTP 协议版本。

(未完待续)

 

转载地址:http://rvvdi.baihongyu.com/

你可能感兴趣的文章
太阳系演化时序表
查看>>
我们可曾这么认真过?
查看>>
彻底搞懂HTTP协议
查看>>
见识一下cookie
查看>>
关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
查看>>
如何防止跨站点脚本攻击
查看>>
黑客是怎样入侵你的网站的
查看>>
人类的祖先为什么会走出非洲
查看>>
电子书收藏
查看>>
网站地址中的www有还是没有
查看>>
RFC文档(中文翻译版本)
查看>>
邮件是怎么发送和接收的(STMP和POP3/IMAP协议)
查看>>
渗透的艺术
查看>>
怎么查看gcc默认的include路径
查看>>
TCP连接状态
查看>>
SecureCRT登录ssh上传下载文件方法
查看>>
理解硬盘
查看>>
理解硬盘(二)
查看>>
ubuntu下7zip压缩解压缩命令使用
查看>>
Makefile中的info函数
查看>>