Rest API

什么是接口测试

接口测试又称 API 测试 Application Programming Interface

接口测试是测试系统组件间接口的一种测试。重点关注数据传递。

接口测试一般会用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试。

为什么要做接口测试

很多系统关联都是基于接口实现,接口测试可以将复杂的系统关联进行简化。

接口的功能比较单一,能够比较好的进行测试覆盖,也相实现对容易自动化持续集成。

接口相对于界面功能,会更底层一些,测试覆盖会更容器。

软件开发生命周期

  • 接口测试在单元测试之后,UI测试之前。
  • 接口测试可以获得较高的投资回报。

Web Service

Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术。

最主要的两种实现方式: SOAP & REST

Web 2.0 时代,REST 方法被广泛普及。

SOAP & REST

SOAP

交换数据的一种协议规范,是一种轻量级、简单的、基于XML的协议。

REST

一种软件架构风格,可以降低开发的复杂性,提高系统的可伸缩性。

区别

  • 安全性: SOAP 好于 REST
  • 效率和易用性: REST 更胜一筹
  • 成熟度: 总的来说 SOAP 在成熟度上优于 REST

REST 和 RESTFUL

区别

  • RESTful 是 REST 的形容词形式
  • RESTful API 指的是 REST 风格的接口

一般来说 REST 等于 RESTful,区别一个是名词,一个是形容词。

REST API

REST 最早是由 Roy Fielding 博士发表的论文中提到的。

定义: 简单来说 REST 是一种系统架构设计风格(而非标准),一种分布式系统的应用层解决方案。

目的: Client 和 Server 端进一步解耦。

应用: 最为经典的是 github API

核心思想: 资源。

REST 支持的方法(CRUD)

Verd描述
HEAD(select)只获取某个资源的头部信息
GET(select)获取资源
POST(create)创建资源
PATCH(update)更新资源的部分属性(很少用,一般用POST代替)
PUT(update)更新资源,客户端需要提供新建资源的所有属性
DELETE(delete)删除资源

幂等性(Idempotent): 是一个数学上的概念,在这里表示一次和多次请求引起的边界效果应该是一致的。 Post 是不幂等方法。

安全性: GET、HEAD 和 OPTIOND 均被认为是安全的r方法,因为它们旨在实现对数据的获取,并不具有“边界效应(Side Effect)

