Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JMeter中跨线程比较提取的变量_Jmeter_Integration Testing - Fatal编程技术网

在JMeter中跨线程比较提取的变量

在JMeter中跨线程比较提取的变量,jmeter,integration-testing,Jmeter,Integration Testing,我的目标是从我的线程组中的每个线程发布到某个URL,这将在某处创建一个资产。如果一切顺利,第一个请求将创建资产,随后的请求将看到资产已经创建(或正在创建),并将重用相同的资产 测试计划: 创建N个线程 HTTP请求-发布到某个URL 正则表达式提取器-提取响应的一部分(POST请求生成的assetId) 验证每个线程都从响应中提取了相同的字符串 我的问题: 我不知道该怎么做的是最后一步——验证从每个线程提取的值是否相同。如何在JMeter中实现这一点?我想您可以使用响应断言 测试计划:

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

测试计划:
  • 创建N个线程
    • HTTP请求-发布到某个URL
    • 正则表达式提取器-提取响应的一部分(POST请求生成的assetId)
  • 验证每个线程都从响应中提取了相同的字符串
我的问题:
我不知道该怎么做的是最后一步——验证从每个线程提取的值是否相同。如何在JMeter中实现这一点?

我想您可以使用响应断言

  • 测试计划:
    • 创建N个线程
    • HTTP请求-发布到某个URL
  • 使用响应断言验证每个请求在响应中是否具有相同的字符串

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

我想您可以使用响应断言

  • 测试计划:
    • 创建N个线程
    • HTTP请求-发布到某个URL
  • 使用响应断言验证每个请求在响应中是否具有相同的字符串

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

要实现您的要求,我们需要在所有线程之间共享该值

属性:

我们可以使用属性共享一个值。假设创建了一个道具“共享”,默认值为空“”。在
beanshell断言中添加以下代码
。如果为空,则线程将添加从正则表达式中提取的值。所有其他线程将只比较该值,如果该值不匹配,它将失败

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

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

1.setup threadgroup将包含这样的beanshell代码以创建哈希集

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将检查哈希集的大小。如果大小大于1,则失败

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

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

属性:

我们可以使用属性共享一个值。假设创建了一个道具“共享”,默认值为空“”。在
beanshell断言中添加以下代码
。如果为空,则线程将添加从正则表达式中提取的值。所有其他线程将只比较该值,如果该值不匹配,它将失败

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

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

1.setup threadgroup将包含这样的beanshell代码以创建哈希集

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将检查哈希集的大小。如果大小大于1,则失败

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

这看起来是我需要的。因此,如果我选择contains并对文本响应使用regexp(类似于
tmp/path/([\-\w\d]+)\.id
),如果至少有两个用户匹配不同的值,那么该线程组的断言是否会失败?您将拥有所有响应与预期不同的请求-失败。这看起来是我需要的。因此,如果我选择contains并对文本响应使用regexp(类似于
tmp/path/([\-\w\d]+)\.id
),如果至少有两个用户匹配不同的值,那么该线程组的断言是否会失败?您将拥有所有响应与预期不同的请求-失败。