JMeter中使用JSR223发送TCP请求并获取响应的方法咨询
完整实现代码
import java.net.Socket import java.net.InetSocketAddress import java.io.ByteArrayOutputStream def sock = new Socket() def host = "myIPNumber" // 替换为目标服务IP def port = 1234 // 替换为目标服务端口 def timeout = 10000 // 超时时间,单位毫秒 // 替换为你要发送的请求内容 def requestContent = "自定义TCP请求内容" // 替换为业务约定的编码格式,比如GBK、ISO-8859-1等 def charset = "UTF-8" try { sock.setSoTimeout(timeout) sock.connect(new InetSocketAddress(host, port), timeout) if (sock.isConnected()) { log.info('TCP连接建立成功') // 发送请求数据 def out = sock.getOutputStream() out.write(requestContent.getBytes(charset)) out.flush() // 读取响应数据 def inputStream = sock.getInputStream() def byteArrayOutputStream = new ByteArrayOutputStream() def buffer = new byte[1024] int len while ((len = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, len) } def responseContent = byteArrayOutputStream.toString(charset) log.info("TCP服务端响应内容:${responseContent}") // 将响应存入JMeter变量,后续可通过${tcp_response}引用 vars.put("tcp_response", responseContent) // 设置采样结果 SampleResult.setSuccessful(true) SampleResult.setResponseData(responseContent, charset) SampleResult.setResponseCodeOK() // 关闭流 out.close() inputStream.close() byteArrayOutputStream.close() } else { log.info('目标端口未监听') SampleResult.setSuccessful(false) SampleResult.setResponseMessage("目标端口未监听") } } catch (Exception e) { log.error("TCP请求处理失败", e) SampleResult.setSuccessful(false) SampleResult.setResponseMessage("请求异常:${e.getMessage()}") } finally { // 关闭Socket连接 if (sock != null && !sock.isClosed()) { sock.close() } }
关键逻辑说明
- 发送TCP请求:通过Socket实例的
getOutputStream()方法获取输出流,将需要发送的业务请求内容转为对应编码的字节数组后写入流,执行flush()确保数据全部发送到服务端,无残留缓存。 - 读取响应数据:通过
getInputStream()方法获取输入流读取服务端返回的字节内容,转为字符串时注意和服务端约定的编码保持一致,避免乱码。 - 存储为JMeter变量:调用JSR223内置对象
vars.put("自定义变量名", 响应内容字符串)即可完成变量存储,后续所有JMeter组件都可以通过${自定义变量名}的格式直接引用该响应值。
TCP Sampler报错原因说明
TCP Sampler依赖*结束符(EOL)*匹配判断响应是否结束,如果服务端返回的报文未携带你配置的结束标识,Sampler会持续等待直到超时;如果结束符配置和实际报文不匹配,会直接返回500错误。如果不想做额外的结束符适配,直接用JSR223自定义Socket读写的方式灵活性更高。
内容的提问来源于stack exchange,提问作者usama ibrahim
相关产品推荐
相关产品推荐