REST API 设计规范

  • 协议: 使用 HTTPs 协议,确保交互数据的传输安全。

  • 域名: 应该尽量将 API 部署在专用域名之下。
    (例:https://api.example.com)

  • 版本控制; 将版本号放在 URL 或者 Header 中
  • 路径:只能包含动词,不能包含名词
  • 过滤信息:
    • ?limit=10:指定返回记录的数量
    • ?offset=10:指定返回记录的开始位置。
    • ?page=2&per_page=100:指定第几页,以及每页的记录数。
    • ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
    • ?animal_type_id=1:指定筛选条件
      参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。
  • 验证(Authentication): 确定用户是其申明的身份,比如提供账号和密码。
  • 授权(Authorization): 保证用户有对请求资源特定的权限。比如用户的私人信息只能自己访问,其他人无法看到;有些特殊的操作只能管理员来操作,其他用户有只读权限等。

常见的 HTTP status code 状态码:

  • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
  • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
  • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    • 301 资源的 URL 被更新
  • 204 NO CONTENT - [DELETE]:用户删除数据成功。
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
  • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
  • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
  • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
  • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
  • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

状态码的完全列表参见这里。

错误处理

如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。

{error: "Invalid API key"
}

返回结果

  • GET /collection:返回资源对象的列表(数组)
  • GET /collection/resource:返回单个资源对象
  • POST /collection:返回新生成的资源对象
  • PUT /collection/resource:返回完整的资源对象
  • PATCH /collection/resource:返回完整的资源对象
  • DELETE /collection/resource:返回一个空文档

接口测试

手动测试

测试方法:

  • 借助工具完成
  • 拼接参数执行请求

自动化测试

测试方法:

  • 编写自动化脚本实现
  • 可以加入回归测试并持续集成

测试工具

  • Postman
  • JMeter
  • RestClient

功能测试

测试范围:

  • 业务流程
  • 边界值,特殊符号
  • 参数类型,必选项,可选项等

性能测试

测试覆盖:

  • 并发数
  • 吞吐量、tps

安全性测试

测试覆盖

  • 敏感数据加密
  • 恶意攻击

测试步骤

  1. 了解接口格式
  2. 编写测试用例
  3. 测试用例评审
  4. 开始测试
  5. 完成测试报告

转载于:https://www.cnblogs.com/zuoruining/p/Rest-API.html

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

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

相关文章

php循环checkbox,php循环删除checkbox | 学步园

一、首先要了解sql语句$SQLdelete from user where id in (1,2,4);表单大概是:form action methodpost input nameID_Dele[] typecheckbox idID_Dele[] value1input nameID_Dele[] typecheckbox idID_Dele[] value2input nameID_Dele[] type首先要了解sql语句$SQL&q…

leetcode1451. 重新排列句子中的单词(排序)

「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text : 句子的首字母大写 text 中的每个单词都用单个空格分隔。 请你重新排列 text 中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序…

Java+Oracle实现事务——JDBC事务

J2EE支持JDBC事务、JTA事务和容器事务事务,这里说一下怎样实现JDBC事务。 JDBC事务是由Connection对象所控制的,它提供了两种事务模式:自己主动提交和手动提交,默认是自己主动提交。 自己主动提交就是:在JDBC中。在一个…

开源项目贡献者_我如何从一名贡献者转变为一个开源项目维护者

开源项目贡献者by Dhanraj Acharya通过Dhanraj Acharya 我如何从一名贡献者转变为一个开源项目维护者 (How I went from being a contributor to an Open Source project maintainer) I was a lone software developer. When I was in college, I attended the KDE conference…

网络摄像头CVE

CVE-2018-9995 rtsp未授权访问 rtsp后缀整理: Axis(安讯士) rtsp:// 192.168.200.202/axis-media/media.amp?videocodech264&resolution1280x720 rtsp://IP地址/mpeg4/media.amp rtsp://IP地址/安迅士/AXIS-media/media.amp123D-Link …

Centos中不从skel目录里向其中复制任何文件错误的解决方法

[rootlocalhost www]# useradd -d /webserver/www/ ithovcom useradd:警告:此主目录已经存在。 不从 skel 目录里向其中复制任何文件。 [rootlocalhost www]# ls -a .&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; .. 发现没…

leetcode91. 解码方法

一条包含字母 A-Z 的消息通过以下方式进行了编码: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: “12” 输出: 2 解释: 它可以解码为 “AB”(1 2)或者…

php 系统平均负载,Linux_解析Linux系统的平均负载概念,一、什么是系统平均负载(Load a - phpStudy...

解析Linux系统的平均负载概念一、什么是系统平均负载(Load average)?在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为在特定时间间隔内运行队列中的平均…

Elastic-job使用及原理

一、原理 elastic-job有lite版和cloud版,最大的区别是有无调度中心,笔者采用的是lite版本,无中心化。 tips: 第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服…

构建持续交付_如何使交付成为您的重点将如何帮助您构建高质量的应用程序

构建持续交付by Simon Schwartz西蒙施瓦茨(Simon Schwartz) 如何使交付成为您的重点将如何帮助您构建高质量的应用程序 (How making delivery your focus will help you build quality applications) I was recently asked by our company’s executive team why our team was…

微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密

$xmlResult file_get_contents("php://input");//获取微信的数据$result $this->xmlToArray($xmlResult);//将xml转成数组 // 将加密的数据解密,方法在下面$reqInfo $this->refund_decrypt($result[req_info]); /** 退款通知解密* Author WangZhaoBo* param…

BeanShell自动装箱拆箱

“装箱”和“拆箱”是用来描述自动包装一个原始类型到一个包装类以及在必要时解开包装回到原始类型的术语。装箱是 Java 的特性(SDK 1.5)之一,且 BeanShell 已支持多年。 BeanShell 支持原始类型的装箱和拆箱。比如: int i5; Inte…

leetcode816. 模糊坐标

我们有一些二维坐标,如 “(1, 3)” 或 “(2, 0.5)”,然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。 原始的坐标表示法不会存在多余的零,所以不会出现类似于"00&q…

IO流入门-第十二章-ObjectInputStream_ObjectOutputStream

DataInputStream和DataOutputStream基本用法和方法示例,序列化和反序列化 import java.io.Serializable; //该接口是一个“可序列化”的 ,没有任何方法,是一个标识接口,还有Cloneable /*标识接口的作用:标识作用…

matlab pca重构,Matlab – PCA分析和重建多维数据

这是一个快速的演练.首先我们创建一个隐藏变量的矩阵.它有100个观察,有两个特点.>> Y randn(100,2);现在创建一个加载矩阵.这将把隐藏的变量映射到观察到的变量上.说你观察到的变量有四个特征.那么你的加载矩阵需要是24>> W [1 1; 1 -1; 2 1; 2 -1];这告诉你,观察…

文档对象模型dom_什么是文档对象模型,以及为什么应该知道如何使用它。

文档对象模型domby Leonardo Maldonado莱昂纳多马尔多纳多(Leonardo Maldonado) 什么是文档对象模型,以及为什么应该知道如何使用它。 (What’s the Document Object Model, and why you should know how to use it.) So, you’ve studied HTML, you’ve created y…

安装Docker step by step

1. 系统要求 centos7以上 使用cat /etc/redhat-release查看系统版本,我的Centos 7.6 centos-extra 仓库 enable,默认是打开的 2.安装docker docer安装分为联网安装和离线安装两种安装 方式, 第一种 在有外网环境下安装docker,一般使用yum安…

linux用户空间和内核exit的语义--linux没有线程

如果你在程序中调用了exit,那么很显然你的程序会退出,可是至于为何会退出那就是库的事情了,我为什么说只是库的事情而不关linux内核的事情呢?那是因为linux内核根本不管用户空间的行为策略。库的策略是什么?很简单的退…

leetcode1328. 破坏回文串

给你一个回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的字典序最小,且 不是 回文串。 请你返回结果字符串。如果无法做到,则返回一个空串。 示例 1: 输入:palindro…

php补充 扩展,PHP安装扩展补充说明

上一篇文章中用到了,php的sodium扩展,那么如何安装PHP扩展呢?基于我之前踩过的一些坑,大致整理了几种安装php扩展的方法。已安装sodium为例1、先做点准备工作,安装sodium依赖rpm -ivh http://mirrors.whsir.com/centos…