Raina-软件测试指南
AI测试学习圈
面试题
关于作者
小红书
B站
AI测试学习圈
面试题
关于作者
小红书
B站
  • 面试题

    • 面试题导航
    • 01-测试基础理论面试题
    • 02-测试用例设计面试题
    • 03-功能测试面试题
    • 04-性能测试面试题
    • 05-自动化测试面试题
    • 06-接口测试面试题
    • 07-移动端测试面试题
    • 08-安全测试面试题
    • 09-测试管理面试题
    • 10-测试工具面试题
    • 11-敏捷测试面试题
    • 12-数据库测试面试题
    • 13-兼容性测试面试题
    • 14-测试环境管理面试题
    • 15-测试文档面试题
    • 16-测试编程语言面试题
    • 17-测试最佳实践面试题
    • 18-项目实战面试题
    • 19-AI测试基础与AI辅助测试面试题
    • 20-大模型LLM应用测试面试题
    • 21-AI Agent与AIGC评估面试题
    • 22-机器学习模型与AI安全测试面试题
    • 23-AI Agent协议与扩展机制测试面试题
    • 24-电商交易系统测试面试题
    • 25-IM即时通讯系统测试面试题
    • 26-支付与金融系统测试面试题

接口测试面试题

这份文档聚焦接口测试面试高频问题,覆盖接口基础、HTTP/HTTPS、RESTful 设计、测试工具、Mock/Stub、用例设计、性能与安全测试等内容,适合面试前集中复习和查漏补缺。


一、接口测试基础(15题)

Q1: 什么是接口测试?接口测试的目标是什么?

答案: 接口测试是针对系统对外或对内提供的接口进行验证的测试活动,重点不在页面展示,而在请求、处理和返回链路是否正确。

目标通常有四类:一是功能正确(参数处理、业务逻辑、返回结果);二是性能可接受(响应时间、吞吐、并发能力);三是安全可控(认证、授权、数据保护);四是兼容可演进(版本兼容、协议兼容、数据格式兼容)。

Q2: 接口测试与功能测试的区别是什么?

答案: 接口测试直接面向接口层,主要验证契约和业务数据流;功能测试通常从 UI 层发起,更关注用户视角下的端到端行为。

接口测试一般执行更快、稳定性更高、定位问题更直接;功能测试更贴近真实使用路径,但执行和维护成本通常更高。

两者不是替代关系,而是互补关系。实践里常见组合是:接口层做广覆盖和快速反馈,UI 层保留关键主流程回归。

Q3: 接口测试的优势是什么?

答案: 接口测试的核心优势是“快、稳、早、易自动化”。它不依赖 UI,执行速度快,适合批量和并行运行,能在开发阶段更早发现问题。

同时它在场景覆盖上更细,尤其适合参数校验、异常分支和边界条件验证,也更容易接入 CI/CD 做持续回归。

Q4: 接口测试包括哪些类型?

答案: 常见接口测试类型包括功能测试、异常测试、兼容性测试、性能测试和安全测试。面试时可以先说一句:这几类不是割裂的,通常会在同一套用例体系里分层落地。

例如功能层验证状态码与业务字段,异常层验证参数缺失/类型错误/越权访问,性能层关注响应时间与吞吐,安全层关注认证授权和输入风险,兼容层关注版本变更后的契约稳定性。

Q5: 接口测试的测试流程是什么?

答案: 接口测试流程可以概括为:需求澄清 -> 用例设计 -> 环境与数据准备 -> 执行与缺陷反馈 -> 回归与沉淀。

其中最容易被忽视的是前置阶段:如果接口契约、错误码约定、鉴权规则没在测试前确认清楚,后续执行再多也容易出现“结果对不上”的低效沟通。

Q6: 如何设计接口测试用例?

答案: 设计接口用例时,建议先按“正常、异常、边界、组合、安全”五类拆开,再按优先级逐步覆盖。这样既能保证主流程完整,也不会漏掉高风险分支。

落地时可以用一个简单判断:凡是会影响状态码、核心业务字段、权限控制和数据一致性的输入,都应该至少有一条对应的验证用例。

Q7: 接口测试中如何验证接口返回值?

