接口测试面试题
这份文档聚焦接口测试面试高频问题,覆盖接口基础、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 中,而不是只人工看响应。
编写测试脚本
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; });执行测试
- 发送请求
- 查看响应
- 查看测试结果
Q23: 如何使用JMeter进行接口测试?
答案: JMeter 做接口测试的标准步骤是:创建线程组、配置 HTTP 请求、补参数和断言、配置监听器、执行并分析报告。
如果是性能场景,建议把“查看结果树”只用于调试阶段,压测时关闭重量级监听器,避免对结果造成干扰。
Q24: 如何使用RestAssured进行接口测试?
答案: RestAssured 适合 Java 项目的代码化接口测试,优势是可读性高、断言能力强、便于接入 CI。常见用法包括基础请求、参数化请求和链式断言。
RestAssured使用:
基本请求
given() .baseUri("https://api.example.com") .when() .get("/users/1") .then() .statusCode(200);POST请求
given() .baseUri("https://api.example.com") .contentType(ContentType.JSON) .body("{\"name\":\"John\",\"email\":\"john@example.com\"}") .when() .post("/users") .then() .statusCode(201);参数化
given() .baseUri("https://api.example.com") .pathParam("id", 1) .when() .get("/users/{id}") .then() .statusCode(200);断言
.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使用:
启动WireMock
WireMockServer wireMockServer = new WireMockServer(8080); wireMockServer.start();配置Mock响应
stubFor(get(urlEqualTo("/api/users/1")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/json") .withBody("{\"id\":1,\"name\":\"John\"}")));验证请求
verify(getRequestedFor(urlEqualTo("/api/users/1")));停止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)。
认证授权测试:
认证测试
// 测试未认证访问 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);授权测试
// 测试越权访问 given() .baseUri("https://api.example.com") .header("Authorization", "Bearer user-token") .when() .get("/api/admin/users") .then() .statusCode(403);
总结
这套题目覆盖了接口测试面试的核心范围:基础方法论、HTTP/HTTPS 协议、工具链、Mock/Stub、用例设计、性能和安全测试。复习时建议优先讲清楚测试思路与落地方法,再结合项目中的真实案例补充细节,这样回答会更有说服力。