当前位置: 首页 > 测试知识 > Apifox高级Mock技巧:模拟超时、错误与异常场景
Apifox高级Mock技巧:模拟超时、错误与异常场景
2026-01-07 作者cwb 浏览次数19

在API开发和测试的模拟超时、错误和异常对于创建健壮的前后端应用非常重要。Apifox的高级Mock功能为此提供了支持,使你能够精确复现真实网络环境中的各类情况,从而提前发现并修复问题。


利用Apifox模拟各类异常情形的方法和用途:

1. 网络超时:在Mock规则或高级Mock中设置响应延迟。测试前端或调用方的超时处理、加载状态、取消请求及重试机制是不是健全。

2. HTTP错误状态码:直接配置Mock响应返回如 4xx、5xx 等状态码及对应错误体。证实客户端对不同服务器错误(如404、500)的错误提示和用户引导是不是恰当。

3. 异常数据结构:返回不符合契约的响应体,如字段缺失、类型错误、数据畸变。检查客户端对脏数据的容错性和分析鲁棒性,防止崩溃。

4. 条件化异常触发:使用动态响应功能,根据请求参数、头信息等条件返回特定异常。模拟特定业务思路失败(如某用户ID始终报错),进行准确情形测试。


详细配置

1. 模拟网络超时和延迟响应

超时模拟是测试应用网络弹性的重点。

基础设置:在Apifox的接口Mock规则或高级Mock中,找到响应延迟设置。可以为单个Mock规则设置固定的延迟时间(如5000毫秒)。

进阶:随机或阶梯延迟:对于更真实的测试,可以使用Apifox的动态响应功能。在响应体的Script中,通过JavaScript控制延迟。


javascript

// 示例:50%概率触发长延迟

module.exports = async (ctx) => {

    // 先设置延迟

    if (Math.random() > 0.5) {

        await new Promise(resolve => setTimeout(resolve, 100)); // 正常延迟100ms

    } else {

        await new Promise(resolve => setTimeout(resolve, 10000)); // 超时延迟10秒

    }

    // 再返回响应体

    return {

        code: Math.random() > 0.5 ? 0 : -1,

        data: {}

    };

};


2. 模拟HTTP错误状态码和业务错误

不只是返回一个状态码,是模拟完整的错误响应。

配置错误响应:在创建Mock规则时,直接选择或填写所需的HTTP状态码,如400、401、403、404、500、502、503等。

创建真实的错误响应体:错误响应体应和你的真实后端保持一致。如:


json

{

  "statusCode": 500,

  "error": "Internal Server Error",

  "message": "数据库连接超时,请稍后重试",

  "requestId": "{{$guid}}", // 使用Apifox内置函数生成唯一追踪ID

  "timestamp": "{{$timestamp}}"

}


条件化触发错误:通过动态响应,可以编写脚本根据特定条件返回错误。


javascript

module.exports = async (ctx) => {

    const { userId } = ctx.request.query;

    // 模拟特定用户触发服务器错误

    if (userId === 'test_error_user') {

        ctx.response.status = 500;

        return {

            code: 500,

            message: '服务器内部错误,请联系管理员。'

        };

    }

    // 其他情况返回正常响应

    return {

        code: 0,

        data: { userId }

    };

};


3. 模拟异常数据结构

测试能暴露前端数据处理的潜在问题。


返回非标准JSON:

在Mock响应体中,直接返回一个格式错误的JSON字符串(如末尾缺少}),或甚至返回纯文本"Internal Server Error"。


返回字段异常的数据:

字段缺失:移除某个契约中约定的必填字段。

字段类型突变:将数字类型的id字段返回为字符串"123",或将数组返回为null。

数据值畸变:返回极长的字符串、负数、null、空数组[]、空对象{}等边界值。


示例:一个“正常”响应的畸变。


json

// 正常响应

{

  "code": 0,

  "data": {

    "user": { "id": 123, "name": "张三" }

  }

}


json

// 异常Mock响应 (字段缺失、类型错误、值异常)

{

  "code": "success", // 类型从number变为string

  // 缺失 data 字段

  "error": null, // 多出一个值为null的字段

  "list": [] // 多出一个空数组字段

}


4. 创建不可靠的Mock服务

创建一个高度模拟生产环境不稳定性的Mock端点。

随机化异常:在动态响应脚本中,编写一个随机数生成器,根据不同的随机值返回超时、各种错误或异常数据。



javascript

module.exports = async (ctx) => {

    const dice = Math.random();

    // 模拟10%概率超时

    if (dice < 0.1) {

        await new Promise(resolve => setTimeout(resolve, 8000));

        ctx.response.status = 504;

        return { message: '网关超时' };

    }

    // 模拟15%概率服务器错误

    if (dice < 0.25) {

        ctx.response.status = 500;

        return { message: '内部服务器错误' };

    }

    // 模拟20%概率业务思路错误

    if (dice < 0.45) {

        ctx.response.status = 200;

        return { code: 1001, message: '业务处理失败' };

    }

    // 模拟10%概率异常数据

    if (dice < 0.55) {

        ctx.response.status = 200;

        return { code: 0, data: null }; // data应为对象,此处返回null

    }

    // 其余情况返回正常数据

    return {

        code: 0,

        data: { id: 1, name: '正常用户' }

    };

};


文章标签: 软件测试 测试工具
咨询软件测试