if-statement - JMeter IF条件检查
问题描述
在客户端脚本中,第一个用户在日历中为第二个用户创建事件,第二个用户接受/拒绝它们。
我想排除事件创建过程中可能出现的错误,并检查是否在第二个用户尝试使用基于事件请求模板构建的 xpath 接受它之前创建了事件请求,例如:
EventRequest_SubjectN
(N 是事件请求在一个周期内的迭代次数,因此如果事件请求 N 不是由第一个用户创建的,则事件 N 的第二个用户操作失败)。
在这些操作之间是两个用户的另一个操作,因此我不能使用 ${JMeterThread.last_sample_ok}。
是否有此功能的任何模拟,但对于几个步骤前的必要/特定操作,而不是最后一个示例?
在这种情况下,组织 IF 条件的最佳方法是什么?
我考虑在第一个用户事件请求 N 之后添加 BeanShell PostProcessor,代码如下:
var rc = prev.getResponseCode(); 如果(rc.equals(“200”)){
vars.put('EventRequest_Subject_${N}', 'EventRequest_Subject_${N}'); }
并为第二个用户的 IF 控制器中的 EventRequest_Subject_${N} 使用非空条件。
但它不能以这种方式工作。我哪里错了?
UPD。解决方案:
尝试了3种方法:
如果创建了 Event_RequestN - 放入变量特定值,然后在使用 Event_RequestN 进行第二次用户操作之前在 IF 条件下使用它;
在使用 Event_RequestN 的第二个用户操作之前添加具有特定断言的操作,并在 IF 条件下使用 ${JMeterThread.last_sample_ok};
在使用 Event_RequestN 的第二个用户操作之前添加使用 xpath 提取器的操作,并在 IF 条件下使用 ${_ isVarDefined(EventRequest_Subject ${N}_FOUND)};
并最终将第 3 个变体作为最佳实践。
解决方案
不要使用 Beanshell,因为 JMeter 3.1 你应该使用 JSR223 测试元素和 Groovy 语言编写脚本
不要将 JMeter 函数或变量内联到脚本中,而是使用基于代码的等效项
-
属性与变量不同。变量是线程本地的;属性对所有线程都是通用的
所以如果你想在 2 个线程(虚拟用户)之间共享一条数据,你需要使用
props
,而不是vars
使用线程间通信插件更容易实现您的场景
推荐阅读
- matlab - 有没有办法在matlab中计算分类时间?
- python - 定义这个函数绝对不会返回任何东西:
- c# - 我的 HTTP 触发 Azure 函数如何将请求的参数直接传递给 Run 方法?
- java - 我可以将自定义标准(来自数据库扩展)与 spring JPA 规范一起使用吗?
- c++ - 指针验证的最佳实践?
- oracle - BULK COLLECT 和 FORALL 带参数
- r - 在 ggplot2 中连接 coord_polar 图表上的点
- nlp - 在 Stanford Core NLP OpenIE 中无法使用 OLLIE 开放信息提取方法
- c++ - 将字符串放入字符串向量时遇到问题?
- php - 使用 REST API 获取 Paypal 的交易,只有收据号