一、接口测试基础
1. 接口的概念及本质:
接口:实现前端和后端之间数据通信的桥梁,本质就是数据的输入与输出的过程。接口就是有特定输入和特定输出的一套逻辑处理单元。
什么是接口测试:
接口测试其实就是验证接口内部处理逻辑是否正确,既要保证单接口的正确性,也要保证接口的业务逻辑正确性,主要体现在两方面:
① 输入正常的测试数据,验证接口正常处理后返回的结果是否正确(数据结构&数据内容)。
② 输入异常的测试数据,验证接口能否正确处理异常数据并返回特定提示,是否合理,是否健壮。
接口测试的整个实现过程基于通信协议(HTTP),通过该协议发送请求(Request)给服务器,服务器处理并返回相应结果(Response),然后对响应的数据进行分析,判定数据结果是否与预期一致
目前流行的测试模型:
在质量保障过程中,测试工程师会不断增加接口测试的测试深度和测试广度,往下逐渐覆盖一些公共接口的单元测试内容,往上则逐渐覆盖应该由 UI 层保障的业务逻辑测试。
2.接口类型:
(1)按结构划分:系统内部之间的接口(系统与子系统之间)、模块与模块之间的接口、系统与第三方接口(如支付接口、身份校验接口)
(2)按协议划分:
HTTP类型接口:采用 HTTP 协议(应用层)进行通信,在发送请求时仅会响应一次,响应的数据格式通常是键值对格式,即 JSON 格式数据。
Web Service类型接口:采用 SOAP(应用层)进行通信,SOAP协议实际就是基于 HTTP 协议进行封装,其发送请求和响应请求的数据格式都是 XML 格式。
Windows Sockets类型接口:该接口类型是基于传输层进行封装所得到的 Socket 抽象层,客户端与服务器建立连接后,就可以发送请求和响应,大部分应用为 C/S 架构的软件。
3. 接口测试常用工具:
Jmeter:一款免费、开源的性能测试工具
Postman:工具简单、界面简介
SoapUI:一款免费、开源的测试工具,主要实现 Web Service 类型的接口测试,可以完成 Web Service 的功能、负载、性能等测试。
4.接口测试用例编写要点:
思路:
正例:输入正常参数,接口能够成功返回数据
反例:
鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期
参数反例:参数为空,参数类型错误,参数长度异常,参数取值范围是否合法
错误码覆盖:根据业务而定
其他错误场景:接口黑名单,接口调用次数限制,分页场景
* 用例设计一般考虑参数的组合、极值、是否必填、参数类型
6.接口测试流程:
(1)获取需求文档和接口文档
(2)通过需求文档分析接口的业务逻辑要求以及业务边界
(3)通过接口文档分析出接口的技术指标(接口地址、请求方式、入参、出参)
(4)接口测试用例设计(着重于接口测试数据准备)
(5)使用接口测试工具进行接口测试
(6)接口缺陷管理和跟踪
(7)接口自动化持续集成
接口测试工作场景:
单接口的测试:
单接口测试的重点其实就是保证该接口的正确性和健壮性。也就是说既要保证这个接口可以按照需求正确处理传入的参数,给出正确的返回;也可以按照需求,正确拒绝传入非正确的参数,给出正确的拒绝性返回。
总结:需要有足够的用例保证接口能正确处理各种正常情况和异常情况。
业务流程的接口测试(多接口测试):
主要是保障通过多个接口的串联操作可以完成原来需求中提出的业务逻辑。
总结:重点在于业务流程是否能跑通。
拓展:重点关注业务流和数据流的关系,并不需要再过度关心如何用业务流的方法覆盖更多的代码逻辑异常。
多个接口串行分析:
在大部分的测试场景中,我们都需要串行多个接口才能完成一个完整的业务逻辑;多个接口之间并不是随意组合的,而是按照业务逻辑、通过数据传递来完成的。所以要完成整体业务逻辑的接口测试,需要理清每个流程的数据流程,而数据流程驱动了业务处理。
接口测试总结:
(1)接口测试的执行方式、设计思维都和业务测试不完全一致,它们既有差异又有交集
交集部分:它们都会涉及到业务逻辑测试,但是接口测试更加关注于数据驱动的业务流程,而不再着眼于代码异常、代码边界等,这些边界问题在接口测试过程中已经由单接口测试完成了。
接口测试在单接口测试的设计思维上也更加贴近于代码的单元测试,但它还是站在 Client 端的角度来完成测试;而接口测试的业务逻辑测试更加靠近手工业务测试,但却更加聚焦于业务逻辑本身,不再将一些非法业务异常放到该部分进行测试。
(2)在测试手段上,接口测试算是技术驱动和业务驱动双管齐下的工作(界面测试是业务驱动为主的工作)
因此,你需要借助一定的工具来完成接口测试,既可能是成熟的工具,也可能是代码。
7. GET/POST/PUT/DELETE 等类型请求详解:
HTTP报文主要有两种类型:请求报文和响应报文
(1)HTTP请求报文:
请求报文由三部分构成:请求行(请求方法、URL、请求协议版本)、请求头、请求体
(2)不同的请求方法:
GET方法:GET方法要求服务器将 URL 定位的资源存储在响应报文中的数据部分,然后将其返回给客户端。请求参数和对应的值拼接在 URL 后面,使用问号 ? 代表 URL 的结尾与请求参数的开始,参数之间使用 & 连接。不同浏览器地址栏存储的字符长度限制是不同的,一般最多只能识别 1024 个字符,所以传送大量数据不适合使用 GET 方法。
POST方法:在 HTTP 请求数据中封装请求参数,并以键值对的形式存在,可以传输大容量的数据。POST方法对传送的数据大小没有限制,而且不会显示在 URL 中。
PUT方法:PUT请求主要是改变服务器数据,对数据进行修改操作,POST方法是对数据进行增加操作。
DELETE方法:用来删除服务器的数据。
GET方法和POST方法的本质区别:
1.GET方法请求参数直接显示在 URL 中,POST方法请求参数显示在请求体中,所以 POST 方法比 GET 方法更安全;
2.浏览器中地址栏的 URL 地址是有长度限制的,POST 方法携带的参数范围可以大于 GET 方法;
3. GET 方法用于获取数据,POST 方法用于提交数据;
(3)请求头:通知服务器关于客户端请求的信息,由键值对组成
Accept:表示客户端允许进行解析的数据文本类型,*/* 表示允许接收解析所有文本数据类型;
Accept-Encoding:表示客户端期望接收到的响应体(body)的压缩编码类型;
Accept-Language:表示客户端允许接收的语言,默认是 zh_cn;
Authorization:HTTP授权证书
Connection:表示客户端与服务器的连接类型,keep-alive:表示长连接,客户端可以继续向服务器发送请求,且保持当前状态;close:表示会话结束。
Content-Length:表示请求体的文本长度
Content-Type:表示请求或响应实体主体的媒体类型,text/html:html类型,application/json:请求或返回 json 格式数据类型
Cookie:浏览器 cookie
User-Agent:表示客户端操作系统、浏览器相关信息
(4)HTTP响应报文:
响应报文由三部分组成:状态行、响应头、响应正文
状态行构成:协议/版本、状态码、状态
协议/版本:表示服务器 HTTP 协议的版本
状态码:表示服务器返回的响应状态码
状态:状态码的文本描述
状态码:由三位数字组成,第一个数字定义了响应的类别
1xx:提示信息,服务器已经接收了当前请求,期待下一步操作请求,代表状态码 100
2xx:表示请求以成功接收,期待下一步操作请求,代表状态码 100
3xx:重定向,要完成请求必须进一步操作,代表状态码:301、302、304
4xx:客户端错误,请求有语法错误或请求无法实现,代表状态码:403、404
5xx:服务器错误,服务器未能实现合法的请求,代表状态码 500
8. cookie、token与session
(1)什么是 cookie:
cookie:永久存储在浏览器中的一种数据类型,在服务器上生成,然后发送给客户端浏览器进行保存。cookie以键值对的形式保存在浏览器指定的某个目录中,下一次对同一个网站发送请求时会携带该 cookie 发送给服务器。
cookie类别:会话cookie 和 持久cookie 两种。
会话cookie:就是 session cookie,是一种临时 cookie,当用户执行退出浏览器操作时,这个 cookie 就会被删除从而失去效果;
持久cookie:存储在用户的硬盘上,浏览器退出或计算机重启时它们仍然存在。持久cookie表示其生命周期不单单局限于当前会话中,也会存储在本地磁盘上,生命周期由开发人员控制。
(2)什么是session:
session:服务器为了知道当前发送请求给自己的是谁,会给每个客户端完成身份标识操作,然后客户端后续每次发送请求给服务器时都需要携带这个身份标识,这样服务器就清楚是哪个客户端发送的请求了。
session 在用户操作完对应的网站后会被销毁,此时 session 会将用户访问的相关信息临时存储在服务器上。
(3)什么是token:
token:为了不让别人伪造,对数据做一个签名,例如使用算法加密钥对数据做一个签名,把这个签名和数据一起作为 token。
token验证过程:
(1)用户通过用户名和密码发送请求;
(2)程序验证,并返回一个签名的 token 给客户端;
(3)客户端存储 token,并且用于每次发送请求;
(4)服务器验证 token 并返回数据。
(4)什么是认证:
认证:验证当前用户的身份。认证场景:用户名密码登录,手机号接收验证码,只要用户名能收到验证码就默认你是账号的主人。
(5)什么是授权:
授权:给第三方授权某些权限。授权场景:手机安装应用提示 “是否允许授予权限”,实现授权的方式:cookie、session、token等。
(6)什么是凭证:
凭证:用于标记访问者的身份,完成认证或者授权等操作之前必须先拥有凭证。
(7)cookie与session的区别:
安全性:cookie是客户端存储机制,session是服务器存储机制,所以 session 比 cookie 安全性更高;
存储值类型不同:cookie只能存储字符串数据,session可以存储任意数据类型;
有效期不同:cookie可以设置长时间保持,session 一般在客户端关闭或者 session 超时等情况下就失效了;
存储大小不同:cookie 保存的数据容量最大不能超过 4K,session 的存储数据容量要大于 cookie;
(8)token与session的区别:
(1)session是有状态化的,会就并存储会话信息;而 token 是无状态化的,不会存储会话信息。
(2)session是依赖链路层来来提高通信安全的,而 token 是通过身份认证方式。
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)