k6中如何使用导入的SharedArray对象?解决未定义报错
k6支持跨文件使用SharedArray,但错误的导出/导入方式会触发「SharedArray is not defined」报错,以下是正确操作步骤和问题排查:
正确实现方式
1. 导出文件(path/to/file.js)
必须在模块**顶层(init阶段)**创建SharedArray并导出,SharedArray只能在init阶段实例化:
// path/to/file.js import { SharedArray } from 'k6/data'; // 在init阶段创建SharedArray并导出 export const constant_with_shared_array = new SharedArray('my-data', function () { // 这里编写数据加载逻辑,比如读取本地文件、生成测试数据 return [ { id: 1, payload: 'test-content-1' }, { id: 2, payload: 'test-content-2' } ]; });
2. 主文件导入使用
主文件直接导入后,即可在VU阶段的测试逻辑中使用:
import { constant_with_shared_array } from 'path/to/file.js'; import http from 'k6/http'; export const options = { vus: 10, duration: '30s' }; export default function() { // 从SharedArray中随机选取一条数据 const randomData = constant_with_shared_array[Math.floor(Math.random() * constant_with_shared_array.length)]; const response = http.request('POST', 'https://your-api-domain.com/api/some', JSON.stringify(randomData)); // 后续断言或其他逻辑... }
「SharedArray is not defined」报错的常见原因
- 在非init阶段创建SharedArray:SharedArray只能在模块顶层、非VU函数内部的init阶段实例化,若在导出文件的函数内创建会触发错误。
- 未导入k6/data模块:导出文件必须显式导入
SharedArray,部分k6版本不支持直接全局访问该对象。 - 导入路径错误:若导入的文件路径不正确,会加载到未初始化SharedArray的文件,进而触发报错。
内容的提问来源于stack exchange,提问作者DiasSv
相关产品推荐
相关产品推荐

