接口传值后不起作用_聊一聊 API 接口测试

知其然亦知其所以然,接口测试没有那么复杂,但也没有那么简单。

本文作者:张敏,软件测试工程师,就职于一家容器平台解决方案公司,负责 DevOps 产品的测试。

什么是 API

API(Application Programming Interface)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。也可以理解为是两个应用程序之间通信的机制,或者使用一组规则和协议的组件或计算机硬件。

提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源代码,或理解内部工作机制的细节。

API 被编写并使用在以下几个地方:

  • 基于 Web 的应用程序
  • 电脑操作系统
  • 数据库系统
  • 计算机硬件
  • 软件库

上面是很广义的 API 的概念,包含了硬件和软件,但我们常说的 API 其实是很狭义的 Web Service 或者说 Web API

Web Service

Web Service 是一个平台独立的,低耦合的,自包含的、基于可编程的 web 的应用程序,可使用开放的 XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。

百度百科

Web Service 是 API 的实现,用于通过网络(通常是 http/https)在 2 个应用程序之间进行通信。

所以 Web Service 和 Web API 是两个概念:

  • Web Service 是包装在 HTTP 中的 API
  • Web Service 需要网络,然而,API 不需要网络
  • 所有的 Web Service 都是 APIs,但是并不是所有的 API 都是 Web Service
a03d68db65d041f327ca9908a351c7e2.png

而实现 Web Service 的方式有三种:

  • 面向方法】RPC 远程过程调用的架构:包括 XML-RPC/JSON-RPC 协议
  • 面向消息】SOA 面向服务的架构:包括 SOAP 协议
  • 面向资源】REST 表现层状态转化的架构

REST & RESTful

我们大多数时间最常接触到的就是 REST 风格的 Web Service

REST 是 Web 服务的一种架构风格,一种设计风格,是一种思想,非协议也非规范。

简单看一下传统 API 设计以及 REST API 设计:

非 REST 设计

# 查询用户http://localhost:8080/admin/getUser# 新增用户http://localhost:8080/admin/addUser# 更新用户http://localhost:8080/admin/updateUser# 删除用户http://localhost:8080/admin/deleteUser

结论:以不同的 URL(主要为使用动词)进行不同的操作

REST 架构

# 查询用户GET http://localhost:8080/admin/user # 新增用户POST http://localhost:8080/admin/user # 更新用户PUT http://localhost:8080/admin/user # 删除用户DELETE http://localhost:8080/admin/user

结论:URL 只指定资源,以 HTTP 方法动词进行不同的操作。用 HTTP STATUS/CODE 定义操作结果。

RESTful 是一种常见的 REST 应用,是遵循 REST 风格的 Web 服务,REST 式的 Web Service 是一种 ROA(面向资源的架构)。并且有以下几个特点:

  • 每一个 URI 代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个 HTTP 动词(get、post、put、delete),对服务器端资源进行操作,实现“表现层状态转化”。

标准的 RESTful 只有这四种操作 GET、POST、PUT、DELETE。这四种动作对应资源的增删改查操作。

  • 查 GET
  • 增 POST
  • 改 PUT
  • 删 DELETE

而我们还常接触的 HEAD、PATCH 其实不属于标准的 RESTful,可以理解为是开发人员以 RESTful 为标准约定的一种简单的方法。

所以目前我们所接触的应用是没有完全按照 RESTful 风格进行开发的,都是基于 RESTful 风格进行开发。

ecfec5318b4a63ebf08bd3ddf597fa0c.png

幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。

安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。

URI & URL

提到了 URI,就简单了解一下 URI 和 URL 的区别

  • URI:统一资源标识符
  • URL:统一资源定位符

所有的 URL 都是 URI。

举个简单的例子,我们知道百度的地址是 https://www.baidu.com/,但如果我们想阅读一篇关于 API 的文章,不能通过 https://www.baidu.com/ 这个地址去浏览想要阅读的文章,需要在后面加上一定的参数,比如文章的 ID 等等。

