在bash脚本中使用jmeter
,如果任何断言失败,如何管理它返回非零值?
jmeter -n -t someFile.jmx
echo $?
# always returns 0, even if an assertion failed
我使用脚本尝试Bean Shell Assertion
:
if (ResponseCode.equals("200") == false) {
System.exit(-1);
}
但是这甚至没有返回0
,它只会杀死进程(我猜?)
愿任何人帮我这个吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您只关心发现错误时jmeter返回退出代码,则可以随后在.log中检查有错误的行:
test $(grep -c ERROR jmeter.log) -eq 0
如果调用echo $?
,则可以发现错误返回1,否则返回0。
答案 2 :(得分:0)
我无法重现您的问题,您确定您的主张确实有效吗?该代码或多或少都可以,但是放置位置也很重要。
#./jmeter -n -t test.jmx
Creating summariser <summary>
Created the tree successfully using test.jmx
Starting the test @ Thu Jun 21 07:34:49 CEST 2018 (1529559289011)
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
#echo $?
255
答案 3 :(得分:0)
我在taken from here内将JMeter 4.0版使用以下方法(JSR223 Assertion
),并将脚本语言设置为groovy
。
但是请注意where you use System.exit code。
首先使用JSR223 Assertion
,我们在所有采样器中收集失败的测试,并将其放入用户定义的变量中:
String expectedCode = "200";
if(!expectedCode.equals(prev.getResponseCode())){
String currentValue = vars.get("failedTests");
currentValue = currentValue + "Expected <response code> [" + expectedCode + "] but we got instead [" + prev.getResponseCode() + "] in sampler: '" + sampler.name + "'\n"
vars.put("failedTests",currentValue);
}
然后在测试结束时基于该变量,我们检查它是否包含任何值。在这种情况下,我们会使整个套件失败并相应地记录日志:
String testResults = vars.get("failedTests");
if(testResults.length() > 0 )
{
println testResults;
log.info(testResults);
println "Exit the system now with: System.exit(1)";
System.exit(1);
} else {
println "All test passed!";
log.info("All test passed!");
}