我正在创建一个jmeter脚本,该脚本从先前捕获的名为MultitrackeId的变量中选取一个值,该变量可以包含“n”个值。
MultitrackerId variables
例如,在屏幕截图中,有5个值需要反复发送,直到响应主体中出现“SUCCESSFUL”为止,我使用单个线程、计数器和WHILE控制器按如下顺序进行迭代:
counter
因此,计数器将${miltitrackedid_matchNr}作为最大值,并从1开始递增1。以下是请求中的实现方式:
implmentation
目前WHile控制器没有任何条件,所以它只用于迭代。此时,线程保持无限循环,发送如下请求:domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_1 domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_2 domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_3 domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_4 domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_5
然后又开始了domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_1 ... ... ... domain/${__V(MultitrackerId_${counter})} --> /multitrackerIdvalue_5
我需要按所示顺序循环所有multitrackerId值,直到找到“SUCCESSFULL”值,然后停止发送该特定请求,并等待其他multitrackerId请求在响应中包含该值,以最终停止线程并结束测试。
我已尝试找出哪种情况是指示的情况,我目前正在使用_${\__javaScript("${VarStatus}".indexOf("SUCCESSFUL") == -1)}
然而,考虑到在响应中第一次出现“SUCCESSFULL”之后,线程将停止,而不满足剩余MultitrackerId的条件,这不是一个合适的解决方案。
你有什么建议或可能的解决方法吗?
谢谢你!
1条答案
按热度按时间tp5buhyn1#
JMeter的内置测试元素不够灵活,无法实现您的标准,您需要使用JSR223 PostProcessor和一些Groovy脚本。
设置示例:
1.将While控制器的条件更改为以下__jexl3()函数:
1.将While控制器中的请求置于If Controller下,并使用以下条件:
1.将JSR223 PostProcessor添加为可能返回
SUCCESSFUL
的请求的子项,并在其中放置以下代码: