聊一聊接口测试如何设计有效的错误响应测试用例

news2025/6/7 21:31:29

目录

一、 覆盖常见的错误场景

a. 输入验证错误

b. 认证与权限错误

c. 资源操作错误

d. 业务逻辑错误

e. 服务端错误

二、设计测试用例的关键原则

a. 明确的错误信息

b. 正确的 HTTP 状态码

c. 幂等性处理

d. 安全性与敏感信息

三、测试用例设计模板

四、工具与自动化实践

五、典型错误响应测试用例示例

参数错误类

权限与认证类

业务逻辑错误类

数据异常类

依赖服务故障类

安全漏洞类


接口能够正确处理各种错误情况,返回合适的错误响应,这样做的目的应该是提高系统的稳定性和用户体验,避免因为错误的处理不当导致系统崩溃或者数据泄露。

接口测试主要验证不同系统组件之间的交互是否正确,包括请求和响应的数据格式、状态码、错误处理等。错误响应测试用例的设计是为了确保当接口接收到无效或意外的输入时,能够返回预期的错误信息,而不是崩溃或返回不明确的结果。

输入验证错误、认证失败、资源不存在、业务逻辑错误、服务器错误等。每个错误类型对应的HTTP状态码也要正确,比如400表示客户端错误,401未授权,404资源不存在,500服务器错误等。

我们还要考虑如何覆盖各种边界情况和异常情况。例如输入超出范围的参数、必填字段缺失、数据类型不匹配、特殊字符注入等。这些都属于输入验证的错误,应该返回4xx的状态码,并附带具体的错误信息。

还有资源相关的错误,比如访问不存在的资源,或者尝试操作其他用户的资源,这时候需要404或403。同时,处理并发操作时的冲突,比如使用版本号或时间戳来检测资源是否已被修改,返回409 Conflict。

设计有效的错误响应测试用例是接口测试的关键环节,确保接口在异常场景下返回预期的错误信息、状态码和响应体。

一、 覆盖常见的错误场景

a. 输入验证错误

测试点:

必填字段缺失:移除必填参数,验证返回 400 Bad Request 及错误描述(如 "username is required")。

数据类型不匹配:传递字符串到数值字段,验证 400 及错误提示(如 "age must be a number")。

参数超出范围:输入超过允许范围的数值(如年龄为 -1 或 200),验证 400 及合理提示。

格式错误:测试无效的日期、邮箱、手机号格式,返回 400 及具体原因(如 "Invalid email format")。

非法字符:注入特殊字符(如 !@#)、SQL 或 XSS 攻击字符串,验证接口过滤并返回 400。

b. 认证与权限错误

测试点:

无效 Token:使用过期或伪造的 Token,验证返回 401 Unauthorized。

权限不足:普通用户尝试访问管理员接口,返回 403 Forbidden。

认证方式错误:缺失 Authorization 头或使用错误的认证类型(如 Basic 代替 Bearer),返回 401。

c. 资源操作错误

测试点:

资源不存在:请求不存在的资源 ID,返回 404 Not Found(如 "/users/9999")。

资源冲突:重复创建唯一性约束的资源(如相同用户名),返回 409 Conflict。

操作不允许:对只读资源执行写操作(如 GET 接口接收 POST 请求),返回 405 Method Not Allowed。

d. 业务逻辑错误

测试点:

状态不合法:尝试取消已完成的订单,返回 400 及业务错误码(如 "Order already completed")。

依赖条件不满足:下单时库存不足,返回 400 及明确提示(如 "Insufficient stock")。

违反业务规则:转账金额为负数,返回 400 及错误码(如 "Amount must be positive")。

e. 服务端错误

测试点:

依赖服务不可用:模拟数据库连接失败或第三方 API 超时,返回 503 Service Unavailable 或 500 Internal Server Error。

服务器超负荷:高并发下返回 429 Too Many Requests 并建议重试时间。

二、设计测试用例的关键原则

a. 明确的错误信息

响应体中需包含机器可读的 error_code 和人类可读的 message,例如:

json

代码语言:javascript

{  "error_code": "INVALID_REQUEST",  "message": "Username must be 6-20 characters."}

b. 正确的 HTTP 状态码

遵循 REST 规范:

4xx:客户端错误(如 400, 401, 404)。

5xx:服务端错误(如 500, 503)。

c. 幂等性处理

对于重试场景(如支付接口),设计重复请求的测试用例,验证是否返回 409 Conflict 或幂等性处理结果。

d. 安全性与敏感信息

避免在错误响应中暴露敏感信息(如数据库错误详情、服务器路径),防止信息泄露。

三、测试用例设计模板

图片

图片

四、工具与自动化实践

工具选择:

Postman/Newman:手动或自动化执行测试集合。

pytest + requests:编写自动化测试脚本。

JMeter:模拟高并发下的错误场景。

断言设计:

验证状态码、错误码、错误消息、响应时间。

检查响应头(如 Retry-After 用于限流场景)。

五、典型错误响应测试用例示例

参数错误类

测试用例1:必填参数缺失

接口:POST /api/users(创建用户)

场景:未提供必填字段email

输入:{"name": "Alice"}

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "MISSING_REQUIRED_FIELD",  "message": "The 'email' field is required.",  "details": {"missing_field": "email"}}

测试用例2:参数类型错误

接口:GET /api/products?page=1&size=abc(分页查询商品)

场景:size参数传入非数字字符串

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "INVALID_PARAM_TYPE",  "message": "The 'size' parameter must be an integer.",  "details": {"field": "size", "received_type": "string"}}

权限与认证类

测试用例3:未授权访问

接口:GET /api/admin/dashboard(管理员仪表盘)

场景:请求头未携带Authorization Token

预期响应:

状态码:401 Unauthorized

响应体:

json

代码语言:javascript

{  "code": "UNAUTHENTICATED",  "message": "Authentication credentials are missing."}

测试用例4:权限不足

接口:DELETE /api/orders/123(删除订单)

场景:普通用户尝试删除他人订单

预期响应:

状态码:403 Forbidden

响应体:

json

代码语言:javascript

{  "code": "INSUFFICIENT_PERMISSIONS",  "message": "You are not authorized to perform this action."}

业务逻辑错误类

测试用例5:库存不足

接口:POST /api/cart/checkout(购物车结算)

场景:商品库存为5,用户尝试购买10件

输入:{"items": [{"product_id": 1001, "quantity": 10}]}

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "INSUFFICIENT_STOCK",  "message": "Product 1001 only has 5 units available.",  "details": {"product_id": 1001, "available": 5, "requested": 10}}

测试用例6:重复提交(幂等性校验)

接口:POST /api/payments(发起支付)

场景:重复提交相同请求(相同idempotency_key)

输入:{"amount": 100, "currency": "USD", "idempotency_key": "abc123"}

预期响应:

状态码:409 Conflict

响应体:

json

代码语言:javascript

{  "code": "DUPLICATE_REQUEST",  "message": "A request with the same idempotency key already exists.",  "details": {"idempotency_key": "abc123"}}

数据异常类

测试用例7:查询不存在的资源

接口:GET /api/users/999(获取用户详情)

场景:用户ID=999不存在

预期响应:

状态码:404 Not Found

响应体:

json

代码语言:javascript

{  "code": "RESOURCE_NOT_FOUND",  "message": "User with ID 999 does not exist."}

测试用例8:数据格式错误

接口:POST /api/events(创建事件)

场景:start_time字段格式非法(如"2023-13-01T10:00:00Z")

输入:

代码语言:javascript

{"name": "Meeting", "start_time": "2023-13-01T10:00:00Z"}

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "INVALID_DATE_FORMAT",  "message": "start_time must be in ISO 8601 format (e.g., YYYY-MM-DDTHH:mm:ssZ).",  "details": {"field": "start_time", "invalid_value": "2023-13-01T10:00:00Z"}}

依赖服务故障类

测试用例9:数据库连接失败

接口:GET /api/products(查询商品列表)

场景:模拟数据库服务不可用

预期响应:

状态码:503 Service Unavailable

响应体:

json

代码语言:javascript

{  "code": "DATABASE_CONNECTION_ERROR",  "message": "Failed to connect to the database. Please try again later."}

测试用例10:第三方API超时

接口:GET /api/weather?city=Beijing(调用天气API)

场景:第三方天气服务未响应(超时3秒)

预期响应:

状态码:504 Gateway Timeout

响应体:

json

代码语言:javascript

{  "code": "THIRD_PARTY_API_TIMEOUT",  "message": "The weather service is currently unavailable."}

安全漏洞类

测试用例11:SQL注入攻击

接口:GET /api/users?filter=name=' OR '1'='1(用户查询)

场景:参数含SQL注入语句

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "INVALID_INPUT",  "message": "The 'filter' parameter contains malicious content."}

测试用例12:XSS攻击

接口:POST /api/comments(提交评论)

场景:评论内容含<script>alert(1)</script>

输入:{"content": "<script>alert(1)</script>", "post_id": 1}

预期响应:

状态码:400 Bad Request

响应体:

json

代码语言:javascript

{  "code": "INVALID_CONTENT",  "message": "The 'content' field contains disallowed HTML tags."}

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

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

相关文章

从OTA双雄「共舞」,透视旅游持续繁荣背后的结构性跃迁

2025年&#xff0c;中国旅游市场仍在持续复苏中。 文化和旅游部发布的国内出游数据显示&#xff0c;2025年一季度&#xff0c;国内出游人次17.94亿&#xff0c;比上年同期增加3.75亿&#xff0c;同比增长26.4%&#xff1b;国内居民出游总花费1.80万亿元&#xff0c;比上年同期…

华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测

作者简介​ 我是摘星&#xff0c;一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型&#xff0c;将实际使用经验分享给大家&#xff0c;希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 开通DeepSeek-V3/R1商用服务 2.1 准…

人工智能数学基础实验(一):智能推荐系统实战

一、实验目的 本次实验旨在通过构建用户相似度矩阵和实现个性化推荐&#xff0c;帮助我们直观理解推荐系统的核心原理及其背后的数学基础。具体目标如下&#xff1a; 运用 Python 计算用户间的评分相似度&#xff0c;掌握余弦相似度等数学工具在衡量用户偏好中的应用&#xff…

uni-app学习笔记十二-vue3中组件传值(对象传值)

