通过K6运行Playwright脚本时触发TypeError错误求助
解决K6调用Playwright脚本时的
Value is not an object: undefined错误 问题背景
尝试用K6实现多用户负载测试,使用Playwright录制的自动化脚本,但运行k6 run script.js时触发错误:TypeError: Value is not an object: undefined,错误定位到exec函数调用处。
错误原因
你误用了K6的k6/execution模块中的exec函数——这个API的作用是在当前VU(虚拟用户)的上下文内执行自定义函数,并非用来调用外部命令行程序。要执行外部命令,需要使用K6提供的k6/child_process模块(仅在k6 v0.37.0及以上版本支持,且仅能在本地环境运行)。
解决方案
- 替换导入模块:改用
k6/child_process的execSync(同步执行,适配K6的VU同步执行模型) - 修正命令:使用
npx playwright test而非直接playwright,确保能正确调用Playwright CLI - 启用无头模式:负载测试场景下,无头模式(
--headless)能大幅降低资源消耗
修改后的K6脚本(script.js)
import { execSync } from 'k6/child_process'; import { sleep } from 'k6'; export let options = { stages: [ { duration: '10m', target: 10 }, // 10分钟内逐步扩容至10个虚拟用户 { duration: '9m', target: 10 }, // 维持10个虚拟用户运行9分钟 { duration: '1m', target: 0 } // 1分钟内逐步缩容至0用户 ], thresholds: { http_req_duration: ['p(95)<500'], // 注意:该阈值对Playwright的请求无效,详见下方说明 } }; export default function () { // 同步执行Playwright测试命令,无头模式运行 execSync('npx playwright test HRH.spec.js --headless'); sleep(1); }
关键注意事项
- 资源消耗:每个VU都会启动一个独立的Playwright进程,10个VU意味着同时运行10个浏览器实例,需根据本地机器配置调整
target数值,避免资源耗尽 - 阈值无效问题:K6的
http_req_duration阈值无法捕获Playwright发起的请求,若需监控性能,需使用Playwright自身的追踪功能(如--trace on),或在Playwright脚本中自定义K6指标并上报 - 运行限制:
k6/child_process仅支持本地执行,无法在k6 Cloud环境中运行
内容的提问来源于stack exchange,提问作者Hs15
相关产品推荐
相关产品推荐

