news 2026/7/16 19:13:46

面试题:接口测试相关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试题:接口测试相关
1. 接口测试用例的编写要点有哪些?

接口测试用例需覆盖“功能完整性、参数合法性、异常场景、安全性”,核心要点:

要点说明示例(用户注册接口:POST /api/user/register
明确接口信息包含接口URL、方法(GET/POST)、请求头、鉴权方式(Token/Cookie)。URL:https://api.test.com/v1/user/register,方法:POST,需传Content-Type: application/json
参数验证(核心)• 必传参数:验证“缺失必传参数”是否返回错误(如mobile为空时返回"code":1001,"msg":"手机号必填");
• 参数类型:字符串/数字/数组是否校验(如age传入字符串"abc"是否报错);
• 边界值:长度(手机号11位)、范围(age取值1-120);
• 特殊字符:SQL注入(username:"admin' OR '1'='1")、XSS(<script>alert(1)</script>)。
用例:mobile传10位数字 → 预期返回"msg":"手机号格式错误"
业务逻辑验证验证接口返回数据是否符合业务规则(如注册成功后数据库新增用户记录、返回userId)。用例:传入合法参数后,检查响应"code":200userId不为空,数据库user表新增记录。
异常场景覆盖• 网络异常:超时、断网、弱网下是否返回友好提示;
• 服务异常:接口500错误时是否返回"msg":"系统繁忙,请稍后再试"
• 数据冲突:重复注册同一手机号是否返回"msg":"该手机号已注册"
用例:重复注册 → 预期返回"code":1002,"msg":"手机号已存在"
响应数据验证• 字段完整性:返回JSON是否包含所有必填字段(如{"code":200,"data":{"userId":123,"username":"test"}});
• 字段类型:userId是否为数字、createTime是否为时间格式;
• 一致性:返回数据与数据库/上游接口是否一致(如注册返回的username与请求参数一致)。
用例:验证响应中createTime格式是否为"yyyy-MM-dd HH:mm:ss"
性能与安全高并发下响应时间(如P95<500ms)、敏感数据加密(如password传输是否加密)。用例:JMeter模拟100并发请求,检查响应时间是否≤1s,无超时/错误。
2. 你是怎么测试接口的?

接口测试流程遵循“设计→准备→执行→分析”闭环,工具与方法论结合:

一、测试环境与工具
  • 环境:独立的接口测试环境(与开发联调环境隔离,避免数据污染);
  • 工具
  • 手动测试:Postman(界面操作,适合单接口调试)、curl(命令行,如curl -X POST -d '{"mobile":"13800138000"}' https://api.test.com/register);
  • 自动化测试:Python+Requests(编写脚本批量执行)、JMeter(性能测试)、Swagger(接口文档+调试)。
二、核心测试步骤
  1. 接口文档评审:确认URL、参数、响应格式、业务规则(如“注册接口是否需要短信验证码”),输出《接口疑问清单》。
  2. 用例设计:按问题1要点编写用例(覆盖参数、逻辑、异常场景)。
  3. 执行测试
  • 功能测试:Postman按用例执行,验证响应是否符合预期(如code=200、数据正确);
  • 自动化测试:用Python+Requests编写脚本(示例如下),结合Jenkins定时执行:
importrequests url="https://api.test.com/v1/user/register"data={"mobile":"13800138000","password":"123456"}res=requests.post(url,json=data)assertres.status_code==200assertres.json()["code"]==200# 验证业务code
  • 性能测试:JMeter模拟1000并发请求,检查响应时间、错误率(如“秒杀接口是否支持1000 QPS,错误率<0.1%”)。
  1. 缺陷管理:提交BUG(附请求/响应报文、复现步骤),例:“注册接口password传空时返回code=200,应为code=1003”。
  2. 回归测试:开发修复后,重新执行相关用例(自动化脚本可快速回归)。
三、问题定位技巧
  • 接口返回500:查看服务端日志(grep "register" app.log),定位SQL错误或代码异常;
  • 数据不一致:对比请求参数→数据库数据→响应数据,如“注册返回userId=123,但数据库无此记录”→服务端事务未提交。
3. GET和POST的区别?

GET和POST是HTTP最常用的两种请求方法,核心区别在于“语义、数据传输方式、安全性”

维度GET(查)POST(改/增)
语义从服务器获取资源(幂等,多次请求结果一致)。向服务器提交资源(非幂等,多次请求可能产生副作用,如重复下单)。
数据位置数据拼接在URL中(?key1=value1&key2=value2)。数据放在请求体(Body)中(JSON/FormData)。
数据大小受URL长度限制(浏览器通常限制2-8KB)。理论无限制(取决于服务器配置)。
安全性数据明文可见(URL日志会记录),不安全。数据在Body中(相对安全,但未加密仍可抓包获取)。
缓存可被浏览器缓存(如浏览器历史记录保存GET请求)。默认不缓存。
典型应用查询商品列表(GET /api/product?page=1)、搜索(GET /search?keyword=test)。用户注册(POST /api/register)、提交订单(POST /api/order)。

测试关注点

  • GET接口不应用于提交敏感数据(如密码);
  • POST接口需验证“防重复提交”(如订单提交添加Token,避免用户重复点击导致多下单)。
4. HTTP和HTTPS的区别?

HTTPS是HTTP的安全版本,核心差异在于“加密传输”,避免数据被窃听/篡改:

维度HTTP(超文本传输协议)HTTPS(HTTP+SSL/TLS)
端口80(默认)443(默认)
安全性明文传输,数据可被中间人窃听/篡改(如抓包工具直接获取密码)。加密传输:
• 握手阶段:通过SSL/TLS协商会话密钥;
• 传输阶段:数据用会话密钥加密(对称加密),证书验证服务器身份(非对称加密)。
性能速度快(无加密开销)。速度略慢(握手需3-4次网络往返,加密解密耗时)。
证书无需证书。需CA机构颁发的SSL证书(验证服务器身份,防止钓鱼)。
应用场景非敏感数据传输(如静态资源)。敏感数据传输(支付、登录、用户信息)。

测试验证

  • 用Charles抓包HTTPS请求,若无证书信任配置,应显示“加密数据”(无法直接查看明文);
  • 访问HTTPS接口时,浏览器地址栏显示“锁”图标,点击可查看证书信息(有效期、颁发机构)。
5. Cookie和Session的区别?

Cookie和Session均用于“维持用户会话状态”(如登录后保持身份),但存储位置和安全性不同:

维度Cookie(客户端存储)Session(服务端存储)
存储位置客户端浏览器(本地文件,大小≤4KB)。服务端内存/数据库(如Redis,无大小限制)。
数据安全明文存储(可被用户修改,如F12修改Cookie值),不安全。服务端存储,客户端仅存SessionID(如JSESSIONID=abc123),相对安全。
生命周期可设置过期时间(Expires属性),默认浏览器关闭后删除。服务端设置超时时间(如30分钟无操作自动失效),或调用session.invalidate()销毁。
典型应用记住密码(remember-meCookie)、购物车(未登录时临时存储)。用户登录状态(登录后服务端创建Session,存储用户ID、权限)。

测试场景

  • Cookie测试:清除浏览器Cookie后,访问需登录的接口(如/api/user/info),应返回“未登录”错误;
  • Session测试:服务端重启后,Session失效,用户需重新登录(若用Redis存储Session则不受影响)。
6. Token是做什么用的?

Token是“用户身份的令牌”,用于替代Cookie+Session实现无状态认证,核心作用:

  • 身份验证:用户登录成功后,服务端生成Token(如JWT格式:header.payload.signature),客户端后续请求在Header中携带Authorization: Bearer <token>,服务端验证Token合法性(签名是否有效、是否过期)。
  • 权限控制:Token中可嵌入用户角色信息(如{"role":"admin","exp":1696000000}),服务端无需查库即可判断权限(如“管理员Token可访问/api/admin接口,普通用户不可”)。
  • 跨域支持:Cookie受同源策略限制,Token可在不同域名间传递(如前后端分离项目,前端部署在a.com,接口部署在b.com)。

测试验证

  • Token过期:修改Token的exp字段为过去时间,请求接口应返回"code":401,"msg":"Token已过期"
  • 伪造Token:篡改Token签名部分,服务端应返回"msg":"Token无效"
7. 接口测试有没有测试出什么问题?

接口测试是发现“服务端逻辑缺陷、数据一致性问题、安全漏洞”的关键手段,典型问题案例:

  • 1. 参数校验缺失

  • 问题:用户注册接口password未校验长度(可传1位密码),导致弱密码风险;

  • 修复:添加校验password长度6-20位,返回"msg":"密码长度需6-20位"

  • 2. 业务逻辑漏洞

  • 问题:订单支付接口未校验商品库存(直接扣减余额),导致“超卖”(库存0时仍可下单);

  • 修复:添加库存预扣减逻辑,下单前检查stock>0

  • 3. 数据一致性问题

  • 问题:用户充值接口返回“充值成功”,但数据库balance未更新(事务未提交);

  • 修复:服务端添加事务管理(@Transactional),确保接口返回成功时数据已落库。

  • 4. 性能瓶颈

  • 问题:商品列表接口未分页(GET /product返回所有商品),数据量10万+时响应时间5s+;

  • 修复:添加分页参数(page=1&size=20),优化SQL索引,响应时间降至200ms。

  • 5. 安全漏洞

  • 问题:用户信息接口GET /api/user/{id}未校验权限,传入他人id可查询信息(越权);

  • 修复:接口添加鉴权,仅允许查询当前登录用户信息(token中的userId与路径id一致)。

8. Fiddler的工作原理?

Fiddler是“HTTP/HTTPS代理工具”,通过“中间人”模式捕获和篡改网络请求,原理如下:

  1. 设置代理:Fiddler启动后,自动将本地浏览器/手机的网络代理设置为127.0.0.1:8888(默认端口);
  2. 捕获请求:客户端(浏览器/APP)的请求先发送到Fiddler,Fiddler再转发给目标服务器(“请求拦截”);
  3. 处理响应:服务器响应先返回Fiddler,Fiddler再转发给客户端(“响应拦截”);
  4. HTTPS解密:Fiddler生成根证书并安装到客户端,伪装成目标服务器与客户端建立SSL连接,同时与真实服务器建立SSL连接,从而解密HTTPS流量。

核心流程客户端 → Fiddler代理 → 服务器,Fiddler在中间可修改请求/响应数据。

9. 工作中用Fiddler来做什么?

Fiddler是接口测试/问题定位的“瑞士军刀”,高频场景:

  • 1. 接口调试与篡改

  • 修改请求参数:测试“边界值/异常场景”(如将price=100改为price=0,验证是否允许0元下单);

  • 修改响应数据:模拟“服务器返回异常”(如将"code":200改为"code":500,验证前端错误提示)。

  • 2. 抓包分析问题

  • APP接口报错:抓包查看请求是否正确(如参数缺失、Token过期)、响应是否异常(如返回null导致前端崩溃);

  • 前后端联调:对比“前端实际发送的请求”与“接口文档要求”,定位“参数名拼写错误”(如前端传user_name,接口要求username)。

  • 3. 弱网测试

  • Fiddler“Rules→Performance→Simulate Modem Speeds”模拟弱网(限制带宽、增加延迟),验证APP在2G/3G下的表现。

  • 4. 接口自动化

  • 导出请求为代码(如“File→Export Sessions→Selected Sessions→cURL”),快速生成接口测试脚本。

  • 5. 数据导出与统计

  • 导出接口请求/响应为Excel,统计“接口调用次数”“平均响应时间”(如“统计1小时内支付接口调用500次,失败10次”)。

10. 为什么要做接口测试?

接口测试是“质量左移”的关键环节,核心价值:

  • 更早发现问题:接口是前后端、服务间的“契约”,在UI开发前测试接口,可提前发现服务端逻辑缺陷(如参数校验缺失),降低修复成本(代码未成型时修改更简单)。
  • 覆盖更全面:UI测试只能验证“可见功能”,接口测试可覆盖“隐藏接口”(如后台定时任务接口、第三方回调接口),避免“UI正常但接口异常”的盲区。
  • 提高测试效率:接口测试可自动化(如Python脚本批量执行1000个用例),比UI自动化更稳定(不受页面元素变化影响),适合回归测试。
  • 保障数据安全:接口是数据交互的入口,通过测试可发现“越权访问”“SQL注入”等安全漏洞(如用户可通过接口获取他人信息)。
  • 支撑性能/安全测试:性能测试(如JMeter压测接口QPS)、安全测试(如扫描接口漏洞)均以接口为基础。
11. 说一下你知道的HTTP状态码,以及它们代表什么意思?

HTTP状态码分5类(1xx-5xx),测试中需关注“2xx成功、4xx客户端错误、5xx服务端错误”

分类状态码含义测试场景示例
2xx成功200请求成功(GET/POST等正常响应)。注册接口返回200 {"code":200,"data":{"userId":123}}
201资源创建成功(POST新增资源)。创建订单成功返回201 Created
204无内容(DELETE删除成功)。删除商品接口返回204 No Content
4xx客户端错误400请求参数错误(格式/必填项缺失)。mobile传10位数字,返回400 {"msg":"手机号格式错误"}
401未授权(Token过期/未传Token)。Token无效时,访问/api/user/info返回401 Unauthorized
403禁止访问(权限不足)。普通用户访问管理员接口/api/admin/list返回403 Forbidden
404资源不存在(URL错误)。访问不存在的接口/api/test返回404 Not Found
409资源冲突(如重复创建)。重复注册同一手机号返回409 Conflict {"msg":"手机号已存在"}
5xx服务端错误500服务器内部错误(代码异常)。接口抛空指针异常,返回500 Internal Server Error
502网关错误(上游服务不可用)。Nginx转发请求到Tomcat,但Tomcat未启动,返回502 Bad Gateway
503服务不可用(过载/维护)。秒杀时服务器压力过大,返回503 Service Unavailable
12. 一个接口请求不通(或页面无法访问)该如何排查?

接口不通的排查需“从客户端→网络→服务端”逐层定位,步骤如下:

一、客户端排查
  • 检查请求参数:URL是否正确(如少写/v1前缀)、方法是否正确(GET/POST混淆)、请求头是否完整(如Content-TypeToken);
  • 验证网络环境:切换WiFi/4G,访问其他网站(如百度)是否正常,排除本地网络故障。
二、网络层排查(抓包+连通性)
  • 抓包分析:用Fiddler/Charles抓包,查看:
  • 请求是否发出(无请求→客户端代码问题,如按钮未绑定事件);
  • 返回状态码(如404→URL错误,500→服务端错误);
  • 响应内容(如"msg":"数据库连接失败"→服务端配置问题)。
  • 连通性测试
  • ping <服务器IP>:验证网络可达(超时→网络不通或服务器禁ping);
  • telnet <服务器IP> <端口>:验证端口开放(如telnet 192.168.1.100 8080,失败→端口未开放或防火墙拦截)。
三、服务端排查
  • 检查服务状态:登录服务器,ps -ef | grep <服务名>(如ps -ef | grep java),确认服务是否启动;
  • 查看服务日志tail -f app.log,搜索关键字(如ERROR),定位代码异常(如“数据库连接超时”“NPE空指针”);
  • 检查依赖服务:数据库(mysql -u root -p能否登录)、Redis(redis-cli ping是否返回PONG)是否正常。
四、典型案例
  • 案例1:接口返回401→抓包发现请求头无Token→前端未携带登录状态→修复:添加Authorization头;
  • 案例2:接口超时无响应→telnet服务器端口失败→开发未启动服务→重启服务后恢复。
13. 接口测试中的加密参数如何处理?

加密参数(如password=MD5(明文)sign=SHA256(key+timestamp+params))是接口安全的常见手段,测试处理方法:

一、明确加密规则
  • 向开发获取加密算法文档,包含:
  • 加密方式(对称加密:AES;非对称加密:RSA;哈希:MD5/SHA256);
  • 密钥(如AES密钥abc123、RSA公钥);
  • 签名规则(如sign=MD5(appid+timestamp+params+secret),按ASCII排序后拼接)。
二、手动测试处理
  • 工具生成加密值
  • 在线加密工具(如MD5在线加密:输入明文生成密文);
  • Postman Pre-request Script:编写JS脚本自动加密,例:
// 计算MD5签名varparams={mobile:"13800138000",timestamp:"1696000000"};varsecret="abc123";varsignStr=Object.keys(params).sort().map(k=>k+"="+params[k]).join("&")+secret;pm.environment.set("sign",CryptoJS.MD5(signStr).toString());// 签名存入环境变量
  • 请求参数引用加密值:{"mobile":"13800138000","sign":"{{sign}}"}
三、自动化测试处理
  • Python脚本中集成加密逻辑(如hashlib库处理MD5,pycryptodome处理AES):
importhashlibdefgen_sign(params,secret):# 按key排序并拼接sorted_params=sorted(params.items(),key=lambdax:x[0])sign_str="&".join([f"{k}={v}"fork,vinsorted_params])+secret# MD5加密returnhashlib.md5(sign_str.encode()).hexdigest()params={"mobile":"13800138000","timestamp":"1696000000"}sign=gen_sign(params,"abc123")requests.post(url,json={**params,"sign":sign})
四、测试验证
  • 验证加密是否生效:篡改加密参数(如修改sign值),接口应返回“签名错误”;
  • 验证密钥安全性:密钥是否硬编码在前端(F12查看JS代码,若有则存在泄露风险)。
14. 接口自动化的优缺点?
优点缺点
提高效率:批量执行用例(如1000个接口用例10分钟跑完),适合回归测试。维护成本高:接口变更(如参数增加)需同步修改脚本,人力投入大。
稳定性高:不受UI元素变化影响(接口相对稳定),比UI自动化更可靠。学习成本:需掌握编程语言(如Python)、自动化框架(如Pytest)。
覆盖全面:可覆盖异常场景(如弱网、超时)、性能场景(如并发请求)。无法替代手工测试:新接口功能验证、复杂业务逻辑仍需手工设计用例。
集成CI/CD:Jenkins定时执行,提交代码后自动触发测试,快速反馈问题。环境依赖:需稳定的测试环境,环境波动可能导致自动化用例失败。

适用场景:核心接口(如支付、登录)、回归测试频繁的接口、性能/安全测试的基础。

15. 接口测试什么时候介入?

接口测试应“尽早介入,贯穿研发全流程”,理想时机:

  • 需求阶段:参与接口文档(如Swagger)评审,确认接口定义(参数、响应、异常码),输出《接口测试用例框架》;
  • 开发阶段:接口开发完成后(未联调前端前),优先进行接口测试(即“接口联调测试”),此时发现问题修改成本最低;
  • 前后端联调阶段:验证前端调用接口的正确性(如参数传递、响应解析);
  • 系统测试阶段:结合业务场景进行接口集成测试(如“注册→登录→下单”全链路接口调用);
  • 上线前阶段:执行接口回归测试+性能测试,确保接口稳定。

敏捷项目:每个迭代中,开发提测接口后立即介入(通常比UI测试早2-3天)。

16. 接口测试流程?

标准接口测试流程分6步,闭环管理:

  1. 需求分析与接口文档评审
  • 输出《接口测试范围》(明确测试哪些接口)、《接口疑问清单》(澄清文档歧义)。
  1. 测试用例设计
  • 按“参数验证、业务逻辑、异常场景”设计用例(参考问题1),通过评审(开发/产品参与)。
  1. 测试环境与数据准备
  • 搭建独立测试环境(数据库、中间件),准备测试数据(如“已注册手机号”“商品库存100”)。
  1. 测试执行
  • 手动测试:Postman调试单接口,验证功能正确性;
  • 自动化测试:编写脚本(Python+Requests),执行批量用例;
  • 专项测试:性能(JMeter压测)、安全(接口漏洞扫描)。
  1. 缺陷管理与回归
  • 提交BUG(含请求/响应报文、复现步骤),跟踪修复进度;
  • 开发修复后,执行回归测试(自动化脚本快速验证)。
  1. 测试报告与总结
  • 输出《接口测试报告》(用例通过率、发现BUG数、风险点),总结经验(如“参数校验缺失是高频问题”)。
17. 常见的HTTP请求头?

请求头携带客户端信息、请求元数据,测试中需关注“Content-Type、Authorization、Cookie”等核心头:

请求头作用示例
Host目标服务器域名/IP+端口。Host: api.test.com
Content-Type请求体数据格式(后端据此解析数据)。application/json(JSON格式)、application/x-www-form-urlencoded(表单格式)、multipart/form-data(文件上传)。
Authorization身份鉴权信息。Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(JWT Token)、Basic dXNlcjE6cGFzc3dvcmQ=(Basic Auth)。
Cookie客户端Cookie信息(如SessionID)。JSESSIONID=abc123; username=test
User-Agent客户端浏览器/设备信息。Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36
Accept客户端可接受的响应数据格式。Accept: application/json, text/plain, */*
Content-Length请求体长度(字节数)。Content-Length: 123(表示请求体123字节)
Connection是否保持长连接(HTTP/1.1默认keep-alive)。Connection: keep-alive

测试验证

  • Content-Type错误:如POST接口传JSON但Content-Typeform-data,后端可能解析失败(返回400);
  • Authorization缺失:访问需登录的接口,返回401错误。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 19:12:07

告别简陋界面:用foobox-cn打造专业级音乐播放器体验

告别简陋界面&#xff1a;用foobox-cn打造专业级音乐播放器体验 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 还在为foobar2000那单调的默认界面而烦恼吗&#xff1f;你是不是也渴望拥有一个既美观…

作者头像 李华
网站建设 2026/7/16 19:12:05

OptiScaler终极问题解决指南:从新手到专家的完整教程

OptiScaler终极问题解决指南&#xff1a;从新手到专家的完整教程 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Supports Nukem mod…

作者头像 李华
网站建设 2026/7/16 19:12:01

终极指南:5步掌握Pydoll高效浏览器自动化,告别WebDriver烦恼

终极指南&#xff1a;5步掌握Pydoll高效浏览器自动化&#xff0c;告别WebDriver烦恼 【免费下载链接】pydoll Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions. 项目地址: https://gitcode.com/GitHub_T…

作者头像 李华
网站建设 2026/7/16 19:05:47

CANN/asc-devkit:Ascend C SIMD向量最小值归约API

asc_repeat_reduce_min 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://…

作者头像 李华
网站建设 2026/7/16 19:04:34

Signature Pad性能优化:压缩JSON输出的实用技巧

Signature Pad性能优化&#xff1a;压缩JSON输出的实用技巧 【免费下载链接】signature-pad A jQuery plugin for assisting in the creation of an HTML5 canvas based signature pad. Records the drawn signature in JSON for later regeneration. 项目地址: https://gitc…

作者头像 李华
网站建设 2026/7/16 19:02:27

为什么macOS用户需要一款终极Android文件传输解决方案?

为什么macOS用户需要一款终极Android文件传输解决方案&#xff1f; 【免费下载链接】openmtp OpenMTP - Advanced Android File Transfer Application for macOS 项目地址: https://gitcode.com/gh_mirrors/op/openmtp 你是否曾经为macOS和Android设备之间的文件传输而烦…

作者头像 李华