使用Jest和Chai测试时如何测量GraphQL API的响应时长
方案1:零依赖手动计时(兼容性最好)
不需要引入任何额外工具,直接在请求前后记录时间戳计算差值即可,修改你的测试代码如下:
it("Query works", async () => { const startTime = Date.now(); const res = await chai .request(app) .post("/api") .send({ query: ` { someQuery { data } } `, }); // 计算得到耗时,单位为毫秒 const requestDuration = Date.now() - startTime; // 可以直接打印记录,也可以写入文件做后续统计 console.log(`someQuery 响应耗时:${requestDuration}ms`); // 也可以额外增加性能断言,要求耗时不超过指定阈值 expect(requestDuration).toBeLessThan(500); expect(res.body.data.someQuery.length).toBe(31); })
如果需要批量统计所有测试用例的耗时,可以把请求逻辑封装成公共函数,不用每个用例重复写计时代码。
方案2:使用chai-http内置属性
如果你使用的是较新版本的chai-http,响应对象本身已经内置了耗时统计,直接读取res.elapsedTime属性即可获取请求耗时,不需要自己手动计算:
it("Query works", async () => { const res = await chai .request(app) .post("/api") .send({ query: ` { someQuery { data } } `, }); console.log(`响应耗时:${res.elapsedTime}ms`); expect(res.body.data.someQuery.length).toBe(31); })
第三方工具选择
如果需要更复杂的统计能力,比如百分位耗时、平均耗时、自动生成性能报告,可以选择以下工具:
jest-bench:可以直接集成到Jest测试流程中,自动生成性能基准测试报告,支持对比不同版本的性能差异chai-http-stats:可以批量采集所有chai-http请求的耗时数据,支持自定义统计规则
适配Github Actions的优化建议
你可以把耗时数据按固定格式输出到CI日志中,后续可以直接通过CI的日志分析能力汇总性能变化,也可以设置耗时阈值断言,一旦接口耗时超过阈值就直接判定测试失败,提前发现性能退化问题。
内容的提问来源于stack exchange,提问作者lpetrucci
相关产品推荐
相关产品推荐

