Jmeter:从JSR223预处理器替换当前采样器中的数据

Jmeter:从JSR223预处理器替换当前采样器中的数据,jmeter,Jmeter,在启动应用程序之前,我需要对请求xml进行签名并向其添加令牌。为此,我使用了一个JSR223预处理器,它从当前采样器获取数据,进行必要的更改并将数据放回采样器。这种方法适用于单线程组。当使用多个线程组时,采样器(在不同的线程组中)之间的数据会交换,这会导致对线程组的错误请求。以下是我的预处理器中的代码: import jmeter_plugin.*; String body = sampler.getXmlData(); log.info(body); Utils utils=new Utils

在启动应用程序之前,我需要对请求xml进行签名并向其添加令牌。为此,我使用了一个JSR223预处理器,它从当前采样器获取数据,进行必要的更改并将数据放回采样器。这种方法适用于单线程组。当使用多个线程组时,采样器(在不同的线程组中)之间的数据会交换,这会导致对线程组的错误请求。以下是我的预处理器中的代码:

import jmeter_plugin.*;
String body = sampler.getXmlData();
log.info(body);
Utils utils=new Utils();
String request=utils.getResponse( body,"url/to/fetch/token");
log.info(request);
sampler.setXmlData(request);

尝试为整个测试计划使用单个预处理器,并为每个线程组使用单独的预处理器。这两种方法都不起作用

无论你有多少,你的方法都应该很有效。预处理器在其范围内的每个采样器之前执行,并且只应修改当前的采样器

快速检查表:

  • 确保您使用的是as JSR223预处理器语言
  • 确保选中了
    缓存已编译脚本(如果可用)

  • 删除这些
    log.info
    行,因为它们会产生不必要的磁盘IO开销
  • 确保您的
    Utils
    类不使用不可用的方法
  • 查看
    sampler.getXmlData()
    似乎您正在使用JMeter 3.1或更低版本,因为中的SOAP/XML-RPC请求已被删除,建议用户改用sampler
  • 如果您的“符号”算法不是很奇特,那么可以使用


  • 不管你有多少,你的方法都应该很有效。预处理器在其范围内的每个采样器之前执行,并且只应修改当前的采样器

    快速检查表:

  • 确保您使用的是as JSR223预处理器语言
  • 确保选中了
    缓存已编译脚本(如果可用)

  • 删除这些
    log.info
    行,因为它们会产生不必要的磁盘IO开销
  • 确保您的
    Utils
    类不使用不可用的方法
  • 查看
    sampler.getXmlData()
    似乎您正在使用JMeter 3.1或更低版本,因为中的SOAP/XML-RPC请求已被删除,建议用户改用sampler
  • 如果您的“符号”算法不是很奇特,那么可以使用


  • 预处理器是每个线程的,没有其他线程(即使在同一线程组中)可以访问它。。。所以这里有些东西不符合逻辑——在你的问题中没有足够的信息来确定是什么原因造成的。绝对不仅仅是预处理器的使用。是的,修复了它!这是因为我的Utils类预处理器是每个线程的,并且没有其他线程(即使在同一线程组中)可以访问它。。。所以这里有些东西不符合逻辑——在你的问题中没有足够的信息来确定是什么原因造成的。绝对不仅仅是预处理器的使用。是的,修复了它!这是由于我的Utils类问题与Utils中的一个方法有关,该方法不是线程安全的。谢谢你的建议!问题在于UTIL中的一个方法不是线程安全的。谢谢你的建议!