接口测试基础
一、认识接口测试

接口测试
接口:系统之间数据交互的通道。
-
硬件接口
-
软件接口

接口测试:基于不同的输入参数,校验接口响应数据与预期数据是否一致。
为什么要学接口测试?
-
提前介入测试、尽早发现问题
-
中级测试工程师必备技能

接口测试学什么?
-
接口测试用例设计
-
工具实现接口测试
-
代码实现接口测试

二、项目介绍
项目介绍
-
项目名称:客达天下
-
项目类型:销售管理系统 (CRM)
-
项目特点:
-
前后端分离
-
功能通用性强
-

熟悉项目
-
项目角色:销售人员、销售经理、财务人员等
-
项目业务:线索管理、合同管理等
-
项目技术:

待测接口
需求:完成管理业务及相关单位模块接口测试。
合同管理业务登录添加课程上传合同新增合同
课程管理模块添加课程修改课程查询课程删除课程

接口测试流程

三、HTTP协议

URL
URL:是互联网上标准资源的地址,一般称为统一资源定位符。
组成:协议://hostname[:port]/path/ [?查询参数1 & 查询参数2]
示例:

HTTP协议
HTTP:超文本传输协议,基于请求与响应的应用层协议
作用:规定了客户端与服务器之间信息传递规范,是二者共同遵守的协议。
组成:
-
HTTP请求:定义请求数据格式
-
请求行、请求头、请求体
-
-
HTTP响应:定义响应数据格式
-
状态行、响应头、响应体
-
HTTP —请求行
位置:请求数据第一行
作用:说明需求方法、访问的资源、协议版本

常用请求方法:
-
GET:从服务器获取资源
-
POST:在服务器新建一个资源
-
PUT:在服务器更新资源
-
DELETE:从服务器删除资源
HTTP请求—请求头
位置:请求数据第二行到空白行之间
作用:通知服务器客户端请求信息
特点:请求头部由键值对组成,每行一对

Content-Type:请求体数据类型
-
text/html:HTML格式
-
image/jpeg:jpg图片格式
-
application/json:JSON数据格式
-
application/x-www-form-urlencoded:表单默认的提交数据格式
-
multipart/form-data:在表单中进行文件上传时使用
HTTP请求—请求体
位置:空白行之间的内容
作用:传输数据实体
注意:请求体常在POST、PUT方法中使用
常配合的请求头:Content-Type和Content-Length

-
请求报文中可以没有请求体数据
HTTP响应—状态行
位置:响应数据第一行
作用:描述服务器处理结果
内容:状态行由协议版本号、状态码、状态消息组成

状态码:三位数字组成,第一个数字定义响应类别
1XX:提示信息2XX:成功3XX:重定向4XX:客户端错误5XX:服务端错误
HTTP响应—常见的响应状态码

HTTP响应—响应头
位置:第二行开始到空白行之间
作用:描述客户端要使用的一些附加信息
特点:响应头由键值对组成,每行一对

HTTP响应—响应体
位置:响应数据空白行之后
作用:服务器返回的数据实体
特点:有图片、json、xml、html等多种类型

案例:

四、接口规范
接口规范
作用:让前端开发与后台接口开发人员更好的配合,提高工作效率
常见接口规范:
传统接口风格
RESTful接口风格

传统接口风格
示例:对用户进行操作的相关接口,包括增删改查

RESTful
RESTful:一种网络应用程序的设计风格和开发方式,提供了一组设计原则和约束条件。
示例:

特点:
- 请求 API 的 URL 用来定位资源
- 通过标准HTTP方法对资源进行增删改查操作
- 利用HTTP状态码返回状态信息
区别

Postman测试步骤

一、合同新增业务

二、找业务路径

三、解析接口文档

四、编写接口测试用例

总结

Postman使用
一、Postman介绍
介绍:Postman是一款接口调试工具
特点:支持 Mac、Windows 和 Linux
下载:
https://www.getpostman.com

二、登录接口调式
获取验证码
需求:使用postman访问验证码接口,并查看响应结果地址:
http://kdtx-test.itheima.net/api/captchaimage实现步骤1.设置请求方式2.输入接口地址3.点击发送请求4.查看响应结果

登录
需求:使用Postman访问验证码接口,并查看响应结果说明:地址:http://kdtx-test.itheima.net/api/login方法:post请求数据:请求头:Content-Type:application/json请求体:["username": "admin","password": "admin 123","code":"2","uuid":"验证码接口返回结果中的数据值"]实现步骤:1.设置请求方式2.输入接口地址3.点击发送请求4.查看响应结果

总结

三、自动关联数据
问题:每次登录之前都需要手动复制验证码数据
思路:

自动关联数据
环境创建与选择

