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