2017-12-18 216 views
0

我在Jmeter日志中遇到了一个问题,我一起运行10个测试,它们都有相同的步骤,但具有不同的参数。 当我检查Jmeter日志时,我在步骤中看到异常,但未在哪个测试中提及,那么如何知道哪个场景正在执行此问题?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

测试名字,你的意思是测试计划名称? – user7294900

回答

1

您可以添加变量,即使在测试计划水平,这将节省测试计划文件使用功能TestPlanName功能使用它需要的时候:

${__TestPlanName} 

的TestPlanName函数返回当前测试计划的名称(可以包括计划用于了解调用测试计划的名称)。

组名称使用ctx.getThreadGroup().getName()例如:

${__BeanShell(ctx.getThreadGroup().getName())} 

将它添加到一个变量在1 User Parameters每个线程组,并使用该变量时,你需要

+0

我需要线程组名称,因为测试计划是一些测试(线程组) – Bastian

+0

用于组名使用'$ {__ BeanShell(ctx.getThreadGroup()。getName())}' – user7294900

+0

我应该在哪里使用它?如何使用它?你能否提供一步一步的解决方案? ,我把它放在每一次测试中,并且在每一步都意味着10K次?你有什么样的做法吗? – Bastian

1

这不是关于JMeter,而是关于您的Groovy代码。原因是您试图在未定义(或空值)变量上调用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 
} 

Groovy exception handling

这样,您将有至少在Thread GroupSampler的名字jmeter.log文件中。在上面的例子ctx代表JMeterContext类的实例,看看Java文档的详细信息,Groovy脚本在JMeter的

所有可用的方法和字段 Apache Groovy - Why and How You Should Use It
+0

Dimitri问题是如果你有30个测试,并且他们都使用“我的采样器”步骤,你怎么知道他们哪个失败了。根据你的图片有一个线程组,如果你有30个线程组你怎么知道哪个线程组在哪个步骤失败 – Bastian

+0

TNX Dmitri它解决了它 – Bastian