关于变量值的JMeter unescapeHtml

时间:2016-06-15 21:37:23

标签: jmeter

如果我有一个带有以下脚本的BeanShell PostProcessor:

vars.put("avar", ${__unescapeHtml("<escele>esceleValue</escele>")});
vars.put("bvar", "<escele>esceleValue</escele>");
vars.put("cvar", ${__unescapeHtml(vars.get("bvar"))});

我在Debug PostProcessor中得到以下内容:

avar=<escele>esceleValue</escele>
bvar=&lt;escele&gt;esceleValue&lt;/escele&gt;
cvar=&lt;escele&gt;esceleValue&lt;/escele&gt;

我希望cvar的值与avar的值相匹配。有没有办法做到这一点?

最终,我试图获得如下声明,以便在响应数据中使用转义的XML。在这个过程中,我尝试了PostProcessor提取器,它成功地将所有响应数据放在一个变量中,然后尝试在上面的测试用例中解除变量。我假设使用变量或使用“prev.getResponseDataAsString()”时问题是相同的。

vars.put("avar", ${__unescapeHtml(prev.getResponseDataAsString())});

1 个答案:

答案 0 :(得分:1)

我建议停止将JMeter Functions and/or Variables内联到支持脚本的测试元素,因为它可能会导致ValueReplacer出现意外行为,并且在JSR223 Sampler and Groovy language的情况下肯定会导致性能下降,因为包含变量和函数引用的脚本不能被编译成字节码。

鉴于你:

  1. 已使用Beanshell
  2. 根据功能文档了解__unescapeHtml()函数正在使用StringEscapeUtils
  3. 为什么不直接调用代码,如:

    import org.apache.commons.lang3.StringEscapeUtils;
    
    
    vars.put("avar", ${__unescapeHtml("&lt;escele&gt;esceleValue&lt;/escele&gt;")});
    vars.put("bvar", "&lt;escele&gt;esceleValue&lt;/escele&gt;");
    vars.put("cvar", ${__unescapeHtml(vars.get("bvar"))});
    vars.put("dvar", StringEscapeUtils.unescapeHtml4(vars.get("bvar")));
    
    log.info(vars.get("dvar"));
    

    Beanshell String Escape