比较JMeter中线程的提取变量

时间:2016-04-22 13:20:39

标签: jmeter integration-testing

我的目标是从我的线程组中的每个线程POST一些URL,这将在某处创建一个资产。如果一切顺利,第一个请求将创建资产,然后后续请求将看到资产已经创建(或正在创建),并将重用该资产。

测试计划:

  • 创建N个线程
    • HTTP请求 - POST到某个URL
    • 正则表达式提取器 - 提取部分响应(由POST请求生成的assetId)
  • 验证每个线程是否从响应中提取了相同的字符串

我的问题:

我不知道怎么做才是最后一步 - 验证从每个线程中提取的值是否相同。如何在JMeter中完成?

2 个答案:

答案 0 :(得分:2)

为了达到您的要求,我们需要在所有线程中共享值。

<强>属性:

我们可以使用属性来共享一个值。让我们假设一个道具共享&#39;使用默认值创建为空白&#34;&#34;。在beanshell assertion中添加以下代码。如果为空,则线程将添加从RegEx中提取的值。所有其他线程只会比较该值,如果它不匹配,它将失败。

if(props.get("shared")==""){
    props.put("shared") = "extracted";
}else{
    if(!props.get("shared").equals("extracted")){
        Failure = true; 
    }
}

<强> Bsh.shared:

我们可以使用bsh.shared共享命名空间在线程之间共享值,并比较所有线程是否具有相同的值。

1.setup threadgroup将包含这样的beanshell代码来创建一个hashset。

import java.util.*;

if (bsh.shared.hashSet == void){
    bsh.shared.hashSet=new HashSet();
}
bsh.shared.hashSet.clear();

2.常规线程组将包含用于提取值的代码。提取值后,将其添加到仅存储唯一值的哈希集。任何重复的值都会被忽略。

bsh.shared.hashSet.add("value extracted");

3.teardown threadgroup将分组将检查hashset的大小。如果大小超过1,则失败。

log.info(String.valueOf(bsh.shared.hashSet.size()));

答案 1 :(得分:1)

我猜你可以使用Response Assertion。

  • 测试计划:
    • 创建N个帖子
    • HTTP请求 - POST到某个URL
  • 使用响应声明验证每个请求在响应中是否具有相同的字符串 enter image description here

当您将此断言置于测试计划级别时,它将应用于所有线程。