所以,https://www.baidu.com/ 就是一个 URI,它只是标识了一个资源,但是并没有定位到某一具体的资源。而某篇文章的具体地址就是 URL ,它定位了一个资源,我们可以通过这个 URL 找寻到该文章的位置。

所以 REST 架构是面向资源的架构,它的每一条 URL 代表的就是一个具体的资源。

什么是 API 测试

直接测试应用程序编程接口(API),并作为集成测试的一部分来确定它们是否满足功能、可靠性、性能和安全性的期望。这就是 API 测试。

API 测试的优势

  • 更早期的测试

一旦实现了逻辑,就可以构建测试来验证响应和数据的正确性,而不必等待构建前端。

  • 更简单的测试维护

UI是不断变化的,但是 API 没有这样的挑战,API 测试现在被认为是自动化测试的关键,因为 API 现在是应用程序逻辑的主要接口。

  • 更快的解决问题

当 API 测试失败时,我们确切地知道系统哪里坏了,哪里可以找到缺陷。

  • 更快的测试速度和更广的覆盖范围

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

API 测试的内容

f4b50c672a8ead30df2a4fbc85d5b39a.png

如何进行 API 测试

320ec24c0ca89b5777ef8ee8c2046afa.png
  1. API 测试的开始时间并非在完成产品之后,在获得接口文档以后,就可以开始 API 测试。
  2. API 测试的测试用例需要根据接口文档进行撰写,所以 API 测试十分依赖接口文档,因此需要确保接口文档的正确性。
  3. 测试前需要准备测试环境,如果没有正式的测试环境,可以先进行 Mock。
  4. API 测试的范围很广,包括异常情况测试,性能测试等等,需要根据测试的内容选择合适的测试工具,抓包类的工具包括 Charles,Fiddler,Wireshark 等,测试脚本可以用过多种语言编写,包括 Python,Java,Go 等,测试工具包括 JMeter,Postman,ACCELQ 等等。
  5. 测试执行时,一旦出现问题,可以十分快速的定位出现问题的部分,及时反馈给开发人员进行修复。
  6. 测试完成后,需要完成测试报告,对 API 测试进行整体的归纳总结。

API 测试评判标准

往更细的说,我们经常接触的 API 测试其实就是对 URL 资源的操作。简单来说,一个 URL 就是一个接口,而 URL 则由以下几部分组成:

410f152f5d27ede442cfc8535c074b49.png
  • 业务功能覆盖是否完整
  • 业务规则覆盖是否完整
  • 参数验证是否达到要求(边界、业务规则)
  • 接口异常场景覆盖是否完整
  • 接口覆盖率是否达到要求
  • 代码覆盖率是否达到要求
  • 性能指标是否满足要求
  • 安全指标是否满足要求(SQL 注入)

单个 API 测试

往更细的说,我们经常接触的 API 测试其实就是对 URL 资源的操作。简单来说,一个 URL 就是一个接口,而 URL 则由以下几部分组成:

  • 请求协议

http — 普通的 http 请求

https — 加密的 http 请求,传输数据更加安全

ftp — 文件传输协议,主要用来传输文件

  • 请求 IP:服务器地址
  • 请求端口:服务器所开放的端口,不填写默认为80
  • 接口路径:被操作的资源路径
  • 接口参数:参数在接口路径后,使用 “?” 与路径进行区分,参数间使用 “&” 间隔

除以上部分,需要测试一个 API,还需要知道以下部分:

  • http 请求方式:包括 GET /POST/PUT/DELETE 等
  • http 请求头:请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度。示例:
