Jmeter beanshell匹配并更换

Jmeter beanshell匹配并更换,jmeter,javabeans,Jmeter,Javabeans,我很少编写脚本,使用Jmeter的beanshell使用reg表达式时遇到问题。 基本上,我有一个16位的输出。我想搜索字符串,将每2个字符分开,并在前面加上“0x”和空格,对所有16位数字重复,最后在自定义参数中使用vars.put。我在bash中很容易做到这一点,但无法用beanshelljmeter找到解决方案 // get current date var d = new Date(); // convert to epoch var militime = d.getTime(); /

我很少编写脚本,使用Jmeter的beanshell使用reg表达式时遇到问题。 基本上,我有一个16位的输出。我想搜索字符串,将每2个字符分开,并在前面加上“0x”和空格,对所有16位数字重复,最后在自定义参数中使用vars.put。我在bash中很容易做到这一点,但无法用beanshelljmeter找到解决方案

//  get current date
var d = new Date();
// convert to epoch
var militime = d.getTime();
// convert to 16digit
//var nowtime1 = (long.valueOf(militime) * 1000);
var nowtime1 = militime * 1000;

var nowtime1 = nowtime1.replace(/({0,2})/g,"x0"); //I'm unsure of the syntax here
有人有改进的建议吗

这是我的bash脚本使用sed格式化的示例输出:

1495207922508835
0x14 0x95 0x20 0x79 0x22 0x50 0x88 0x35

我会将当前时间检索简化为
System.currentTimeMillis()*1000
。其次,您试图将数字当作字符串来处理,但随后需要将其转换为字符串。正则表达式本身几乎是正确的。整个脚本如下所示:

now = "" + (java.lang.System.currentTimeMillis() * 1000);
result = now.replaceAll("(.{2})", "0x$1 ");
例如:

now              result
1495215390956000 0x14 0x95 0x21 0x53 0x90 0x95 0x60 0x00 
1495215441281000 0x14 0x95 0x21 0x54 0x41 0x28 0x10 0x00

使用BeeSebe是创建JMIT脚本时的一种形式,您应该考虑使用,而不是Groovy,因为它资源较低,性能更好,并且更符合java。p> 回到您的问题,您的需求的Groovy实现类似于:

def now = "1495207922508835"

def result = new StringBuilder()
now.split("(?<=\\G..)").each {
    result.append("0x").append(it).append(" ")
}
log.info(result.toString())
def now=“1495207922508835”
def结果=新的StringBuilder()

现在.split(“(?只是确认一下,是否有任何方法可以使用javascript以微秒为单位检索时间?您不能在BeanShell中使用javascript:BeanShell是一种类似Java的语言。如果您想使用javascript,请按照Dmitri t的建议切换到JSR223后处理器。