2016-08-19 94 views
0

承担负载测试时,我遇到了需要使用动态变量(javax.faces.ViewState)的情况。XPath和正则表达式都不能在JMeter 3.0上工作

解决方案是使用XPath或正则表达式提取器。

他们都没有工作(... & javax.faces.ViewState =%24%7Bvar1%7D):

enter image description here

enter image description here

变量的值I使用的

<input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)"autocomplete="off" />

//input[@id='javax.faces.ViewState']/@value

来源:http://se7so.blogspot.com/2012/12/apache-jmeter-along-with-jsf-pages.html

UPDATE1:

所生成的参数由JSF:

enter image description here

UPDATE2

使用谷歌Chrome浏览器的控制台:

enter image description here

我错过了什么?

+1

在您的第一个屏幕中,您在XPath提取器窗体中输入正则表达式,对吧?将'//input[@id='javax.faces.ViewState']/@ value'放在XPath Extractor中,如果页面上有这样一个'input',它应该可以工作。 –

+1

您是否尝试过使用[Regular Expression Extractor](http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor)?看到响应数据也是有用的...... –

+0

@WiktorStribiżew,它没有工作,我更新了问题。 $ {var1}仍然被误解。 –

回答

1

尝试在Regular Expression Extractor使用该正则表达式为:

INPUT TYPE = “隐藏” 名称= “javax.faces.ViewState” ID = “javax.faces.ViewState” 值=“(+。? )“

Here你可以看到它的工作。

2
  1. 对于需要转义逗号,因为他们还不如special characters进行处理,因此使用下面的正则表达式正则表达式:

    <input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)" autocomplete="off" /> 
    

    演示:

    Regular Expression Extractor

  2. 对于XPath Extractor如果您的回复不符合XML/XHTML标准,您可能需要检查Use Tidy框以处理w ith“常规”HTML。

    Xpath Demo

顺便说一句,你可以验证你的常规,XPath的,CSS和抗住服务器响应JSONPath表达,而不必重新运行使用View Results Tree监听测试,看看How to Debug your Apache JMeter Script了解详情。

+0

问题是我总是得到URL?javax.faces.ViewState = $ {var1},而我提到了默认值”NOTFOUND“。 $ {var1}被视为硬编码值,而不是变量。 –

+0

JMeter变量是**局部**到线程组,如果您的目标是在不同的线程组中重复使用这个'ViewState'值,您需要通过[__setProperty()](https://将其转换为JMeter属性jmeter.apache.org/usermanual/functions.html#__setProperty)函数。有关说明,请参阅[如何在不同线程组中使用变量](https://www.blazemeter.com/blog/knit-one-pearl-two-how-use-variables-different-thread-groups)文章 –