答案: 接口返回值验证至少要覆盖五个维度:HTTP/业务状态码、响应结构、关键字段内容、响应头和时延约束。

实践里最常见的问题不是“状态码错”,而是“字段语义错但状态码看起来正常”,所以断言要尽量贴近业务含义,而不只做结构存在性校验。

示例(RestAssured):

given()
    .baseUri("https://api.example.com")
.when()
    .get("/users/1")
.then()
    .statusCode(200)
    .contentType(ContentType.JSON)
    .body("id", equalTo(1))
    .body("name", notNullValue())
    .body("email", containsString("@"))
    .time(lessThan(2000L));

Q8: 接口测试中如何验证接口参数?

答案: 参数验证可以按必填性、类型、格式、范围和组合关系分层设计。面试里如果能补一句“参数之间可能存在联动约束”,通常会更加分。

例如 A 参数只有在 B=true 时才必填,或者 page/size 组合需要满足上限规则,这类规则比单字段校验更容易在生产环境出问题。

示例:

// 测试缺少必填参数
given()
    .baseUri("https://api.example.com")
    .body("{\"email\":\"test@example.com\"}")  // 缺少name
.when()
    .post("/users")
.then()
    .statusCode(400)
    .body("error", containsString("name is required"));

// 测试参数类型错误
given()
    .baseUri("https://api.example.com")
    .body("{\"name\":123,\"email\":\"test@example.com\"}")  // name应该是字符串
.when()
    .post("/users")
.then()
    .statusCode(400)
    .body("error", containsString("invalid type"));

Q9: 接口测试中如何处理接口依赖?

答案: 处理接口依赖的关键是先识别依赖链,再决定哪些依赖要走真实服务、哪些依赖需要 Mock。原则是:核心链路尽量真实验证,外部不稳定依赖适度隔离。

同时要把测试数据的创建与清理流程标准化,避免前序接口残留数据污染后续结果。对复杂链路,建议按“造数接口 -> 被测接口 -> 校验接口”组织执行顺序。

Q10: 接口测试中如何测试接口性能?

答案: 接口性能测试常见分层是:基线测试(正常负载)、负载测试(逐步加压)、压力测试(逼近极限)和稳定性测试(长时间运行)。

关注指标通常包括响应时间分布、吞吐量、并发处理能力和错误率,建议结合 CPU、内存、数据库连接等资源指标一起看,避免只看 TPS 得出片面结论。

常用工具有 JMeter、Gatling、Apache Bench、wrk,具体选型取决于团队技术栈和报告能力要求。


二、HTTP/HTTPS协议(15题)

Q11: HTTP协议的特点是什么?

答案: HTTP 的核心特点可以概括为:无状态、请求-响应模型、基于 TCP 传输。无状态让它易扩展,但也意味着会话信息要借助 Cookie/Session 或 Token 维护。

另外,HTTP 本身是明文协议,安全能力弱,所以生产环境通常使用 HTTPS。它的好处是协议简单、兼容性强、可扩展性好,适合互联网大规模场景。

Q12: HTTP请求方法有哪些?各有什么特点?

答案: 常见方法里,GET 用于查询、POST 用于创建、PUT 用于整体更新、PATCH 用于部分更新、DELETE 用于删除;HEAD 只取响应头,OPTIONS 常用于查询服务能力和跨域预检。

面试里建议补充两个关键点:一是幂等性(如 GET/PUT/DELETE 通常是幂等的),二是语义一致性(方法语义和业务动作要对应,避免“用 POST 做所有事”)。

Q13: HTTP状态码有哪些?各表示什么含义?

答案: 状态码可以按五类理解:1xx 信息提示、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。

接口测试里最常校验的是 200/201/204、400/401/403/404/422、500/502/503/504。除了 HTTP 状态码,很多系统还会返回业务码,两者都要一起验证。

Q14: HTTP请求和响应的结构是什么?

答案: HTTP 请求和响应都由“起始行 + 头部 + 空行 + 消息体”组成。请求侧是请求行(方法、路径、协议),响应侧是状态行(协议、状态码、状态描述)。

HTTP请求结构:

