如何在SoapUI/ReadyAPI中利用Groovy异常获取错误行号
嘿,这个问题我之前在SoapUI/ReadyAPI里写Groovy脚本的时候也碰到过!其实要在try-catch块里拿到错误行号,关键是要访问异常的栈轨迹信息——原来没加try-catch时,SoapUI的默认异常处理会自动打印完整栈信息,包含行号;但你直接输出e的时候,只是调用了异常的toString()方法,只返回了异常类型和消息,自然丢了行号。
下面给你两种实用的解决方案:
方法1:精准提取错误行号
你可以遍历异常的栈轨迹元素,过滤出SoapUI动态生成的脚本类(比如Script6这类以Script开头的类),然后从中提取行号:
try { log.info undefined } catch(Exception e) { // 遍历栈轨迹中的每一个元素 e.stackTrace.each { StackTraceElement element -> // 匹配SoapUI生成的脚本类(你的业务代码就在这里面) if (element.className.startsWith('Script')) { log.info "错误发生在第 ${element.lineNumber} 行" log.info "异常详情: ${e.message}" } } }
这里的StackTraceElement对象包含了错误发生的类名、方法名和lineNumber(就是你要的行号),通过过滤Script开头的类,就能精准定位到自己代码里的错误行,而不是框架内部的行号。
方法2:打印完整异常栈信息
如果想要和没加try-catch时一样的完整错误输出,可以把异常的栈轨迹转成字符串输出到日志里:
try { log.info undefined } catch(Exception e) { def stringWriter = new StringWriter() def printWriter = new PrintWriter(stringWriter) // 将栈轨迹写入字符串 e.printStackTrace(printWriter) log.info "完整错误信息:\n${stringWriter.toString()}" }
这样输出的内容就和原来报错时的格式一致了,包含行号、异常类型和完整的调用栈,方便你排查问题。
内容的提问来源于stack exchange,提问作者Gaurav Khurana
相关产品推荐
相关产品推荐

