我在Jmeter日志中面临一个问题,我一起运行10个测试,它们都具有相同的步骤但具有不同的参数。 当我检查Jmeter日志时,我看到了步骤中的异常,但是在哪个测试中没有提到,那么我怎么知道哪个场景正在解决这个问题呢?
2017-12-18 14:56:10,223 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, Short_tt_cid
javax.script.ScriptException: javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke method substring() on null object
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158) ~[groovy-all-2.4.12.jar:2.4.12]
at javax.script.AbstractScriptEngine.eval(Unknown Source) ~[?:1.8.0_141]
步骤short_tt_cid在所有测试中,当我用来打印ID时,它不会显示在日志中, 此外,问题就在于我一起进行几项测试,那么我怎么知道这是什么问题呢?如何让Jmeter告诉我日志中的更多信息,例如测试名称。我用{test_name}调用了这个步骤,它没有显示在日志中 问题是,如果我只运行一次测试,则所有测试都通过
答案 0 :(得分:1)
这不是关于JMeter,而是关于你的Groovy代码。原因是您尝试在未定义的(或null)变量上调用substring()
函数。
如果您需要更多信息 - 实现完全取决于您,可能的选择之一是将您的代码放在try block中:
try {
def myObj = null
myObj.substring()
}
catch (Exception ex) {
log.info('Problem in ' + ctx.getCurrentSampler().getName() + ' in ' + ctx.getThreadGroup().getName() + ' Thread Group')
throw ex
}
这样,您将在 jmeter.log 文件中至少包含相关的Thread Group和Sampler名称。在上面的示例中,ctx
代表JMeterContext类实例,请查看JavaDoc以获取所有可用的方法和字段,并查看Apache Groovy - Why and How You Should Use It以获取有关JMeter中的Groovy脚本的更多信息
答案 1 :(得分:1)
您甚至可以在测试计划级别添加变量,这将保存测试计划文件,并在需要时使用函数TestPlanName函数使用它:
${__TestPlanName}
TestPlanName函数返回当前测试计划的名称(可以在包含计划中使用,以了解调用测试计划的名称)。
用于组名ctx.getThreadGroup().getName()
,例如:
${__BeanShell(ctx.getThreadGroup().getName())}
将其添加到每个线程组的1 User Parameters
变量中,并在需要时使用该变量