一.单对象传值 父组件定义对象的值 <template><view><UserInfo :obj"userinfo"></UserInfo></view> </template><script setup>import {ref} from "vue"const userinfo ref({name:"蛛儿",avatar:&…

Vue.js教学第十四章:Vuex模块化,打造高效大型应用状态管理

Vuex(二):深入剖析 Vuex 模块化与高级应用 在大型 Vue 应用开发中,随着应用功能的不断扩展和复杂度的增加,状态管理的难度也随之上升。Vuex 作为 Vue.js 的官方状态管理库,提供了模块化功能,使得我们可以将状态管理逻辑拆分成多个模块,从而提高 Vuex 的可维护性和可读…

win11 禁用/恢复 内置笔记本键盘(保证管用)

文章目录 禁用启用 禁用 1&#xff09;按下 win x&#xff0c;点击 设备管理器 2&#xff09;拔掉所有笔记本外设&#xff08;一定要都拔掉&#xff0c;不然后面禁用设备会混淆&#xff09;&#xff0c;然后右键点击 键盘 > HID Keyboard Device 2&#xff09;点击 更新…

精度不够?光纤激光尺0.2ppm误差解锁微米级制造

当“精度焦虑”成为制造业的隐形门槛&#xff1a; 在半导体光刻中&#xff0c;1nm偏差可能导致整片晶圆报废&#xff1b; 在精密机床加工中&#xff0c;热变形让传统测量工具“失灵”…… “高精度、高稳定、抗干扰”——工业超精密制造的三大痛点&#xff0c;如何破局&#xf…

Android 16系统源码_自由窗口(一)触发自由窗口模式

前言 从 Android 7.0 开始&#xff0c;Google 推出了一个名为“多窗口模式”的新功能&#xff0c;允许在设备屏幕上同时显示多个应用&#xff0c;多窗口模式允许多个应用同时共享同一屏幕&#xff0c;多窗口模式&#xff08;Multi Window Supports&#xff09;目前支持以下三种…

sqli-labs第十八关——POST-UA注入

一&#xff1a;判断注入类型 先在用户名和密码框尝试判断&#xff0c;发现都得不到需要的回显 所以查看源码 可以发现username和password的输入后端都做了检查&#xff0c;没法直接注入 所以我们尝试uagent注入 UA注入&#xff1a; 没有url解码处理只识别原始空格&#xff…

mac上安装 Rust 开发环境

1.你可以按照提示在终端中执行以下命令&#xff08;安全、官方支持&#xff09;&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh然后按提示继续安装即可。 注意&#xff1a;安装过程中建议选择默认配置&#xff08;按 1 即可&#xff09;。 如果遇…

《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》

目录 七. strncpy函数的使用与模拟实现 7.1 strncpy函数理解 7.2 strncpy函数使用示例 7.3 strncpy函数模拟实现 八. strncat函数的使用与模拟实现 8.1 strncat函数理解 8.2 strncat函数使用示例 8.3 strncat函数模拟实现 九. strncmp函数的使用 9.1 strncmp函数理…

百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%

百度飞桨 PaddleOCR 3.0 开源发布 2025 年 5 月 20 日&#xff0c;百度飞桨团队正式发布了 PaddleOCR 3.0 版本&#xff0c;并将其开源。这一新版本在文字识别精度、多语种支持、手写体识别以及高精度文档解析等方面取得了显著进展&#xff0c;进一步提升了 PaddleOCR 在 OCR …

Xilinx 7Series\UltraScale 在线升级FLASH STARTUPE2和STARTUPE3使用

一、FPGA 在线升级 FPGA 在线升级FLASH时&#xff0c;一般是通过逻辑生成SPI接口操作FLASH&#xff0c;当然也可以通过其他SOC经FPGA操作FLASH&#xff0c;那么FPGA就要实现在启动后对FLASH的控制。 对于7Series FPGA&#xff0c;只有CCLK是专用引脚&#xff0c;SPI接口均为普…

数字孪生驱动的离散制造智能升级:架构设计与工程实践

针对离散制造行业多品种、小批量的生产特性&#xff0c;本文提出一种基于数字孪生的智能制造解决方案。以某国家级智能制造试点示范项目为载体&#xff0c;构建"云-边-端"协同的数字孪生系统&#xff0c;实现设备综合效率&#xff08;OEE&#xff09;提升28.7%、订单…

9.4在 VS Code 中配置 Maven

在 VS Code 中配置 Maven 需要完成 Maven 环境安装 一、安装 Maven&#xff08;如果未安装&#xff09; 下载 Maven 访问 Apache Maven 官网&#xff0c;下载最新版本的 Maven&#xff08;如apache-maven-3.9.9-bin.zip&#xff09;。 解压文件 将下载的 ZIP 文件解压到本地目…

新能源汽车充电桩资源如何利用资源高效配置?

新能源汽车充电桩资源的高效配置是实现绿色交通转型的关键环节。随着新能源汽车保有量的快速增长&#xff0c;充电基础设施的供需矛盾日益凸显。如何优化充电桩资源布局、提升使用效率、平衡不同场景需求&#xff0c;成为当前亟待解决的问题。以下是几点关于充电桩资源高效配置…

LeetCode --- 450周赛

题目列表 3550. 数位和等于下标的最小下标 3551. 数位和排序需要的最小交换次数 3552. 网格传送门旅游 3553. 包含给定路径的最小带权子树 II 一、数位和等于下标的最小下标 直接模拟计算数位和即可&#xff0c;代码如下 // C class Solution { public:int smallestIndex(ve…

SpringBoot中消息转换器的选择

SpringBoot返回xml-CSDN博客 是返回JSON 还是XML 是由内容协商机制确认的,SpringBoot为了开发便利性,如果我没有该消息转换器,默认就返回了JSON,如果需要XML那么,引入 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>…

基于点标注的弱监督目标检测方法研究

摘要 在计算机视觉领域&#xff0c;目标检测需要大量精准标注数据&#xff0c;但人工标注成本高昂。弱监督目标检测通过低成本标注训练模型&#xff0c;成为近年研究热点。本文提出一种基于点标注的弱监督目标检测算法&#xff0c;仅需在图像中物体中心点标注&#xff0c;即可高…