面试题:接口测试相关

📅 2026/7/16 19:13:50
面试题:接口测试相关
1. 接口测试用例的编写要点有哪些接口测试用例需覆盖“功能完整性、参数合法性、异常场景、安全性”核心要点要点说明示例用户注册接口POST /api/user/register明确接口信息包含接口URL、方法GET/POST、请求头、鉴权方式Token/Cookie。URLhttps://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 11、XSSscriptalert(1)/script。用例mobile传10位数字 → 预期返回msg:手机号格式错误。业务逻辑验证验证接口返回数据是否符合业务规则如注册成功后数据库新增用户记录、返回userId。用例传入合法参数后检查响应code:200且userId不为空数据库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。性能与安全高并发下响应时间如P95500ms、敏感数据加密如password传输是否加密。用例JMeter模拟100并发请求检查响应时间是否≤1s无超时/错误。2. 你是怎么测试接口的接口测试流程遵循“设计→准备→执行→分析”闭环工具与方法论结合一、测试环境与工具环境独立的接口测试环境与开发联调环境隔离避免数据污染工具手动测试Postman界面操作适合单接口调试、curl命令行如curl -X POST -d {mobile:13800138000} https://api.test.com/register自动化测试PythonRequests编写脚本批量执行、JMeter性能测试、Swagger接口文档调试。二、核心测试步骤接口文档评审确认URL、参数、响应格式、业务规则如“注册接口是否需要短信验证码”输出《接口疑问清单》。用例设计按问题1要点编写用例覆盖参数、逻辑、异常场景。执行测试功能测试Postman按用例执行验证响应是否符合预期如code200、数据正确自动化测试用PythonRequests编写脚本示例如下结合Jenkins定时执行importrequests urlhttps://api.test.com/v1/user/registerdata{mobile:13800138000,password:123456}resrequests.post(url,jsondata)assertres.status_code200assertres.json()[code]200# 验证业务code性能测试JMeter模拟1000并发请求检查响应时间、错误率如“秒杀接口是否支持1000 QPS错误率0.1%”。缺陷管理提交BUG附请求/响应报文、复现步骤例“注册接口password传空时返回code200应为code1003”。回归测试开发修复后重新执行相关用例自动化脚本可快速回归。三、问题定位技巧接口返回500查看服务端日志grep register app.log定位SQL错误或代码异常数据不一致对比请求参数→数据库数据→响应数据如“注册返回userId123但数据库无此记录”→服务端事务未提交。3. GET和POST的区别GET和POST是HTTP最常用的两种请求方法核心区别在于“语义、数据传输方式、安全性”维度GET查POST改/增语义从服务器获取资源幂等多次请求结果一致。向服务器提交资源非幂等多次请求可能产生副作用如重复下单。数据位置数据拼接在URL中?key1value1key2value2。数据放在请求体Body中JSON/FormData。数据大小受URL长度限制浏览器通常限制2-8KB。理论无限制取决于服务器配置。安全性数据明文可见URL日志会记录不安全。数据在Body中相对安全但未加密仍可抓包获取。缓存可被浏览器缓存如浏览器历史记录保存GET请求。默认不缓存。典型应用查询商品列表GET /api/product?page1、搜索GET /search?keywordtest。用户注册POST /api/register、提交订单POST /api/order。测试关注点GET接口不应用于提交敏感数据如密码POST接口需验证“防重复提交”如订单提交添加Token避免用户重复点击导致多下单。4. HTTP和HTTPS的区别HTTPS是HTTP的安全版本核心差异在于“加密传输”避免数据被窃听/篡改维度HTTP超文本传输协议HTTPSHTTPSSL/TLS端口80默认443默认安全性明文传输数据可被中间人窃听/篡改如抓包工具直接获取密码。加密传输• 握手阶段通过SSL/TLS协商会话密钥• 传输阶段数据用会话密钥加密对称加密证书验证服务器身份非对称加密。性能速度快无加密开销。速度略慢握手需3-4次网络往返加密解密耗时。证书无需证书。需CA机构颁发的SSL证书验证服务器身份防止钓鱼。应用场景非敏感数据传输如静态资源。敏感数据传输支付、登录、用户信息。测试验证用Charles抓包HTTPS请求若无证书信任配置应显示“加密数据”无法直接查看明文访问HTTPS接口时浏览器地址栏显示“锁”图标点击可查看证书信息有效期、颁发机构。5. Cookie和Session的区别Cookie和Session均用于“维持用户会话状态”如登录后保持身份但存储位置和安全性不同维度Cookie客户端存储Session服务端存储存储位置客户端浏览器本地文件大小≤4KB。服务端内存/数据库如Redis无大小限制。数据安全明文存储可被用户修改如F12修改Cookie值不安全。服务端存储客户端仅存SessionID如JSESSIONIDabc123相对安全。生命周期可设置过期时间Expires属性默认浏览器关闭后删除。服务端设置超时时间如30分钟无操作自动失效或调用session.invalidate()销毁。典型应用记住密码remember-meCookie、购物车未登录时临时存储。用户登录状态登录后服务端创建Session存储用户ID、权限。测试场景Cookie测试清除浏览器Cookie后访问需登录的接口如/api/user/info应返回“未登录”错误Session测试服务端重启后Session失效用户需重新登录若用Redis存储Session则不受影响。6. Token是做什么用的Token是“用户身份的令牌”用于替代CookieSession实现无状态认证核心作用身份验证用户登录成功后服务端生成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时仍可下单修复添加库存预扣减逻辑下单前检查stock0。3. 数据一致性问题问题用户充值接口返回“充值成功”但数据库balance未更新事务未提交修复服务端添加事务管理Transactional确保接口返回成功时数据已落库。4. 性能瓶颈问题商品列表接口未分页GET /product返回所有商品数据量10万时响应时间5s修复添加分页参数page1size20优化SQL索引响应时间降至200ms。5. 安全漏洞问题用户信息接口GET /api/user/{id}未校验权限传入他人id可查询信息越权修复接口添加鉴权仅允许查询当前登录用户信息token中的userId与路径id一致。8. Fiddler的工作原理Fiddler是“HTTP/HTTPS代理工具”通过“中间人”模式捕获和篡改网络请求原理如下设置代理Fiddler启动后自动将本地浏览器/手机的网络代理设置为127.0.0.1:8888默认端口捕获请求客户端浏览器/APP的请求先发送到FiddlerFiddler再转发给目标服务器“请求拦截”处理响应服务器响应先返回FiddlerFiddler再转发给客户端“响应拦截”HTTPS解密Fiddler生成根证书并安装到客户端伪装成目标服务器与客户端建立SSL连接同时与真实服务器建立SSL连接从而解密HTTPS流量。核心流程客户端 → Fiddler代理 → 服务器Fiddler在中间可修改请求/响应数据。9. 工作中用Fiddler来做什么Fiddler是接口测试/问题定位的“瑞士军刀”高频场景1. 接口调试与篡改修改请求参数测试“边界值/异常场景”如将price100改为price0验证是否允许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-Type、Token验证网络环境切换WiFi/4G访问其他网站如百度是否正常排除本地网络故障。二、网络层排查抓包连通性抓包分析用Fiddler/Charles抓包查看请求是否发出无请求→客户端代码问题如按钮未绑定事件返回状态码如404→URL错误500→服务端错误响应内容如msg:数据库连接失败→服务端配置问题。连通性测试ping 服务器IP验证网络可达超时→网络不通或服务器禁pingtelnet 服务器IP 端口验证端口开放如telnet 192.168.1.100 8080失败→端口未开放或防火墙拦截。三、服务端排查检查服务状态登录服务器ps -ef | grep 服务名如ps -ef | grep java确认服务是否启动查看服务日志tail -f app.log搜索关键字如ERROR定位代码异常如“数据库连接超时”“NPE空指针”检查依赖服务数据库mysql -u root -p能否登录、Redisredis-cli ping是否返回PONG是否正常。四、典型案例案例1接口返回401→抓包发现请求头无Token→前端未携带登录状态→修复添加Authorization头案例2接口超时无响应→telnet服务器端口失败→开发未启动服务→重启服务后恢复。13. 接口测试中的加密参数如何处理?加密参数如passwordMD5(明文)、signSHA256(keytimestampparams)是接口安全的常见手段测试处理方法一、明确加密规则向开发获取加密算法文档包含加密方式对称加密AES非对称加密RSA哈希MD5/SHA256密钥如AES密钥abc123、RSA公钥签名规则如signMD5(appidtimestampparamssecret)按ASCII排序后拼接。二、手动测试处理工具生成加密值在线加密工具如MD5在线加密输入明文生成密文Postman Pre-request Script编写JS脚本自动加密例// 计算MD5签名varparams{mobile:13800138000,timestamp:1696000000};varsecretabc123;varsignStrObject.keys(params).sort().map(kkparams[k]).join()secret;pm.environment.set(sign,CryptoJS.MD5(signStr).toString());// 签名存入环境变量请求参数引用加密值{mobile:13800138000,sign:{{sign}}}。三、自动化测试处理Python脚本中集成加密逻辑如hashlib库处理MD5pycryptodome处理AESimporthashlibdefgen_sign(params,secret):# 按key排序并拼接sorted_paramssorted(params.items(),keylambdax:x[0])sign_str.join([f{k}{v}fork,vinsorted_params])secret# MD5加密returnhashlib.md5(sign_str.encode()).hexdigest()params{mobile:13800138000,timestamp:1696000000}signgen_sign(params,abc123)requests.post(url,json{**params,sign:sign})四、测试验证验证加密是否生效篡改加密参数如修改sign值接口应返回“签名错误”验证密钥安全性密钥是否硬编码在前端F12查看JS代码若有则存在泄露风险。14. 接口自动化的优缺点?优点缺点提高效率批量执行用例如1000个接口用例10分钟跑完适合回归测试。维护成本高接口变更如参数增加需同步修改脚本人力投入大。稳定性高不受UI元素变化影响接口相对稳定比UI自动化更可靠。学习成本需掌握编程语言如Python、自动化框架如Pytest。覆盖全面可覆盖异常场景如弱网、超时、性能场景如并发请求。无法替代手工测试新接口功能验证、复杂业务逻辑仍需手工设计用例。集成CI/CDJenkins定时执行提交代码后自动触发测试快速反馈问题。环境依赖需稳定的测试环境环境波动可能导致自动化用例失败。适用场景核心接口如支付、登录、回归测试频繁的接口、性能/安全测试的基础。15. 接口测试什么时候介入?接口测试应“尽早介入贯穿研发全流程”理想时机需求阶段参与接口文档如Swagger评审确认接口定义参数、响应、异常码输出《接口测试用例框架》开发阶段接口开发完成后未联调前端前优先进行接口测试即“接口联调测试”此时发现问题修改成本最低前后端联调阶段验证前端调用接口的正确性如参数传递、响应解析系统测试阶段结合业务场景进行接口集成测试如“注册→登录→下单”全链路接口调用上线前阶段执行接口回归测试性能测试确保接口稳定。敏捷项目每个迭代中开发提测接口后立即介入通常比UI测试早2-3天。16. 接口测试流程?标准接口测试流程分6步闭环管理需求分析与接口文档评审输出《接口测试范围》明确测试哪些接口、《接口疑问清单》澄清文档歧义。测试用例设计按“参数验证、业务逻辑、异常场景”设计用例参考问题1通过评审开发/产品参与。测试环境与数据准备搭建独立测试环境数据库、中间件准备测试数据如“已注册手机号”“商品库存100”。测试执行手动测试Postman调试单接口验证功能正确性自动化测试编写脚本PythonRequests执行批量用例专项测试性能JMeter压测、安全接口漏洞扫描。缺陷管理与回归提交BUG含请求/响应报文、复现步骤跟踪修复进度开发修复后执行回归测试自动化脚本快速验证。测试报告与总结输出《接口测试报告》用例通过率、发现BUG数、风险点总结经验如“参数校验缺失是高频问题”。17. 常见的HTTP请求头?请求头携带客户端信息、请求元数据测试中需关注“Content-Type、Authorization、Cookie”等核心头请求头作用示例Host目标服务器域名/IP端口。Host: api.test.comContent-Type请求体数据格式后端据此解析数据。application/jsonJSON格式、application/x-www-form-urlencoded表单格式、multipart/form-data文件上传。Authorization身份鉴权信息。Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...JWT Token、Basic dXNlcjE6cGFzc3dvcmQBasic Auth。Cookie客户端Cookie信息如SessionID。JSESSIONIDabc123; usernametestUser-Agent客户端浏览器/设备信息。Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36Accept客户端可接受的响应数据格式。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-Type为form-data后端可能解析失败返回400Authorization缺失访问需登录的接口返回401错误。