接口及接口测试概念
1. 接口
接口可分为:硬件接口和软件接口;我们这里只关注软件层面的接口。
接口:是指系统或组件之间的交互点,通过这些交互点可以实现数据的交互。(数据交互的通道)
1.1 接口的类型
接口测试分类有许多种,按照范围划分:系统之间的接口和程序内部的接口
- 系统之间的接口:多个内部系统之间的交互,内部系统与外部系统之间的交互
- 程序内部的接口:方法与方法之间,模块与模块之间的交互
2. 接口测试
接口测试:是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。
2.1 接口测试原理
模拟客户端向服务器发送请求,服务器接收请求后进行相应的业务处理,并向客户端返回响应数据,检查响应数据是否符合预期。
2.2 接口测试的特点
- 测试可以提前介入,提早发现Bug,符合质量控制前移的理念
- 可以发现一些页面操作发现不了的问题
- 接口测试低成本高效益(底层的一个Bug能够引发上层8个左右Bug,接口测试可以实现自动化)
- 不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测
2.3 接口测试的实现方式
- 使用接口测试工具来实现(比如:JMeter、Postman)
- 通过编写代码来实现(比如:Python + Requests)
3. 接口自动化测试
3.1 概念
自动化测试:是把以人为驱动的测试行为转化为机器执行的一种过程。
接口自动化测试:是让程序或工具代替人工自动的完成对接口进行测试的一种过程。
HTTP协议
1. HTTP协议介绍
协议是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规则或规定;
HTTP(HyperText Transfer Protocol): 超文本传输协议,规定了浏览器和服务器之间通信的规则,是基于请求和响应模式的应用层协议,是目前互联网中广泛使用的一种协议。
1.1 HTTP协议的特点
- 支持客户端/服务器模式
- 简单快速
- 灵活
- 无连接
- 无状态
1.2 HTTP协议交互过程
客户端通过网络向服务器发送一个请求,目的是向服务器索要资源(数据),服务器接收响应后对客户端的请求作出响应,返回客户端索要的资源。
1.3 数据传递格式
互联网的本质就是数据传输,数据传输需要数据载体。
(1)键值对
- 键名1=值1 & 键名2=值2
(2)JSON
{
“键1”:“值1”,
“键2”:“值2”,
“键3”:“值3”
…
}
(3)HTML
<html>
<head>
<title>网页标题</title>
</head>
<body>网页显示内容</body>
</html>
(4)XML
<person>
<name>小花</name>
<age>18</age>
</person>
HTML 和 XML 都是标签标记语言,有效数据占有率较低;
JSON格式相比标签标记语言传输数据有效率更高,但是JSON语言描述性不及HTML和XML,部分场景依旧使用HTML和XML,若传递少量数据,可能使用JSON.
2. URL
URL(Uniform Resource Locator): 统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接 和 传输数据,互联网上的每个资源都有唯一的URL。
URL格式:协议://域名:端口号/路径?查询参数1&查询参数2
http://www.itcast.cn:8080/news/index.html?uid=123&page=1
- 协议部分:“http”,常见的协议有HTTP,HTTPS、FTP等
- 域名部分:“www.itcast.cn”,本质是IP地址,是为了方便用户去记忆,而自己设计的一个名字,一般需要花钱购买本质是IP地址,是为了方便用户去记忆,而自己设计的一个名字,一般需要花钱购买
【一级域名:最后一个点后面的内容,.com, .net, .cn(如:www.baidu.com的一级域名为:com)
二级域名:一级域名左边,一般为需求方自己设计,一级域名和二级域名连在一起应是全世界唯一(如:www.baidu.com的二级域名为:baidu)
三级域名:一般为用户自定义,最常见的就是www 】
- 端口部分:“8080”,端口可以省略,默认端口(HTTP:80,HTTPS:443,FTP:21)
- 资源路径部分:“/news/index.html”
- 查询参数部分:“uid=123&page=1”,可以允许有多个参数,多个之间用“&”作为分隔符
3. HTTP请求
HTTP请求由客户端发送给服务器,规定了发送给服务器的数据语法格式;请求内容包括:请求行、请求头、请求空行、请求体
3.1 请求行
主要内容:请求方法、 URL、协议版本
(1)请求方法:
(2)协议版本:http1.1、http1.2、http2.0,主要使用 http1.1
3.2 请求头
请求头紧接着请求行,请求头部由键值对组成,每行一对。 请求头部通知服务器有关于客户端请求的信息,典型 的请求头有:
- User-Agent:产生请求的浏览器类型
- Accept:客户端可识别的内容类型列表
- Content-Type:请求体数据的类型,常见的类型有:
- text/html: HTML格式
- text/plain:纯文本格式
- image/jpeg:jpg图片格式
- application/json: JSON数据格式
- application/x-www-form-urlencoded: form表单数据被编码为key/value格式发送到服务器(表单默认的提 交数据格式)
- multipart/form-data: 在表单中进行文件上传时使用
3.3 请求体
POST和PUT请求有请求体,GET和DELETE请求没有请求体。
请求体的数据可以是:表单数据、文本、XML、JSON 与请求数据相关的最常使用的请求头是Content-Type和Content-Length
4. HTTP响应
HTTP响应由服务器回发送给客户端,规定了服务器回发给客户端的数据的语法格式。
HTTP响应也由三个部分组成,分别是:状态行、响应头、响应体
4.1 响应行/状态行
主要内容:协议版本、状态码、状态描述
(1)协议版本
http1.1、http1.2、http2.0,主要使用 http1.1
(2)状态码
针对http请求,响应的状态。
* 状态码由3位数字组成,第一位数字定义了响应类型,有5种可能取值:
- 1xx:指示信息——表示请求已接收,继续处理
- 2xx:成功——表示请求已被成功接收、理解、接受
- 3xx:重定向——要完成请求必须进行更进一步的操作
- 4xx:客户端错误——请求有语法错误或请求无法实现
- 5xx:服务端错误——服务器无法实现合法的请求
更完整的状态码可参照:最全HTTP状态码汇总1XX——5XX_1xx状态码-优快云博客
4.2 响应头
响应头向客户端描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理响应数据
4.3 响应体
响应体就是响应的消息体,数据可以是普通文本、XML、JSON、HTML源码
接口风格
1. 传统风格接口
传统风格接口针对用户的某一个操作(增删改查)URL不唯一,即一个操作可能对应多个URL,响应状态码全部都为 200。
全部使用POST和GET实现对数据的基本操作。
2. RESTful风格接口
RESTful是一种为了提高程序易读性和易维护性而制定的接口设计规范,是一个资源定位、资源操作的风格,而非标准,只是提供了一组设计原则。使用唯一的URL定位唯一的资源。在 URL中不使用动词,而替换使用词,结合请求方法,区分具体增删改查操作。
接口测试流程
step1:分析需求文档,参与需求评审
step2:结合开发提供的接口文档,分析接口
step3:编写接口测试用例
step4:执行接口测试用例(通过Postman、fiddler、jmeter,或者使用代码方式:Python + UnitTest + requests)
- 先保证接口的功能是正确的,保证功能的正确性
- 传递特殊数据,保证接口正确
- 使用JMeter编辑自动化测试脚本
- 性能、压力测试
step5:对缺陷进行跟踪管理
step6:编写接口测试报告
接口测试测试点
功能测试:验证接口功能是否按照接口文档实现(输入+处理+输出)
- 单接口测试
- 正向功能:(通过性测试)
- 参数组合
- 全部参数
- 仅必填参数
- 反向测试:(异常测试)
- 业务数据异常:结合业务功能考虑输出的各种异常返回情况
- 数据异常:数据为空、长度不符、类型不符、错误数据
- 参数异常:无参、少参、多参、错误参数
- 正向功能:(通过性测试)
- 多接口测试:业务场景功能测试(站在用户角度考虑常用的使用场景)
- 接口之间数据依赖