请求行:方法 路径 协议版本
请求头:Header: Value
空行
请求体:Body

示例:

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer token

{
  "name": "John",
  "email": "john@example.com"
}

HTTP响应结构:

状态行:协议版本 状态码 状态描述
响应头:Header: Value
空行
响应体:Body

示例:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 123

{
  "id": 1,
  "name": "John",
  "email": "john@example.com"
}

Q15: HTTP请求头有哪些常用的?

答案: 常用请求头里最关键的是 Content-Type(请求体格式)、Authorization(认证信息)、Accept(期望响应格式)。这三类头通常直接影响接口行为。

另外常见的还有 User-Agent、Cookie、Referer、If-Modified-Since 等。测试时不仅要验证“有无”,还要验证值是否符合接口契约和安全策略。

Q16: HTTP响应头有哪些常用的?

答案: 常用响应头包括 Content-Type、Content-Length、Set-Cookie、Cache-Control、Location、ETag、Last-Modified。它们分别影响解析方式、缓存行为、会话管理和重定向逻辑。

接口测试中,响应头验证常被忽略,但在缓存一致性、安全和网关行为排查时非常关键。

Q17: HTTPS与HTTP的区别是什么?

答案: 本质区别是是否通过 TLS 加密。HTTPS = HTTP + TLS,能提供机密性、完整性和身份认证;HTTP 是明文传输,容易被窃听和篡改。

默认端口上,HTTP 是 80,HTTPS 是 443。虽然 HTTPS 有加解密开销,但现代硬件与协议优化后成本可控,生产环境应优先使用 HTTPS。

Q18: 什么是Cookie和Session?有什么区别?

答案: Cookie 是客户端保存的数据,浏览器会在后续请求自动携带;Session 是服务端会话状态,通常通过 Session ID 关联到客户端。

两者常配合使用:Cookie 保存会话标识,Session 保存会话内容。安全敏感场景里,重点是控制 Cookie 属性(HttpOnly/Secure/SameSite)和 Session 过期策略。

Q19: 什么是RESTful API?RESTful API的特点是什么?

答案: RESTful API 是按 REST 风格设计的接口体系,核心思想是“资源导向 + 统一接口”。资源通过 URL 表达,操作通过 HTTP 方法表达。

它的典型特征包括无状态、可缓存、分层架构和统一的状态码/数据格式约定。接口测试时,重点要验证资源语义、方法语义和状态码语义是否一致。

Q20: RESTful API的设计原则是什么?

答案: 设计 RESTful API 时,最核心的是三点:资源命名清晰、HTTP 方法语义一致、状态码表达准确。资源建议用名词和复数,层级关系通过路径体现。

同时要统一响应格式并做好版本策略(URL 版本或 Header 版本都可以),避免接口演进时影响旧客户端。


三、接口测试工具(15题)

Q21: Postman的主要功能有哪些?

答案: Postman 的核心功能包括:发送请求、管理环境变量、组织集合、编写前置和断言脚本、Mock 服务、批量运行与结果统计。

它更适合接口调试和轻量自动化验证,团队协作时可通过集合和环境共享快速同步测试资产。

Q22: 如何使用Postman进行接口测试?

答案: 可按“建请求 -> 配参数和头 -> 写断言 -> 执行回看结果”的流程使用 Postman。重点是把关键断言写到 Test Script 中,而不是只人工看响应。

  1. 编写测试脚本

    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });
    
    pm.test("Response has user id", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.id).to.exist;
    });
    
  2. 执行测试

    • 发送请求
    • 查看响应
    • 查看测试结果

Q23: 如何使用JMeter进行接口测试?

答案: JMeter 做接口测试的标准步骤是:创建线程组、配置 HTTP 请求、补参数和断言、配置监听器、执行并分析报告。

如果是性能场景,建议把“查看结果树”只用于调试阶段,压测时关闭重量级监听器,避免对结果造成干扰。

Q24: 如何使用RestAssured进行接口测试?

答案: RestAssured 适合 Java 项目的代码化接口测试,优势是可读性高、断言能力强、便于接入 CI。常见用法包括基础请求、参数化请求和链式断言。

