LoadRunner调用REST API上传文件异常:仅能上传16字节文件
解决LoadRunner调用REST API上传文件仅传16字节的问题
嘿,我之前帮同事解决过一模一样的问题!你现在遇到的情况是因为LoadRunner的web_rest调用里,文件上传的参数写法错了——你用Value来指定文件路径,这相当于把C://PerfDoc2.doc这个字符串直接传去服务器了,长度刚好就是16字节左右,自然不是你要上传的20MB文件。Postman会自动帮你处理文件上传的multipart/form-data格式,但LoadRunner得明确告诉它“这是一个文件,要读取内容上传”。
核心修正方案
把attachment字段的Value参数换成File,同时加上匹配文件类型的ContentType,这样LoadRunner才会读取文件实际内容并上传。
修正后的代码
web_rest("UPLOAD", "URL={URL}", "Method=POST", "EncType=multipart/form-data", "Snapshot=t2.inf", ITEMDATA, "Name=EmployeeId", "Value={EmployeeId}", ENDITEM, "Name=ComponentId", "Value={ComponentId}", ENDITEM, "Name=entityId", "Value={entityid}", ENDITEM, "Name=CategoryId", "Value={CategoryId}", ENDITEM, "Name=tagId", "Value={tagid}", ENDITEM, "Name=fileName", "Value=abc.doc", ENDITEM, // 关键修改:用File指定文件路径,添加ContentType匹配文件类型 "Name=attachment", "File=C://PerfDoc2.doc", "ContentType=application/msword", ENDITEM, HEADERS, "Name=CSRF_TOK", "Value={CSRF_TOK}", ENDHEADER, "Name=X-REST-API", "Value=true", ENDHEADER, "Name=X-Requested-With", "Value=XMLHttpRequest", ENDHEADER, LAST);
额外注意事项
- 文件路径验证:确保LoadRunner运行的机器能访问到
C://PerfDoc2.doc,如果是用远程负载生成器,要把文件放到对应机器上,或者使用共享网络路径。 - ContentType匹配:如果上传的是docx文件,要把
ContentType改成application/vnd.openxmlformats-officedocument.wordprocessingml.document,避免服务端解析文件失败。 - Snapshot检查:如果
t2.inf是录制生成的快照文件,可能需要手动更新它确保multipart的边界等参数正确;要是不需要依赖快照,也可以直接去掉Snapshot=t2.inf这一行。
备选方案:用web_custom_request手动控制请求
如果web_rest还是有问题,可以试试web_custom_request,手动拼接multipart请求体,用Binary参数指定文件内容,这种方式更灵活:
web_custom_request("UPLOAD", "URL={URL}", "Method=POST", "EncType=multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "Body=------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"EmployeeId\"\r\n\r\n{EmployeeId}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"ComponentId\"\r\n\r\n{ComponentId}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"attachment\"; filename=\"PerfDoc2.doc\"\r\nContent-Type: application/msword\r\n\r\n", "Binary= C://PerfDoc2.doc", "Body=------WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n", HEADERS, "Name=CSRF_TOK", "Value={CSRF_TOK}", ENDHEADER, "Name=X-REST-API", "Value=true", ENDHEADER, "Name=X-Requested-With", "Value=XMLHttpRequest", ENDHEADER, LAST);
内容的提问来源于stack exchange,提问作者Reetika Nijhawan
相关产品推荐
相关产品推荐

