我必须将Groovy脚本登录写入文本文件,我能够使用context.expand
编写任何Soap步骤的请求和响应。
编写我正在使用的测试请求和响应:
def request = context.expand('${SoapRequest#Request}')
new File ("D:/RequestFile.txt").write(request)
我想要的是将日志输出保存在文件中:
建议我在文本文件中编写Groovy脚本日志的方法。
答案 0 :(得分:5)
在SOAPUI log4j配置文件中已经配置了 Groovy 日志文件。
在 SOAPUI_HOME \ bin \ soapui-log4j.xml 中:
<appender name="GLOBAL_GROOVY_LOG" class="org.apache.log4j.FileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="File" value="${soapui.logroot}global-groovy.log"/>
<param name="Threshold" value="DEBUG"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<logger name="groovy.log">
<level value="INFO" />
<appender-ref ref="GLOBAL_GROOVY_LOG" />
</logger>
一种可能的方法是在此配置文件中添加另一个自定义FileAppender
。如果更改此文件,请记住重新启动SOAPUI,以便它可以加载更改。
这样的事情可以解决问题:
<appender name="GLOBAL_GROOVY_LOG" class="org.apache.log4j.FileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="File" value="${soapui.logroot}global-groovy.log"/>
<param name="Threshold" value="DEBUG"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<appender name="MYLOG_CUSTOM" class="org.apache.log4j.FileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="File" value="/absoultePath/yourlogFile.txt"/>
<param name="Threshold" value="DEBUG"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<logger name="groovy.log">
<level value="INFO" />
<appender-ref ref="GLOBAL_GROOVY_LOG" />
<appender-ref ref="MYLOG_CUSTOM" />
</logger>
但是,您似乎希望使用 Groovy 脚本动态执行此操作,因此您可以使用以下代码获取<logger name="groovy.log">
并向其添加FileAppender
;为了您可以将日志保存在自定义文件中:
import org.apache.log4j.Logger
import org.apache.log4j.PatternLayout
import org.apache.log4j.RollingFileAppender
// get the groovy logger by name
def groovyLogger = Logger.getLogger('groovy.log')
// pattern Layout
PatternLayout layout = new PatternLayout("%d{ISO8601} [%t] %-5p %c %x - %m%n")
// create a file appender
RollingFileAppender fileAppender = new RollingFileAppender(layout, "/absolutePath/myLog.txt")
groovyLogger.addAppender(fileAppender)
log.info 'someText to the logger'
注意:如果您不在FileAppender
中使用绝对路径,则相对于* SOAPUI_HOME \ bin *
配置此项时,Groovy testSteps中的其余日志将附加到此文件中。如果您只想获取特定Groovy testStep的日志,那么您只需删除脚本末尾的appender:
groovyLogger.removeAppender(fileAppender);
<强>更新强>:
你评论:我想为每次运行存储输出,如果我再次执行它,它应该重写文件。
因此,您希望为每次运行存储输出...但是如果再次执行,则要覆盖该文件?这是矛盾的不是吗?
如果您要覆盖文件而不是附加内容,可以使用setAppend(false)
:
fileAppender.setAppend(false)
fileAppender.activateOptions()
groovyLogger.addAppender(fileAppender)