RestAssured使用:

  1. 基本请求

    given()
        .baseUri("https://api.example.com")
    .when()
        .get("/users/1")
    .then()
        .statusCode(200);
    
  2. POST请求

    given()
        .baseUri("https://api.example.com")
        .contentType(ContentType.JSON)
        .body("{\"name\":\"John\",\"email\":\"john@example.com\"}")
    .when()
        .post("/users")
    .then()
        .statusCode(201);
    
  3. 参数化

    given()
        .baseUri("https://api.example.com")
        .pathParam("id", 1)
    .when()
        .get("/users/{id}")
    .then()
        .statusCode(200);
    
  4. 断言

    .then()
        .statusCode(200)
        .body("id", equalTo(1))
        .body("name", notNullValue())
        .time(lessThan(2000L));
    

Q25: 接口测试工具的选择标准是什么?

答案: 选型建议围绕六个维度:需求匹配度、易用性、执行性能、成本、生态支持、团队技能。不要只看“工具是否流行”,要看是否适合当前项目和团队。

实际落地中,常见组合是 Postman 做调试与探索,RestAssured 做自动化回归,JMeter/Gatling 做性能专项。


四、Mock和Stub(10题)

Q26: 什么是Mock?什么是Stub?有什么区别?

答案: Stub 主要用于“给定输入返回预设输出”,关注结果;Mock 除了返回数据,还会校验调用行为(是否被调用、调用次数、入参是否正确)。

简单理解是:Stub 解决“跑得起来”,Mock 解决“行为对不对”。

Q27: 为什么需要使用Mock服务?

答案: 使用 Mock 的主要目的是隔离外部不稳定依赖,提高测试稳定性和执行效率。它还能帮助快速构造真实环境难复现的异常场景,如超时、限流、错误码等。

在团队协作里,Mock 还能支持前后端并行开发,减少联调阻塞时间。

Q28: 常用的Mock工具有哪些?

答案: 常用工具可按用途区分:单元测试常用 Mockito;HTTP 接口级 Mock 常用 WireMock、MockServer;快速演示场景可用 Postman Mock Server 或 JSON Server。

选工具时看三点:是否支持你需要的协议、是否方便维护规则、是否能接入现有测试流水线。

Q29: 如何使用WireMock创建Mock服务?

答案: WireMock 常见流程是启动服务、配置 stub、执行被测请求、校验调用记录、最后关闭服务。它适合模拟第三方 HTTP 依赖并控制返回场景。

WireMock使用:

  1. 启动WireMock

    WireMockServer wireMockServer = new WireMockServer(8080);
    wireMockServer.start();
    
  2. 配置Mock响应

    stubFor(get(urlEqualTo("/api/users/1"))
        .willReturn(aResponse()
            .withStatus(200)
            .withHeader("Content-Type", "application/json")
            .withBody("{\"id\":1,\"name\":\"John\"}")));
    
  3. 验证请求

    verify(getRequestedFor(urlEqualTo("/api/users/1")));
    
  4. 停止WireMock

    wireMockServer.stop();
    

Q30: Mock服务的最佳实践有哪些?

答案: Mock 的最佳实践是“适度且可维护”:优先 Mock 外部依赖,不 Mock 被测核心逻辑;Mock 数据结构要尽量贴近真实接口契约。

同时要把 Mock 规则版本化管理,并在 CI 中定期校验,避免真实接口变了但 Mock 还停留在旧版本。


五、接口测试用例设计(10题)

Q31: 接口测试用例应该包含哪些要素?

答案: 一条完整的接口测试用例,至少应包含:用例标识、接口信息、前置条件、请求输入、预期结果、实际结果。可执行性和可复现性比“写得多”更重要。

面试时可以强调:预期结果要可量化,比如状态码、关键字段、时延阈值,而不是只写“返回正确”。

Q32: 如何设计接口正常场景测试用例?

答案: 正常场景用例的核心是覆盖主流程和常见参数组合,确保“用户最常走的路径”稳定可用。

设计时建议至少验证三类结果:状态码正确、业务字段正确、数据一致性正确,并补上关键边界值的正常输入。

示例:

用例:获取用户信息
接口:GET /api/users/{id}
参数:id=1
预期:状态码200,返回用户信息

