如何在Groovy中使用异常获取错误的行号(soapui / readyapi)

Gau*_*ana 2 error-handling groovy exception-handling exception soapui

  //Code 1 
  log.info undefined
Run Code Online (Sandbox Code Playgroud)

当我们运行代码1时,在soapui / readyapi中得到以下错误,如下所示:

在此处输入图片说明

请注意:-行号在错误消息中可见

但是,为了避免出现此警报,我们使用了try / catch来打印此消息,因此将上面的代码修改为下面的代码2

//code 2
try
{
log.info undefined
}
catch(Exception e)
{
log.info e  
}
Run Code Online (Sandbox Code Playgroud)

当我们运行代码2时,我们得到以下结果

Mon Mar 19 15:04:16 IST 2018:INFO:groovy.lang.MissingPropertyException: No such property: undefined for class: Script6
Run Code Online (Sandbox Code Playgroud)

问题:-我们怎样才能看到问题所在的行号,就像我们可以在code1中看到的那样

要求:-我们的异常块应该能够分辨出问题在哪一行。

由于它是一个很小的代码,我们能够知道,所以有时代码有100多行,并且很难知道异常在哪里

小智 6

建立在@tim_yates使用答案e.stackTrace.head().linenumber

import org.codehaus.groovy.runtime.StackTraceUtils 

try {
    println undefined
} catch (Exception e) {
    StackTraceUtils.sanitize(e)
    e.stackTrace.head().lineNumber
}
Run Code Online (Sandbox Code Playgroud)

sanitize()在Exception上使用,以从Exception的堆栈跟踪中删除所有奇怪的Groovy内部内容。否则,当您查看第一个StackTraceElement时,它可能不是您想要的。

deepSanitize() 是相同的,但是还将转换应用于所有嵌套的异常(如果有)。