利用HAR 文件做接口测试

📅 2026/8/20 23:51:53
利用HAR 文件做接口测试
HAR 文件是什么HARHTTP Archive是一种基于 JSON 的网络请求归档格式扩展名通常为.har。浏览器开发者工具、Charles、Fiddler、Playwright 等工具都可以导出 HAR。它通常记录请求 URL、HTTP 方法、查询参数请求头、Cookie、请求体响应状态码、响应头、响应体DNS、连接、TLS、等待、下载等耗时页面加载和请求之间的时序关系HAR 常用于排查接口问题、分析页面性能以及把浏览器中的真实请求还原为接口测试。需要注意HAR 可能包含Authorization、Cookie、Token、手机号和响应业务数据等敏感信息分享或提交代码库前必须脱敏。如何生成 HAR以 Chrome 为例打开目标页面按F12。进入Network面板。勾选Preserve log需要完整资源时避免勾选禁用缓存。清空已有请求。执行要测试的操作。在请求列表中右键选择Save all as HAR with content。如何从 HAR 中找到接口HAR 文件的核心结构是{log:{entries:[{request:{method:POST,url:https://api.example.com/users,headers:[],queryString:[],postData:{mimeType:application/json,text:{\name\:\Alice\}}},response:{status:201,headers:[],content:{mimeType:application/json,text:{\id\:123,\name\:\Alice\}}},time:128}]}}进行接口测试时重点查看request.methodrequest.urlrequest.headersrequest.queryStringrequest.postDataresponse.statusresponse.contenttime不要直接把 HAR 中所有请求都当作接口。图片、字体、JS、CSS、埋点和广告请求通常应先过滤掉优先查找fetch、XHR、GraphQL以及返回 JSON 的请求。方式一用 Postman 测试打开 Postman。选择Import。导入.har文件。选择需要的请求。检查并更新环境相关数据域名TokenCookie用户 ID时间戳签名点击Send。增加断言例如pm.test(状态码为 200,function(){pm.response.to.have.status(200);});pm.test(返回成功,function(){constbodypm.response.json();pm.expect(body.code).to.eql(0);});pm.test(响应时间小于 500ms,function(){pm.expect(pm.response.responseTime).to.be.below(500);});HAR 只是某一时刻的请求快照。登录 Token、Cookie、CSRF Token、验证码和签名参数往往已过期通常需要重新获取或参数化。方式二转成 cURL 测试在 Chrome Network 中右键某个请求选择Copy as cURL然后在终端执行curlhttps://api.example.com/users?id123\-HAuthorization: Bearer YOUR_TOKEN\-HAccept: application/json带 JSON 请求体的接口curl-XPOSThttps://api.example.com/users\-HContent-Type: application/json\-HAuthorization: Bearer YOUR_TOKEN\--data{name:Alice}查看状态码、响应头和详细连接信息curl-i-vhttps://api.example.com/users/123这种方式适合快速复现单个接口问题。方式三使用 Python 自动化测试可以先从 HAR 提取请求再用requests和pytest编写可重复运行的测试importrequestsdeftest_get_user():responserequests.get(https://api.example.com/users/123,headers{Authorization:Bearer test-token,Accept:application/json,},timeout10,)assertresponse.status_code200bodyresponse.json()assertbody[id]123assertbody[name]运行pytest-vHAR 中的动态值应替换为环境变量importosimportrequestsdeftest_get_user():tokenos.environ[API_TOKEN]responserequests.get(f{os.environ[API_BASE_URL]}/users/123,headers{Authorization:fBearer{token}},timeout10,)assertresponse.status_code200API_BASE_URLhttps://api.example.com\API_TOKENyour-token\pytest-v接口测试应该验证什么不要只验证 HTTP 状态码。通常还应覆盖正常场景正确参数是否返回预期结果。参数校验缺少字段、错误类型、超长字符串、边界值。身份认证无 Token、过期 Token、伪造 Token。权限控制普通用户能否访问管理员接口用户 A 能否访问用户 B 的数据。响应结构字段名称、类型和必填字段是否稳定。业务规则库存、余额、状态流转、重复提交是否正确。幂等性重复调用是否产生重复数据。性能响应时间、并发能力和超时行为。安全性敏感信息泄露、越权、注入、重放攻击等。错误处理错误码和错误信息是否明确且一致。常见问题在浏览器成功Postman 失败通常缺少 Cookie、Token、CSRF Token、Origin或签名参数。返回 401/403认证信息失效或权限不足。返回 400请求体格式、Content-Type或必填参数不正确。返回 415服务端不支持当前请求体类型。请求签名错误时间戳、nonce、参数顺序或密钥需要重新计算。响应体看不到HAR 可能没有使用 “with content” 导出或内容是二进制/经过 Base64 编码。直接重放有副作用创建订单、支付、删除等接口可能真实修改数据应在测试环境操作并准备清理策略。简而言之HAR 用来保存真实 HTTP 流量可以从中提取接口请求再通过 Postman、cURL 或自动化测试框架进行重放、参数化和断言验证。