Q33: 如何设计接口异常场景测试用例?

答案: 异常场景要覆盖输入异常、数据异常、权限异常和系统异常四类高风险路径。目标不是“让接口报错”,而是验证它是否以可预期、可定位的方式报错。

例如参数错误应返回明确错误码和提示,权限错误要区分 401 与 403,服务异常要有可追踪标识。

示例:

用例:获取不存在的用户
接口:GET /api/users/{id}
参数:id=99999
预期:状态码404,返回错误信息

Q34: 如何设计接口边界值测试用例?

答案: 边界值测试要围绕“临界点前后”设计,重点不是最小值和最大值本身,而是最小值-1、最大值+1这类最容易出错的位置。

常见边界对象包括数值、字符串长度、数组长度、分页参数。分页场景里建议覆盖 0、1、最后一页、越界页和负数页码。

示例:

用例:分页查询用户
接口:GET /api/users?page=1&size=10
边界值:
- page=0(无效)
- page=1(第一页)
- page=100(最后一页)
- page=101(超出范围)

Q35: 如何设计接口性能测试用例?

答案: 性能用例设计建议分四层:基线、负载、压力、稳定性。每层都要有明确目标和退出标准,避免“只压不分析”。

指标至少覆盖响应时间、吞吐量、并发能力和错误率,并结合资源利用率一起判断瓶颈位置。


六、接口性能测试(10题)

Q36: 接口性能测试的关键指标有哪些?

答案: 关键指标可以分为五类:响应时间(含 P90/P95/P99)、吞吐量(TPS/QPS)、并发能力、错误率、资源利用率(CPU/内存/网络/数据库)。

解读性能结果时,建议把业务指标和系统资源指标联动分析,单看某一个指标容易误判。

Q37: 如何使用JMeter进行接口性能测试?

答案: JMeter 做性能测试的主线是:建线程模型、配请求、设置断言和监听器、执行压测、分析瓶颈。

建议先小流量验证脚本正确性,再逐步升压,最终结合监控数据定位瓶颈点,而不是一上来就打满流量。

Q38: 接口性能测试的常见问题有哪些?

答案: 常见问题通常表现为:响应变慢、吞吐上不去、并发一高就报错、资源飙高、错误率上升。根因多集中在 SQL 慢查询、线程/连接池配置不当、缓存策略不合理和下游依赖抖动。

排查顺序建议是“先确认现象,再看资源,再定位链路热点”,避免只凭经验猜问题。


七、接口安全测试(5题)

Q39: 接口安全测试包括哪些内容?

答案: 接口安全测试主要覆盖五块:认证、授权、输入校验、敏感数据保护、会话安全。目标是验证“不能访问的人确实进不来,能访问的人也只能做被允许的事”。

高频风险点包括越权访问、注入攻击、明文敏感信息泄露、Token/Session 管理不当。

Q40: 如何测试接口的认证和授权?

答案: 认证和授权测试要同时覆盖正向场景与反向场景:合法身份应通过,未登录、无效凭证、越权访问应被准确拦截(如 401/403)。

认证授权测试:

  1. 认证测试

    // 测试未认证访问
    given()
        .baseUri("https://api.example.com")
    .when()
        .get("/api/users")
    .then()
        .statusCode(401);
    
    // 测试无效token
    given()
        .baseUri("https://api.example.com")
        .header("Authorization", "Bearer invalid-token")
    .when()
        .get("/api/users")
    .then()
        .statusCode(401);
    
  2. 授权测试

    // 测试越权访问
    given()
        .baseUri("https://api.example.com")
        .header("Authorization", "Bearer user-token")
    .when()
        .get("/api/admin/users")
    .then()
        .statusCode(403);
    

总结

这套题目覆盖了接口测试面试的核心范围:基础方法论、HTTP/HTTPS 协议、工具链、Mock/Stub、用例设计、性能和安全测试。复习时建议优先讲清楚测试思路与落地方法,再结合项目中的真实案例补充细节,这样回答会更有说服力。

最近更新: 2026/5/12 03:06
Contributors: raina
Prev
05-自动化测试面试题
Next
07-移动端测试面试题