当前位置: 首页 > news >正文

【学习总结】AI接口测试-零基础从接口概念到客达天下系统Apifox+DeepSeek接口测试实战全流程

视频教学参考:接口自动化测试

一、Apifox入门

1.理解接口基础概念

1)接口概念

接口:全称是Application Programming Interface,中文翻译为应用程序编程接口。
作用:给前端与后端提供交互数据的通道。在Web开发中,承担前后端数据传输的桥梁作用。

2)实战-查看请求记录

1)打开浏览器,按 F12/fn+F12(打开浏览器的开发者工具)
2)切换到 “Network” (网络)面板
3)勾选 “Preserve log” (保留日志)

2.HTTP协议核心要素

1)HTTP协议

2)URL的组成

完整URL由协议类型、主机地址、端口号、资源路径和查询参数五部分组成。以“ https://api.example.com:443/v1/users?id=1 "为例:

●协议(https):通信协议
●主机名(api.example.com):服务器地址
●端口(443):服务器入口(通常省略)
●路径(/v1/users):资源位置
●查询参数(id=1):过滤条件

3)请求方法(request methods)

HTTP协议定义了八种请求方法,其中GET(获取资源)和POST(提交数据)最为常用。

4)请求头与请求体

请求头包含Content-Type、Authorization等重要元信息,请求体则承载实际传输数据。

5)状态码(staus code)——服务器的回应

状态码分为五大类,200表示成功,400系客户端错误,500系服务端错误。

6)响应头与响应体

3.接口测试

1)特点

Apifox整合了接口调试、文档管理、Mock服务和性能测试等功能.

Apifox = Postman + Swagger + Mock +JMeter

2)测试流程

3)软件安装

官网下载https://apifox.com/ 对应系统版本安装包(Windows用户执行exe安装程序)

4.创建项目

  1)点击“新建项目”,输入项目名称“Itheima001”,点击创建。
  2)在项目内,点击“新建接口”。
  3)在中间工作区,请求方法选择GET,输入URL:http://hmshop-test.itheima.net/ 
  4)点击蓝色的“发送”按钮

二、Apifox请求参数详解

1.Query参数

附在URL末尾上,适合GET请求传递简单数据。格式为“ q=小米 ”,在Apifox的Params选项卡配置。例如商品搜索接口:

https://hmshop-test.itheima.net/Home/Goods/search.html?q=小米

位置:位于URL问号?之后。(例:q=小米)
格式:键=值pairs,多个参数用&连接。(例:name=张三&age=18)
作用:用于GET请求,向服务器传递过滤、分页、排序等轻量级参数
特点:拼接在URL后,速度快,长度受限,适合简单数据
Apifox位置:"Params”选项卡

2.Body参数

请求的“主体内容”,登录接口典型配置:

{
  "username": "admin",
  "password": "123456"
}

位置:在请求内部,不会显示在URL中。
格式:最常用的是JSON(复杂数据结构),也可以是form-data(适合文件上传)、xml等。
作用:用于POST、PUT等请求,提交大量数据,如创建用户、登录、下单。
类型

  • Json:结构化数据格式,支持复杂嵌套,常用于API交互,放在请求体
  • form-data:可传文件和键值对,数据分隔传输,无严格长度限制。
  • x-www-form-urlencoded:键值对用&连接,URL编码格式,适合简单表单数

Apifox位置:“Body”选项卡。

3. Header参数

内容:包含请求的元信息,常见配置项:

  • Content-Type: application/json(告诉服务器Body的格式)
  • Authorization: Bearer xxxx(身份认证令牌)
  • User-Agent: Mozilla/5.0

位置:在请求的头部,描述请求本身的信息。
作用:定义如何处理请求和响应,如内容类型、认证信息、客户端类型等。
特点:与业务数据无关,是关于数据的数据(元数据)。

4.三者比较与案例实现

Query:用于GET请求,在URL中传递轻量参数。
Body:用于POST/PUT请求,在请求体内提交主要数据。
Header:在请求头部传递元数据,如认证和内容类型。

Querybodyheader
位置URL中请求体内请求头部
常用方法GETPOST,PUTALL
作用过滤、查询提交数据元数据、认证
可见性

三、自动判断响应结果

1.断言概念

是判断实际测试结果与预期结果是否一致的检查点,不一致则标记为失败。

