K6读取图片文件失败求助:报Value is not an object: undefined错误
K6读取图片上传报错:Value is not an object: undefined
报错信息
Value is not an object: undefined at file:/tests/load/src/captainRegistration/uploadDocuments.js:7:23(39) at go.k6.io/k6/js.(*requireImpl).require-fm (native) at file:/tests/load/src/captainRegistration/captainSignUp.js:2:0(23) at go.k6.io/k6/js.(*requireImpl).require-fm (native) at file:/tests/load/test.js:4:0(34) hint="script exception"
我的代码
import http from 'k6/http'; import { check, sleep } from "k6"; import { FormData } from 'https://jslib.k6.io/formdata/0.0.2/index.js'; import { open } from 'k6'; const imageFile = open('./src/captainRegistration/captain.png', 'b'); // Create form data for the file let formData = new FormData(); formData.append('file', http.file(imageFile, 'captain.png', 'image/png'));
解决方法
核对文件路径:
open函数的路径是相对于k6运行时的工作目录,而非当前脚本文件目录。如果运行k6的命令是在/tests/load目录外执行的,路径需要调整。可以用绝对路径,或者切换到/tests/load目录后再运行k6。确认文件存在与权限:检查
./src/captainRegistration/captain.png路径下是否真的存在文件,且当前用户有读取权限。调整代码作用域:k6的测试逻辑应放在
default函数中执行,全局代码仅初始化一次。修改代码如下:
import http from 'k6/http'; import { check, sleep } from "k6"; import { FormData } from 'https://jslib.k6.io/formdata/0.0.2/index.js'; import { open } from 'k6'; export default function () { const imageFile = open('./src/captainRegistration/captain.png', 'b'); // 先确认文件读取成功 if (!imageFile) { throw new Error('无法读取图片文件'); } let formData = new FormData(); formData.append('file', http.file(imageFile, 'captain.png', 'image/png')); // 发送上传请求 const res = http.post('你的上传接口URL', formData.body(), { headers: { ...formData.headers() }, }); check(res, { '上传成功': (r) => r.status === 200 }); sleep(1); }
- 替换为原生multipart请求(无需FormData库):如果FormData库存在兼容性问题,直接用k6原生方式构造请求:
import http from 'k6/http'; import { check, sleep } from "k6"; import { open } from 'k6'; export default function () { const imageFile = open('./src/captainRegistration/captain.png', 'b'); if (!imageFile) { throw new Error('无法读取图片文件'); } const payload = { file: http.file(imageFile, 'captain.png', 'image/png'), }; const res = http.post('你的上传接口URL', payload, { headers: { 'Content-Type': 'multipart/form-data' }, }); check(res, { '上传成功': (r) => r.status === 200 }); sleep(1); }
内容的提问来源于stack exchange,提问作者Asmaa AlNaanah
相关产品推荐
相关产品推荐

