You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter中JSR223 Sampler的Groovy脚本文件声明报错

处理JMeter JSR223 Sampler文件上传脚本的语法错误

原Groovy脚本

import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;


def imageFileName = "C:\\Users\\IMAGES\\IMG00001.dcm"

def urlRequest='https://<app-server>/api/v3/storage/namespace/7c762733-009f-4527-81ea-571d1cf6e9d2/image?sid=${SIDVALUE}&study_uid=1.2.300.0.7230010.3.1.2.2595064201.8112.1216202112026121&image_uid=1.2.840.113704.7.1.0.1356918323635126.1521373008.110'


def postRequest = new HttpPost(urlRequest);
def file = new File(imageFileName);
def builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, imageFileName);
def entity = builder.build();
post.setEntity(entity);
def response = HttpClientBuilder.create().build().execute(postRequestt);

报错信息

2022-09-01 13:44:03,501 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script44.groovy: 8: Unexpected input: '"' @ line 8, column 21.
   def imageFileName = "C:\Users\IMAGES\IMG00001.dcm"
                       ^

1 error

javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script44.groovy: 8: Unexpected input: '"' @ line 8, column 21.
   def imageFileName = "C:\Users\IMAGES\IMG00001.dcm"
                       ^

1 error

    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:183) ~[groovy-jsr223-3.0.3.jar:3.0.3]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:216) ~[ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72) [ApacheJMeter_java.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:630) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.3]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script44.groovy: 8: Unexpected input: '"' @ line 8, column 21.
   def imageFileName = "C:\Users\IMAGES\IMG00001.dcm"
                       ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:287) ~[groovy-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:143) ~[groovy-3.0.3.jar:3.0.3]
    at org.apache.groovy.parser.antlr4.AstBuilder.collectSyntaxError(AstBuilder.java:4544) ~[groovy-3.0.3.jar:3.0.3]
    at org.apache.groovy.parser.antlr4.AstBuilder.access$000(AstBuilder.java:341) ~[groovy-3.0.3.jar:3.0.3]
    at org.apache.groovy.parser.antlr4.AstBuilder$1.syntaxError(AstBuilder.java:4559) ~[groovy-3.0.3.jar:3.0.3]

已尝试操作

  • 将文件路径从C:\\Users\\IMAGES\\IMG00001.dcm改为C:\Users\IMAGES\IMG00001.dcm,问题未解决

解决方案

1. 替换HTML转义字符

脚本中的"是HTML转义的双引号,Groovy无法识别,必须替换为普通双引号"。

2. 修正变量名错误

脚本存在两处变量名拼写错误:

  • post.setEntity(entity); 应改为postRequest.setEntity(entity);(变量定义为postRequest,不是post)
  • execute(postRequestt); 应改为execute(postRequest);(多了一个t)

3. 正确处理Windows文件路径

Windows路径有两种合法写法,任选其一即可:

  • 双反斜杠:C:\\Users\\IMAGES\\IMG00001.dcm(需要转义)
  • 正斜杠:C:/Users/IMAGES/IMG00001.dcm(无需转义,推荐使用)

4. 正确引用JMeter变量

URL中的${SIDVALUE}如果是JMeter定义的变量,Groovy中需要通过vars.get("SIDVALUE")获取,否则会被当作字符串字面量传递。

修正后的完整脚本

import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;

// 使用双反斜杠或正斜杠的Windows路径
def imageFileName = "C:\\Users\\IMAGES\\IMG00001.dcm"
// def imageFileName = "C:/Users/IMAGES/IMG00001.dcm"

// 获取JMeter中的SIDVALUE变量
def sidValue = vars.get("SIDVALUE")
def urlRequest = "https://<app-server>/api/v3/storage/namespace/7c762733-009f-4527-81ea-571d1cf6e9d2/image?sid=${sidValue}&study_uid=1.2.300.0.7230010.3.1.2.2595064201.8112.1216202112026121&image_uid=1.2.840.113704.7.1.0.1356918323635126.1521373008.110"

def postRequest = new HttpPost(urlRequest);
def file = new File(imageFileName);
def builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, imageFileName);
def entity = builder.build();
// 修正变量名post为postRequest
postRequest.setEntity(entity);
// 修正变量名postRequestt为postRequest
def response = HttpClientBuilder.create().build().execute(postRequest);

// 可选:打印响应状态码,验证请求结果
log.info("请求响应状态码:" + response.getStatusLine().getStatusCode())

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:12:49