2.验证

状态码断言是基础验证,如:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

JSONPath响应体断言是主力,如:

pm.test("Verify username", function() {
    var jsonData = pm.response.json();
    pm.expect(jsonData.user.name).to.eql("John");
});

常用JSONPath表达式:

  • $.data.items[0].id 获取首个物品ID
  • $..price 递归查找所有价格字段
  • $.orders[*].status 获取所有订单状态

3.符号含义

    ① $表示根节点
    ② .用于访问子节点(如 $.data.name)
    ③ []用于访问数组元素(如$.list[o]取第一个元素,$.id递归匹配所有id)
    ④ *匹配所有元素(如$.data.*匹配data下所有子节点)

四、接口关联与提取自动处理

环境变量管理不同测试环境的配置数据,接口关联通过变量提取和引用实现。典型测试流程:

  1. 获取验证码接口提取uid
  2. 登录接口调用uid并返回token (其他接口获取token检查是否已登录)
  3. 查询接口携带token获取业务数据
  4. 操作接口使用获取的数据id执行操作

实战2:查询课程列表

Hearders添加请求头部Authorization-->{{token}}

参数名称参数值是否必填示例备注
Authorizationtoken

eLpNm9m_8UCGrTTshmlNgfXpDsc1f2m2UA

登录接口

●将token值保存在环境变量中:“登录接口”-->“后置操作”-->“添加后置操作”-->“提取变量”-->“填写”

●环境变量验证token结果:

●查询课程列表-->“Headers”-->应用输入“token”

实战3:课程管理模块-删除课程

“删除课程接口”依赖于查询课程列表的 “id” 与 登录接口的 “token”


●新建删除接口,删除指定id课程(添加删除课程接口{{c_id}})环境变量自动更新本地值;

关联登录添加请求头部Authorization-->{{token}}


●调用查询课程列表接口,查询对应课程已删除;

{{c_id}}-->每次删除指定id($.rows[0].id)的课程

●环境变量验证c_id结果:

五、数据库操作校验

1.数据库基本配置

2.案例:新增课程并验证数据库

数据库配置--->应用配置编写SQL语句(如下)--->验证结果

1)在MySQL中创建表(这里直插入了一组数据)

 -- 删除原表(谨慎操作!先备份数据)DROP TABLE IF EXISTS `tb_course`;-- 重新创建表CREATE TABLE IF NOT EXISTS `tb_course` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '课程ID',`name` varchar(100) DEFAULT NULL COMMENT '课程名称',`code` varchar(50) DEFAULT NULL COMMENT '课程代码',`subject` varchar(50) NOT NULL COMMENT '学科类别',`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '课程价格',`applicable_person` varchar(20) NOT NULL DEFAULT '2' COMMENT '适用人群',`info` text COMMENT '课程介绍',`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标记:0-未删除,1-已删除',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `uk_code` (`code`),KEY `idx_name` (`name`),KEY `idx_subject` (`subject`),KEY `idx_create_time` (`create_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程信息表';-- USE course_management;INSERT INTO tb_course (name, subject, price, info) VALUES ('手动测试课程', '6', 899, '测试数据');

SELECT id FROM tb_course WHERE name="测试开发提升课程-new999001";

2)Apifox中连接数据库-->新建

3)填写本地数据库信息-->测试连接-->保存

4)补充Apifox-05新增课程中的信息

Body:

{

    "name": "测试开发提升课程-new999001",

    "subject":"6",

    "price":899,

    "info":"测试开发提升课程01"

}

Headers:

authorization   {{token}}

