在 JMeter 中比较跨线程提取的变量
Compare extracted variable across threads in JMeter
我的目标是从我的线程组中的每个线程 POST 到一些 URL,这将在某处创建一个资产。如果一切顺利,第一个请求将创建资产,随后的请求将看到资产已经创建(或正在创建),并将重复使用相同的资产。
测试计划:
- 创建N个线程
- HTTP 请求 - POST 一些 URL
- 正则表达式提取器 - 提取部分响应(POST 请求生成的 assetId)
- 确认每个线程都从响应中提取了相同的字符串
我的问题:
我不知道如何做的是最后一步 - 验证从每个线程提取的值是否相同。如何在 JMeter 中完成此操作?
我想你可以使用响应断言。
- 测试计划:
- 创建 N 个线程
- HTTP 请求 - POST 一些 URL
- 使用 Response Assertion 验证每个请求在响应中是否具有相同的字符串
当您将此断言置于测试计划级别时,它适用于所有线程。
为了达到您的要求,我们需要在所有线程之间共享该值。
属性:
我们可以使用属性来共享一个值。假设创建了一个道具 'shared',默认值为空白“”。在 beanshell assertion
中添加以下代码。如果它是空白的,那么一个线程将添加从正则表达式中提取的值。所有其他线程只会比较该值,如果不匹配,它将失败。
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 代码来创建哈希集。
import java.util.*;
if (bsh.shared.hashSet == void){
bsh.shared.hashSet=new HashSet();
}
bsh.shared.hashSet.clear();
2.The 常规线程组将包含用于提取值的代码。提取值后,将其添加到仅存储唯一值的哈希集中。任何重复值都将被忽略。
bsh.shared.hashSet.add("value extracted");
3.teardown threadgroup will group 将检查 hashset 的大小。如果大小大于 1,则失败。
log.info(String.valueOf(bsh.shared.hashSet.size()));
我的目标是从我的线程组中的每个线程 POST 到一些 URL,这将在某处创建一个资产。如果一切顺利,第一个请求将创建资产,随后的请求将看到资产已经创建(或正在创建),并将重复使用相同的资产。
测试计划:
- 创建N个线程
- HTTP 请求 - POST 一些 URL
- 正则表达式提取器 - 提取部分响应(POST 请求生成的 assetId)
- 确认每个线程都从响应中提取了相同的字符串
我的问题:
我不知道如何做的是最后一步 - 验证从每个线程提取的值是否相同。如何在 JMeter 中完成此操作?
我想你可以使用响应断言。
- 测试计划:
- 创建 N 个线程
- HTTP 请求 - POST 一些 URL
- 使用 Response Assertion 验证每个请求在响应中是否具有相同的字符串
当您将此断言置于测试计划级别时,它适用于所有线程。
为了达到您的要求,我们需要在所有线程之间共享该值。
属性:
我们可以使用属性来共享一个值。假设创建了一个道具 'shared',默认值为空白“”。在 beanshell assertion
中添加以下代码。如果它是空白的,那么一个线程将添加从正则表达式中提取的值。所有其他线程只会比较该值,如果不匹配,它将失败。
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 代码来创建哈希集。
import java.util.*;
if (bsh.shared.hashSet == void){
bsh.shared.hashSet=new HashSet();
}
bsh.shared.hashSet.clear();
2.The 常规线程组将包含用于提取值的代码。提取值后,将其添加到仅存储唯一值的哈希集中。任何重复值都将被忽略。
bsh.shared.hashSet.add("value extracted");
3.teardown threadgroup will group 将检查 hashset 的大小。如果大小大于 1,则失败。
log.info(String.valueOf(bsh.shared.hashSet.size()));