如何将 soapUI groovy 脚本登录到文本文件中

How to write soapUI groovy script log into text file

我必须编写 Groovy 脚本登录到文本文件,我能够使用 context.expand.

编写任何 Soap 步骤的请求和响应

要编写测试请求和响应,我正在使用:

def request =  context.expand('${SoapRequest#Request}')
new File ("D:/RequestFile.txt").write(request)

我想要的是将日志输出保存在一个文件中:

建议我在文本文件中编写 Groovy 脚本日志的方法。

配置方式log4j.xml

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

然而,您似乎想使用 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 的日志,那么您只需删除脚本末尾的附加程序即可:

groovyLogger.removeAppender(fileAppender);

更新:

来自您的评论:我想为每个 运行 存储输出,如果我再次执行它,它应该重写文件。

所以您想存储每个 运行... 的输出,但是如果您再次执行,您想覆盖该文件?这矛盾是吧?

如果您想覆盖文件而不是追加内容,您可以使用 setAppend(false):

fileAppender.setAppend(false)
fileAppender.activateOptions()
groovyLogger.addAppender(fileAppender)