后置操作:控制台打印结果(主包的控制台没有输出idhttps://chat.deepseek.com/share/vrmf0x37r11rex0lkl AI老师暂时未解答出问题所在,个人感觉可能还是数据库的问题)

SELECT id FROM tb_course WHERE name="测试开发提升课程-new999001";

六、Apifox接口文档管理

定义请求和响应--->发布文档

1.添加响应示例

2.分享文档(便于团队协作测试)

七、Mock(不依赖于后端开发进度)

1.Mock(Method Object Collaboration Kit)作用

隔离测试环境
Mock可以替代真实的依赖组件(如数据库、API、第三方服务等),确保测试仅针对当前模块的逻辑,避免因外部依赖的不稳定性或不可控性导致测试失败。

提高测试速度
真实的外部服务或数据库操作可能较慢,Mock通过模拟快速响应,显著提升单元测试的执行效率。

模拟异常场景
Mock可以轻松构造异常情况(如网络超时、服务不可用等),验证代码在极端条件下的容错能力,而无需真实触发这些场景。

避免副作用
某些操作(如发送邮件、修改数据库)可能产生实际影响,Mock可以拦截这些调用,确保测试不会对生产环境造成意外影响。

简化复杂依赖
当被测对象依赖复杂或未完成的模块时,Mock可以快速模拟这些依赖的行为,无需等待依赖开发完成。

2.设置mock

3.使用mock

每次自动生成body中字段具体值

返回自定义值:新建mock期望

八、测试场景搭建

1.自动化测试

1.在项目中,切换到“自动化测试”模块-->点击“新建测试场景”。


2.“添加步骤”-->“从接口导入”,将之前创建好的“图片验证码”“用户登录”“查询课程列表”、“新增课程”等接口用例按序添加进来。


4.通过拖拽调整它们的顺序为:1.图片验证码->2.用户登录->3课程列表->4.新增课程->5.删除课程。

5.右侧“功能测试”-->选择通知对象分享

https://app.apifox.com/link/project/7220961/api-test/test-report/15644116?branchId=6947315

2.企业级测试化场景runner

1. 在Apifox桌面端,进入“团队资源”->“通用Runner”。


2. 点击“部署通用Runner”,复制生成的Docker运行命令。
3.(概念演示)在一台Linux服务器的终端中,粘贴并执行该命令(需先运行Docker)


4. 命令执行成功后,在Apifox客户端点击刷新,看到Runner状态“已启动”。

九、解读文档和设计测试点

1.测试点发散

基于登录接口API描述,为‘登录’接口设计全面的测试点。包括:正常流程、边界值、异常场景。输出:将测试点汇总表格输出

2.单个参数的深度分析

针对接口参数名为 “uuid”,描述是 “生成验证码接口” 的参数设计测试点。

3.练习

https://chat.deepseek.com/share/4cu7rvdq1jq7wbnuw4

十、总结

        课程内容总体偏向Apifox在接口自动化测试中的应用操作,熟悉工具使用流程,个人感觉不太适合想系统学习测试的小伙伴。加油吧!

http://www.dtcms.com/a/477711.html

相关文章:

  • 【苍穹外卖笔记】Day04--套餐管理模块
  • 初识redis(分布式系统, redis的特性, 基本命令)
  • [特殊字符] Avalonia + Silk.NET 加载 3D 模型时 GenBuffer 返回 0?这是个底层兼容性陷阱!
  • 学习threejs,打造交互式花卉生成器
  • Redis 学习笔记(二)
  • 北京展览馆网站建设wordpress插件排列
  • 北京做网站优化多少钱最基本最重要的网站推广工具是
  • 每日算法刷题Day70:10.13:leetcode 二叉树10道题,用时2h
  • MySQL 设置远程 IP 连接方式(含自动检测授权脚本)
  • flash型网站网址高校思政课网站建设
  • 网站建设费做什么会计科目硬件开发外包平台
  • 【SpringBoot从初学者到专家的成长15】MVC、Spring MVC与Spring Boot:理解其差异与联系
  • Docker 存储与数据共享
  • k8s storageclasses nfs-provisioner 部署
  • Linux(Samba服务)
  • 电商智能客服进化论:多轮对话+意图识别+知识推荐系统开发
  • 算法198. 打家劫舍
  • 刚学做网站怎么划算全栈网站开发工程师
  • 长春网站优化公司wordpress目录遍历漏洞
  • 华为OD-23届考研-Java面经
  • 10.9 鸿蒙创建和运行项目
  • delphi调用C#编写的DLL
  • 从API调用到智能体编排:GPT-5时代的AI开发新模式
  • C++学习录(1):C++入门简介,从零开始
  • 电力专用多功能微气象监测装置在电网安全运维中的核心价值是什么?
  • 科研快报 |声波“听”见火灾温度:混合深度学习重构三维温度场
  • 从超级大脑到智能毛细血管:四大技术重构智慧园区生态版图
  • 旅游网站建设方案书制作一个网站平台需要多少钱
  • SQL入门:集合运算实战指南
  • Docker 网络类型与容器通信