案例:使用自动关联技术,实现登录成功
需求:
1.验证码接口:/api/captchaimage2.登录接口:/api/login登录接口请求体uuid字段 -> 验证码接口返回 uuid字段
分析:
1.验证码接口响应体中提取uuidvar jsonData = pm.response.json();2.设置环境变量保存uuidpm.environment.set("var_name",value);3.登录接口引用uuid请求参数中引用: {{var_name}}

总结

接口调式
一、添加课程接口调试

二、上传合同接口调试

Postman调试合同上传接口


三、新增合同接口调试
添加合同接口调试

注意:
测试数据中的合同编号 contracNo 必须唯一。
查询合同列表接口调试

总结

Postman进阶
一、批量执行

Postman批量执行
作用:通过运行测试集的方式批量运行测试用例
步骤:
-
点击测试集中的 "Run" 按钮,批量运行测试用例
-
弹出 Collection Runner窗口,点击运行按钮
-
查看测试结果




二、登录接口测试

案例:完成 KDTX项目登录接口用例设计
需求:已注册正确的用户名和密码,登录成功用户名或密码错误,登录失败,提示 "用户名或密码错误"需求:按照接口测试思路进行测试点分析从测试点转化为测试用例使用Postman进行接口测试
提取测试点

设计测试用例

步骤:
-
点击测试集中的 "Add folder" 添加文件夹管理测试用例
-
点击文件夹上的 "Add Request" 添加请求实现测试用例

总结

三、Postman断言
Postman断言介绍
作用:让Postman工具代替人工自动判定预期结果和实际结果是否一致。
用法:

Postman断言—响应状态码断言
模块名称:Status code:Code is 200
模块内容:
// 判断响应状态码是否等于 200
pm.test("status code is 200", function() {pm.response.to.have.status(200);
});
pm.test()
参数1:字符串-测试断言名称
参数2:回调函数-具体断言语句
pm.response.to.have.status(code:Number); // 判断是否包含指定的状态码
Postman断言—包含指定字符串断言
模块名称:Response body: Contains string
模块内容:

Postman断言—JSON断言
模块名称:Response body: JSON value check
模块内容:


总结

四、参数化
Postman参数化介绍
场景:测试脚本中仅测试数据不一样,使用参数化比提高脚本复用。
步骤:
-
测试数据保存在数据文件单独维护
-
引用数据文件实现脚本循环调用

Postman参数化实现
准备数据文件

引用数据文件数据

Postman参数化实现
选择数据文件:运行测试集时选择数据文件


总结

课程项目实践
一、课程添加
课程添加接口文档


1.提取测试点

2.设计测试用例

3.使用Postman进行接口测试
步骤:
-
点击测试集中的 "Add folder" 添加文件夹管理测试用例
-
点击文件夹上的 "Add Request" 添加请求实现测试用例

总结

二、查询课程列表
查询课程列表接口文档


提取测试点

设计测试用例

三、课程修改
课程修改接口文档


提取测试点

设计测试用例

四、课程删除
课程删除接口文档


提取测试点

设计测试用例

