如何解析Jmeter响应并提出新请求


问题内容

我正在使用jMeter测试Tomcat应用程序。我需要解析jMeter响应并提出第二个请求。第一个响应如下所示:

<responseData class="java.lang.String">&lt;html&gt;&#xd;
&lt;body&gt;&#xd;
ERROR=0&#xd;
MSG=N/A&#xd;
FILELIST=1555;1340778737370;1526545487;&#xd;
VERSION=1.002&#xd;
URL=https://192.168.100.46/updserver/download?action=signature_download&amp;token=&#xd;
INTERVAL=0&#xd;
&lt;/body&gt;&#xd;
&lt;/html&gt;&#xd;
</responseData>

我需要提取“ FILELIST”和“ URL”变量,并将它们注入新的URL:

https://192.168.100.46/updserver/download?action=signature_download&amp;token=1555;1340778737370;1526545487;&#xd;

我知道有一些后处理器可以做到这一点,但不知道如何做到这一点。顺便说一句,第二个请求将从Tomcat
servlet下载一些文件,有没有办法让jMeter仅仅下载流而不写入物理文件?这样我就可以对我的servlet进行负载性能测试。


问题答案:

但是在这里,我将对此进行扩展。因此,您有采样器,并且已经有了${url}。现在,您需要FILELIST并组装新的URL。

假设您已经有请求和URL提取器。添加一个新的Regular expression extractor

Right click on request sampler -> Post Processors -> Regular ExpressionExtractor

Reference Name : FILELIST
Regular Expression : FILELIST=(\S+)
Template : $1$
Match No. (0 for Random): 1

因此,现在您有1个请求采样器和2个正则表达式提取器。您需要添加其他后处理器才能组合新的URL。

Right click on request sampler -> Post Processors -> BSF PostProcessor

beanshellScript language和下方的语言下拉列表中选择,在此Script:粘贴以下内容:

vars.put("NEW_URL", "${__javaScript('${url}'.replace('&#xd;'\,'${FILELIST}'))}");

现在,您必须${NEW_URL}在测试中进一步使用。

解决问题总是有不止一种方法,这种衬板看起来确实很丑,但是可​​以达到目的。

在我的测试中,结果如您所愿(Debug Sampler):

url=https://192.168.100.46/updserver/download?action=signature_download&amp;token=&#xd;
FILELIST=1555;1340778737370;1526545487;&#xd;
NEW_URL=https://192.168.100.46/updserver/download?action=signature_download&amp;token=1555;1340778737370;1526545487;&#xd;

编辑:

我想我不明白您如何命名变量。但是最终结果是您在问题中描述的结果。请参阅附带工作示例的.jmx测试:

http://www.filefactory.com/file/1q7nfitmh4qd/n/so_11309469_jmx

这是与2.6+版本的jmeter一起使用的jmeter .jmx文件