Accept: application/json, text/plain, */*Content-Type: application/json;charset=UTF-8Authorization:eyJhbGciOiJIUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
  • http 请求体:API 发送的 body 数据,有多种格式

json格式

xml格式

html格式

二进制格式( 多数用于图片 )

字符串格式

当了解 API 的整个请求结构后,就能进行 API 测试了。而 API 测试主要测试的内容也是 API 的参数,设计测试用例时完全可以采用功能测试设计用例的方法来设计,比如正常发送请求,或者参数不传值,传值类型不正确等等多种异常情况。

API 测试步骤如下:

9ed6b84dade4611ed9aae9575962fb57.png
  1. 发送带有必要输入数据的请求
  2. 获取具有输出数据的响应
  3. 验证响应是否按要求返回

该 API 测试的验证方式就是通过 HTTP 响应码,返回数据格式 ,返回数据类型,返回数据信息这四部分进行验证。

  • HTTP 响应码:1xx(临时响应) 、2xx (成功) 、3xx (重定向) 、4xx(请求错误) 、 5xx(服务器错误)
  • 返回数据格式:json、xml
  • 返回数据类型:string、int、Booleans
  • 返回数据信息:检验是否符合预期,根据测试要求选择是否比对数据库数据,保证测试结果的准确性

总结来说,进行 API 测试的时候,可以考虑以下几个方面:

  • 理解 API 的需求
  • 指定 API 输出状态(响应状态代码)
  • 关注小型函数 API(登录 API、获取令牌 API、健康检查 API)
  • 对 API 进行分组(同一类别的 API 共享一些公共信息,如资源类型、路径等)
  • 利用自动化功能进行 API 测试
  • 选择合适的自动化工具
  • 选择合适的验证方法
  • 创建正面测试和负面测试
  • 现场测试过程
  • 不要低估 API 自动化测试

开始愉快的 API 测试之旅吧~

-- END --

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容

socket:运用IP地址协议端口 标识一个进程我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程, 在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大 …

自定义键盘组件_一文读懂!iOS系统组件的设计规范全解

一说到组件,大部分初级设计师和中级设计师的脑海里只会蹦出弹窗、Toast及操作列表等具体的概念,没有一套属于自己的组件分类体系,这样对于视觉设计、交互设计或产品设计的系统学习来说都是不利的。iOS14概念设计iOS官方设计指南在介绍组件时是…

anaconda安装python视频_怎么安装anaconda?

安装 Anaconda步骤: 1、双击下载好的 Anaconda2-5.2.0-Windows-x86_64.exe文件,出现如下界面,点击 Next 即可。2、点击 I Agree (我同意)3、Install for: Just me还是All Users,假如你的电脑有好几个 Users…

office365 自定义_IT外包观察,足不出户,Office365打造教学新体验?

Office365无疑是当今最高效的集文档处理、联机协同、移动办公、快捷沟通、商业智能为一体的云端生产力服务。但office365仅仅只应用于移动办公吗?有没有可能实现移动办学呢?仅仅是商业智能吗?会不会也能做到教学智能?上海蓝盟连续…

python连接数据库mysql错误1045、手动登录可以_登录mysql错误1045解决方法

在命令提示符中登陆mysql时,提示1045报错解决方案: 安装好mysql,在cmd中输入mysql -uroot -p回车,输入密码后,出现1045错误,错误提示如下: ERROR 1045(28000): Access denied for user rootloca…

host 端口_如何让多端口网站用一个nginx进行反向代理实际场景分析

前段时间公司要整合服务器资源,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI:apollo&…

sqldeveloper导出数据字典_如何全面建设B端产品中的数据迁移方案

加关注,带你看世界在新系统替换老系统或者系统升级的项目中,难免会存在数据迁移的工作,并且随着业务系统和数据结构的复杂性,数据迁移的难度越大。这亦要求在项目实施的前期,根据客户的需求尽可能全面地考虑到各个方面…

声明对象_静态变量(使用同一个类声明的对象可以共享一个值)

要在属于同一种类的对象之间共享数据值,可以使用static。namespace demo3{ class point //定义点 { public int x; public int y; } class line { static public point origin new point(); public point ending ne…

centos6配置mysql远程访问_MariaDB 数据库配置 Navicat 程序远程访问权限

如果MySQL数据库采用的是 MariaDB 引擎,与普通的数据库配置有点不同 MariaDB 与普通的MySQL数据库的一个不同在于它的配置文件不止一个,它将不同的数据放入到不同的配置文件中,之前的/etc/mysql/my.cnf内容如下:从文件中的注释上来…

java读取mysql配置文件_Linux运维:MySQL读写分离解决方案

一次性付费进群,长期免费索取教程,没有付费教程。进微信群回复公众号:微信群;QQ群:460500587教程列表 见微信公众号底部菜单 | 本文底部有推荐书籍 微信公众号:计算机与网络安全ID:Computer-net…

的硬件报错_工程师经验:78%的硬件失效罪魁祸首 —— 焊接问题

工程师经验你是否长时间纠缠于线路板的失效分析?你是否花费大量精力在样板调试过程中?你是否怀疑过自己的原本正确的设计?也许许多硬件工程师都有过类似的心理对话。有数据显示,78%的硬件失效原因是由于不良的焊接和错误的物料贴片…

柔性体没有应变_灌注式半柔性道面材料抗冲击性能试验研究

文章来源:微信公众号"沥青路面”前言灌注式半柔性道面材料是一种刚度大于沥青混凝土,小于水泥混凝土的复合道面材料,在兼具了两种材料优势的同时避开了它们的缺陷。半柔性道面不存在裂缝,而且受温度影响远远小于沥青道面&…

html网页上传到服务器_JSP+Servlet实现文件上传到服务器功能

本文实例为大家分享了JSPServlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下项目目录结构大致如下:正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC 架构&#xff…

gaf处理一维故障信号_【推荐文章】改进局部均值分解的齿轮箱复合故障特征提取...

《机械传动》2019年 第43卷 第8期文章编号:1004-2539(2019)08-0130-05DOI:10.16578/j.issn.1004.2539.2019.08.024引用格式:柴慧理, 叶美桃. 改进局部均值分解的齿轮箱复合故障特征提取[J]. 机械传动, 2019,43(8):130-134.CHAI…

dll模块化设计与编程_FPGA设计原则经验分享

一、面积和速度如何折中 面积和速度是芯片设计中一对相互制约、影响成本和性能的指标,贯穿FPGA设计的始终。在FPGA设计中,面积是指一个设计消耗的FPGA内部逻辑资源的数量,可以用消耗的触发器和查找表的个数或者是等效逻辑门数来衡量&#x…

div背景透明_为什么css3实现background-image和半透明边框这么麻烦

”background和border属性能有什么难的?"我经常听到新手觉得css的background和border属性简单。那好,我们来看下面这个比较“简单”的需求:父元素有一张背景,子元素有边框,且子元素有一张背景颜色。这时候子元素的…

c mysql 查询超时设置_MySQL查询超时的设置方法

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 这里顺带解释一下什么是non-interactive connection Non-Interactive Commands Just do a quick look up on a table without logging into the client, running the query then logging back out aga欢…

python聚类分析案例_深度解读|如何构建用户分级体系实现精细化运营?附案例实操...

本文内容较长,代码全部已展示在文中用户精细化分类也可以称做用户画像,是目前很常见的一种运营手段,目的是为了更好的服务不同性质的客户,提高每个环节的转化率,最大程度挖掘客户价值,创造利润。那么如何构…

单片机集成wifi等_从零制作单片机需要哪些知识?

请点击上面 免费关注...说一下从芯片制作开始到最后编写驱动程序整个过程中每一步所需要的知识。作者:彭谟威链接:https://www.zhihu.com/question/28580074/answer/93515413来来来,让我们一起,左手右手一个慢动作。每一个方向都值…

matlab案例_基于matlab和frost平台的cassie案例足式机器人运动学和动力学计算实现过程...

1、软件平台Maltab2019aMathematica 12.1.0Frost2、实现步骤(1)、安装matlab2019a(2)、安装Mathematica 12.1.0(3)、下载frost-dev-master软件说明:https://ayonga.github.io/frost-dev/pages/i…