
Bruno API 测试:3 步搞定跨时区的时间校验【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/bruno做 Bruno API 测试时,最折磨人的失败往往不是 4xx/5xx,而是跟时间有关的:请求体里的时间戳是按本地时区手写的、token 有效期校验差了几小时、北京机器上一直绿,换个时区的 CI 一跑就红。Bruno 是一款轻量级开源 API 客户端(Postman/Insomnia 的替代方案),请求以纯文本.bru文件保存。它有个关键能力:发请求前可以跑前置脚本现算变量,响应回来后可以在tests段落里断言——这就足够搭出一套不依赖任何时区的时间校验方案。核心思路一句话:不比较墙上时间,只比较时间差。发出前记一个时间戳,收到后拿服务端时间一减,差值在容差内就算通过。无论跑在哪个时区,这套逻辑都成立。第 1 步:把时间基准写进环境文件Bruno 的环境(Environment)就是独立的一组变量集合,比如staging、prod,在界面顶部下拉即可切换。像容差这种想按环境调整的值,就放在环境里。在集合的environments/目录下新建一个文件,格式可参考环境文件示例:vars { apiHost: https://api.example.com clockSkewLimitMs: 5000 }clockSkewLimitMs是允许的时钟偏差(毫秒),CI 环境可以单独建一个文件放宽到 10000。第 2 步:前置脚本现算时间戳不要把时间戳手写到 URL 或请求体里——这正是跨时区问题的源头。改成发送那一刻由脚本计算:script:pre-request { bru.setVar(sentAt, String(Date.now())); }Date.now()返回毫秒级 Unix 时间戳,与时区无关;bru.setVar把它存成本次请求可引用的变量。第 3 步:响应回来后断言时间差假设服务端会在响应体里回显它收到的时间(字段为timestamp)。在tests段落里和sentAt做比较:tests { test(server clock within tolerance, () { const serverTime new Date(res.getBody().timestamp).getTime(); expect(Math.abs(serverTime - Number(bru.getVar(sentAt)))) .to.be.lessThan(bru.getVar(clockSkewLimitMs)); }); }断言失败时,响应面板会标红并展示实际值与期望值,一眼定位问题。验证方式与两个常见坑验证很简单:用宽、严两个环境各发一次同样的请求。宽松环境应通过;把 mock 服务端的返回时间人为偏移 10 秒,严格环境应失败。两个高频坑:毫秒还是秒:很多服务端返回 10 位秒级时间戳,忘乘1000会让偏差瞬间爆表。非 ISO 字符串解析:服务端返回2026-01-01 10:00:00这种裸格式时,不同引擎解析结果可能不一致,建议要求服务端返回 ISO 8601 字符串或纯数字。另外,Bruno 会自动记录每次请求的res.getResponseTime()(响应耗时,毫秒),这是网络性能数据、与服务端时钟无关,适合单独做性能断言,细节见响应对象。集合就是一组普通文件,所以这套时间配置可以直接进 Git 管理,团队在 diff 里就能看到每个环境的容差变化,比记得转时区的口头约定可靠得多。更多变量与脚本语法,见官方中文文档。【免费下载链接】brunoOpensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia)项目地址: https://gitcode.com/GitHub_Trending/br/bruno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考