相关文章:
接口测试基础
一、认识接口测试 接口测试 接口:系统之间数据交互的通道。 硬件接口 软件接口 接口测试:基于不同的输入参数,校验接口响应数据与预期数据是否一致。 为什么要学接口测试? 提前介入测试、尽早发现问题 中级测试工程师必备技能 接口测试学…...
为什么 from . import * 不会导入子模块
为什么 from . import * 不会导入子模块 在 Python 中,from . import * 并不会自动导入子模块。这是因为 import * 的行为是由模块的 __all__ 变量决定的。如果没有定义 __all__,它只会导入当前模块中定义的顶层变量和函数,而不会递归地导入…...
LangGPT结构化提示词编写实践
langGPT提示词 # Role: 浮点数比较助手 ## Profile - author: LangGPT - version: 1.0 - language: 中文 - description: 一个专门帮助用户进行浮点数比较的助手,确保LLM能够准确识别和对比浮点数。## Skills 1. 理解浮点数的结构和数值意义。 2. 精…...
React: class 和 style
一、class 1、在react中使用className属性来绑定类名 <div className"header flex-middle-middle">添加2个类名 </div>2、动态添加类名 <div className{item ${nameactive ? active : }}>动态添加active类名 </div>二、style 1、react中…...
【数据结构】包装类、初识泛型
🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…...
TCP客户端connect断线重连
文章目录 TCP客户端connect断线重连1、为什么要断线重连2、实现代码 TCP客户端connect断线重连 1、为什么要断线重连 客户端会面临服务器崩溃的情况,我们可以试着写一个客户端重连的代码,模拟并理解一些客户端行为,比如游戏客户端等. 考虑到…...
细说MCU用DMA改变DAC输出信号频率和改善输出波形质量的方法
目录 一、参考硬件 二、修改定时器参数改变输出波形频率 三、改善波形质量 四、代码修改 五、查看结果 一、参考硬件 本项目的软件硬件工程参考作者的其他文章:细说MCU用DMA实现DAC输出的方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/14065…...
Java高级面试题
文章目录 Java高级特性Java 8 中的新特性有哪些?Lambda 表达式的用途是什么?Stream API 的工作原理是什么?Optional 类的作用是什么?什么是函数式接口?Java 9 之后的新特性有哪些? 并发编程Java中的线程池是…...
USART串口理论知识总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 USART串口理论知识总结 1、通讯的串行和并行1.串口采用发送数据代码并用printf重代码 1、通讯的串行和并行 1.串口采用发送数据代码并用printf重代码 #include <stdint.h…...
基于 HTML+ECharts 实现智慧景区数据可视化大屏(含源码)
构建智慧景区数据可视化大屏:基于 HTML 和 ECharts 的实现 随着旅游业的蓬勃发展,智慧景区的概念逐渐深入人心。通过数据可视化,景区管理者可以实时监控游客流量、设施使用情况以及环境状况,从而提升游客体验和管理效率。本文将详…...
vxe-table——实现切换页码时排序状态的回显问题(ant-design+elementUi中table排序不同时回显的bug)——js技能提升
之前写的后台管理系统,都是用的antdelement,table组件中的【排序】问题是有一定的缺陷的。 想要实现的效果: antv——table组件一次只支持一个参数的排序 如下图: 就算是可以自行将排序字段拼接到列表接口的入参中,…...
SQL
SQL全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。 SQL通用语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的…...
maven archetype
1.简介 maven脚手架是为了创建一个项目模板,以后新建项目都能够复用该模板 maven中模板引擎使用的是velocity,在文件中可以使用它的语法获取变量等操作 2.实现 单模块脚手架实现 pom.xml <?xml version"1.0" encoding"UTF-8"?> &…...
浏览器打开抽奖系统html
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <script src"https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <style> body {…...
微信小程序-使用Component方法代替Page方法构造页面
一.使用Component方法的前提条件 在小程序js文件里使用Component方法代替Page方法需要在json文件里面定义usingComponents属性 {"usingComponents": {} }二.注意事项 1.在page页面里使用的钩子函数和事件监听方法都需要写在methods对象里面 methods:{update(){thi…...
Spark SQL----DISTRIBUTE BY子句
Spark SQL----DISTRIBUTE BY子句 一、描述二、语法三、参数四、例子 一、描述 DISTRIBUTE BY子句用于根据输入表达式对数据进行重新分区。与CLUSTER BY子句不同,这不会对每个分区内的数据进行排序。 二、语法 DISTRIBUTE BY { expression [ , ... ] }三、参数 e…...
HTML5-canvas1
1、canvas:创建画布 <canvas id"canvas"></canvas>2、画一条直线 var canvasdocument.getElementById(cancas); canvas.width800; canvas.height800; var contextcanvas.getContext(2d); //获得2d绘图上下文环境 //画一条直线 c…...
【NOI-题解】1009 - 数组逆序1162 - 数组元素的删除1211 - 数组元素的插入1161. 元素插入有序数组1159. 数组元素的移动
文章目录 一、前言二、问题问题:1009 - 数组逆序问题:1162 - 数组元素的删除问题:1211 - 数组元素的插入问题:1161. 元素插入有序数组问题:1159. 数组元素的移动 三、感谢 一、前言 本章节主要对数组问题中数组元素移…...
新电脑如何设置 npm 源及查看源、安装 cnpm、pnpm 和 yarn 的详细教程
当你获得一台新电脑,或需要在现有电脑上优化 JavaScript 和 Node.js 的开发环境时,正确配置 npm 是一步不可少的过程。本教程将详细指导你如何设置 npm 源,查看当前源,以及如何安装 cnpm、pnpm 和 yarn。 1. 设置 npm 源 npm (N…...
完全移动huggingface模型仓库(不是简单mv)
Linux中移动huggingface模型仓库 参考链接 先在bashrc中配置: export HF_DATASETS_CACHE"/your/path/dataset" export HF_HOME"/your/path/" export HUGGINGFACE_HUB_CACHE"/your/path/hub" export TRANSFORMERS_CACHE"/your…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
接口 RESTful 中的超媒体:REST 架构的灵魂驱动
在 RESTful 架构中,** 超媒体(Hypermedia)** 是一个核心概念,它体现了 REST 的 “表述性状态转移(Representational State Transfer)” 的本质,也是区分 “真 RESTful API” 与 “伪 RESTful AP…...
JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/锁消除
目录 一 基础 1 概念 2 卖票问题 3 转账问题 二 锁机制与优化策略 0 Monitor 1 轻量级锁 2 锁膨胀 3 自旋 4 偏向锁 5 锁消除 6 wait /notify 7 sleep与wait的对比 8 join原理 一 基础 1 概念 临界区 一段代码块内如果存在对共享资源的多线程读写操作…...
