【问题标题】:Replace blank with date用日期替换空白
【发布时间】:2020-03-02 17:29:02
【问题描述】:
String c = ${__timeShift(yyyy-MM-dd,,P10D,)}
log.info("Today date " + "${c}")
vars.put("DATE_PLUS_10", "${c}")
System.out.println("${c}");   ---- This is printing 2007
def response = prev.getResponseDataAsString()
log.info('Response Initial: ' + response)
def request = response.replaceAll('""', ${DATE_PLUS_10})
log.info('Response Massaged: ' + request)
vars.put('request', request)
//vars.putObject('request', 'request');
System.out.println(${request});

我需要在当前日期加上 10 天,并将空值替换为 DATE_PLUS_10

2020-02-29 20:20:15,548 错误 o.a.j.e.JSR223PostProcessor:出现问题 JSR223 脚本,RESPONSE_STORE javax.script.ScriptException: groovy.lang.MissingMethodException:没有方法签名: org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.$() 适用 对于参数类型: (Script2$_run_closure1) 值: [Script2$_run_closure1@76fcaee5] 可能的解决方案: 是(java.lang.Object),任何(),获取(java.lang.String), 任何(groovy.lang.Closure),使用([Ljava.lang.Object;),等待()在 org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-all-2.4.13.jar:2.4.13] 在 org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.13.jar:2.4.13] 在 javax.script.CompiledScript.eval(CompiledScript.java:92) ~[?:1.8.0_181]

谁能告诉我这行的问题是什么:

def request = response.replaceAll('""', ${DATE_PLUS_10})
String c = ${__timeShift(yyyy-MM-dd,,P10D,)} -

DATE_PLUS_10=2007 - 这是调试采样器显示的内容..

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    不要在 JSR223 脚本中使用 ${} 语法,

    您可以添加一个预处理器User Parameters

    允许用户为特定于各个线程的用户变量指定值

    添加一个变量为DATE_PLUS_10,其值为:

      ${__timeShift(yyyy-MM-dd,,P10D,)}
    

    然后在脚本中使用它

     String c = vars.get("DATE_PLUS_10");
    

    【讨论】:

      【解决方案2】:

      您可以使用全局变量或用户变量,然后您可以编写

      def DATE_PLUS_10=vars.get("DATE_PLUS_10")
      log.info(DATE_PLUS_10)
      def response = "2020-05-01"//prev.getResponseDataAsString()
      log.info('Response Initial: ' + response)
      def request = response.replaceAll('""', DATE_PLUS_10)
      log.info('Response Massaged: ' + request)
      

      如上一个答案所述,您不能在 JSR223 处理器中使用 ${}。

      【讨论】:

        【解决方案3】:

        我尝试了下面这个 beanshell 预处理器。

        import java.text.SimpleDateFormat; 
            import java.util.Date; 
        
            Date date = new Date(); 
            date.setDate(date.getDate()+10); 
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
            // or: SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy"); 
            String formattedDate = df.format(date); 
            vars.put("FUTUREDATE",formattedDate); 
        

        并使用了 JSR 后处理器

        def mydate =vars.get("FUTUREDATE");
        log.info("my date" + mydate)
        def response = prev.getResponseDataAsString()
        log.info('Response Initial: ' + response)
        def request = response.replaceAll('""', mydate)
        log.info('Response Massaged: ' + request)
        vars.put('request', request)
        //vars.putObject('request', 'request');
        System.out.println(${request});
        

        问题现已解决。

        【讨论】:

          【解决方案4】:

          不要将 JMeter 函数或变量内联到脚本中,您可以使用“参数”部分,例如:

          或者,如果您想要“纯”Groovy 代码:

          def newDate = new Date().plus(10).format('yyyy-MM-dd')
          

          更多信息:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-01
            • 1970-01-01
            • 2014-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多