如何将soapUI groovy脚本日志写入文本文件

Err*_*ter 2 testing groovy automation soapui

我必须将Groovy脚本登录写入文本文件,我能够使用编写任何Soap步骤的请求和响应context.expand.

写我正在使用的测试请求和响应:

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

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

在此输入图像描述

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

alb*_*iff 5

配置方式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>   
Run Code Online (Sandbox Code Playgroud)

一种可能的方法是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>   
Run Code Online (Sandbox Code Playgroud)

使用Groovy进行Dinamically

但是,您似乎希望使用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'
Run Code Online (Sandbox Code Playgroud)

注意:如果不使用绝对路径,FileAppender则相对于*SOAPUI_HOME\bin*保存日志文件

配置此项时,Groovy testSteps中的其余日志将附加到此文件.如果您只想获取特定Groovy testStep的日志,那么您只需删除脚本末尾的appender:

groovyLogger.removeAppender(fileAppender);
Run Code Online (Sandbox Code Playgroud)

更新:

从你评论:我想存储每次运行的输出,如果我再次执行它,它应该重写该文件.

因此,您希望为每次运行存储输出...但是如果再次执行,则要覆盖该文件?这是矛盾的不是吗?

如果要覆盖文件而不是附加可以使用的内容setAppend(false):

fileAppender.setAppend(false)
fileAppender.activateOptions()
groovyLogger.addAppender(fileAppender)
Run Code Online (Sandbox Code Playgroud)