JMeter响应断言:将属性合并到模式测试中

时间:2012-12-03 21:56:14

标签: regex properties jmeter assertion

我想设置一个JMeter测试计划,以建议网站(URL)是否基于Drupal(完全基于来自网站的HTTP响应),并将其与我在环境中的现有数据进行比较。 (我意识到使用HTTP方法,而不是检查网站的文件系统,是“iffy”,但我很好奇这种方法是多么有用)

JMeter命令行可能如下所示:

JMeter -t "DrupalAssertions.jmx" -Jurl=http://my.dot.com -Jdrupal=true

我提供了测试的URL和一个额外的属性“drupal”,表明我最好猜测该网站是否是基于Drupal的。

在我的测试计划中,我添加了一个HTTP请求以返回URL的页面的HTML内容。然后我能够成功地添加一个响应断言来测试一个模式(比如(?i)(drupal)表示一个遗憾的缺乏模式),看看它是否包含在响应中。

这样做很好,或者正如预期的那样,但我想要做的是将“drupal”属性的值与同一个响应断言中的模式测试结果进行比较。我知道我在这里缺少一些简单的东西,但我没有看到如何做到这一点。

我想尝试使用这样的表达式:

(?i)(drupal) == ${__P(drupal)} 

在一个模式中,但这不起作用。 Compare Assertion的名称看起来很有希望,但我不知道如何将该属性合并到比较中。

更新:PMD UBIK-INGENIERIE建议的方法确实有效。我使用了正则表达式提取器,如下所示:

<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Drupal in Response" enabled="true">
  <stringProp name="RegexExtractor.useHeaders">false</stringProp>
  <stringProp name="RegexExtractor.refname">drupalInResponse</stringProp>
  <stringProp name="RegexExtractor.regex">(.*drupal.*)</stringProp>
  <stringProp name="RegexExtractor.template">$0$</stringProp>
  <stringProp name="RegexExtractor.default">__false__</stringProp>
  <stringProp name="RegexExtractor.match_number">1</stringProp>
</RegexExtractor>

后面是这个BeanShell断言:

// Variable "drupalInResponse" is "__false__" by default
if ( !(vars.get("drupalInResponse").equals("__false__") ) ) {
  vars.put("drupalInResponse","true");
}
else {
  vars.put("drupalInResponse","false");
}

print("\n\nThe value of property 'drupal' is: " + props.get("drupal") + "\n");
print("\n\nThe value of variable 'drupalInResponse' is: " + vars.get("drupalInResponse") + "\n");

if (vars.get("drupalInResponse").equals( props.get("drupal") ) ) { 
  print("Site Drupalness is consistent with your beliefs"); 
} 
else { 
  print("You're wrong about the site's Drupalness"); 
  Failure = true; 
  FailureMessage = "Incorrect Drupal assumption"; 
}

在正则表达式提取器中,我设置了一个默认值,我觉得这个值与我感兴趣的模式不匹配,然后在BeanShell Assertion中与“drupal”属性进行了一次丑陋的冗长Java比较。

希望以某种方式断言可以在一个组件中进行,而不是它有两个部分,但你不能与“工作”争论:)

1 个答案:

答案 0 :(得分:1)

您可以使用带有第一个模式的正则表达式提取器

然后使用Beanshell断言,它将使用您的变量并将其与drupal属性进行比较。