如何在JMeter中动态设置HTTP Referer头?

时间:2011-08-17 20:10:16

标签: windows-7 jmeter performance-testing

希望这是JMeter测试的常见问题。

我通过JMeter设置代理服务器,以便在我们的开发环境中“记录”测试用例。这工作正常,我设置了一些“ HTTP请求默认值”来全局设置默认的“服务器名称或IP”和“协议”。

既然已经在DEV上完成了测试,我们已经将代码移到我们的QA服务器上进行更多测试 - 我想我只需要在默认值中更改“服务器名称”然后运行测试。

我注意到的一件事是,对于我的测试用例中的每个采样器,该特定采样器的“ HTTP标头管理器”中存在其他标头 - 如User-Agent,Cache-Control, Referer 标头是我唯一关心的标头,因为它仍然是“硬编码”的DEV服务器。

有没有办法动态设置它 - 这样我就可以在多个环境中运行这个记录的测试?这通常如何处理?

任何帮助表示赞赏!感谢。

JG

3 个答案:

答案 0 :(得分:3)

  1. 在测试计划的根目录中设置名为server的JMeter变量
  2. 在HTTP请求默认服务器名称字段
  3. 中使用该变量
  4. 在HTTP标头管理器引用字段设置
  5. 中使用该变量

    如果要将JMeter属性从命令行传递到非GUI JMeter运行

    ,也可以使用JMeter属性而不是变量

答案 1 :(得分:1)

只有在HTTP请求中未提供任何值时,Jmeter才会读取HTTP请求默认值。如果您在请求中将域留空,它将从请求中读取;否则它使用本地值。

作为快速修复,请在文本编辑器中打开JMX文件,并使用空值替换所有域的实例。在Jmeter中重新打开文件后,将域值重新添加回HTTP Request Default配置元素。

要在将来避免这种情况,请在录制前填写“请求默认值”。 Jmeter将自动过滤掉与默认值匹配的值。

您也可以使用变量和user defined values执行此操作。请注意您设置的默认值。例如,如果你说customerID = 123,任何时候Jmeter在录制时都会检测到'123',它会用${customerID}替换它。因此,如果值为'12345',Jmeter将记录${customerID}45

答案 2 :(得分:0)

我这样做了:

  • 创建了名为SRVNAME和SRVPORT

  • 的用户定义变量
  • 将jmx文件中的http referrers值更改为:

<elementProp name="Referer" elementType="Header">
  <stringProp name="Header.name">Referer</stringProp>
  <stringProp name="Header.value">http://${SRVNAME}:${SRVPORT}/SomePage.html?querystring=blah</stringProp>
</elementProp>
  • 为具有覆盖的变量赋值,以便可以从命令行提供属性:
${__P(srvname,www.defaultserver.org)}
${__P(srvport,80)}
  • 在“服务器名称或IP”和“端口号”文本框中也使用了HTTP请求默认值中的变量。

希望这有帮助