Сохраняйте файлы запросов / ответов в локальном каталоге с помощью Groovy testtep в soapUI - PullRequest
6 голосов
/ 14 июня 2011

Через отличный тестовый шаг в soapUI я хочу, чтобы все файлы запросов и ответов сохранялись в локальном каталоге с системной датой.

Простой тестовый шаг в soapUI:

def name = context.expand( '${Input#TG}' )

def locatie = context.expand( '${#TestCase#locatie}' )

def createFolder() {
  date = new Date()
  dateFormat = new java.text.SimpleDateFormat('ddMMyyyy')
  shortDate = dateFormat.format(date)
  outputFolder = locatie+shortDate
  createFolder = new File(outputFolder)
  createFolder.mkdir()  
}

def getResponseFilename(name) {
  respFilename = createFolder()+"_"+name+"_response.xml"
}

def getRequestFilename(locatie,name) {
  reqFilename = createFolder()+"_"+ name+"_request.xml"
}

def file = new PrintWriter (getResponseFilename(name))

def response = testRunner.testCase.testSteps
["CheckAdres"].testRequest.response.contentAsString

file.println(response)
file.flush()
file.close()

def file2 = new PrintWriter (getRequestFilename(name))
def request = context.expand('${CheckAdres#Request}')

file2.println(request)
file2.flush()
file2.close()

Я получаюследующая ошибка:

Tue Jun 14 12:47:24 CEST 2011:**ERROR:groovy.lang.MissingPropertyException: No such property: locatie for class: Script78**
groovy.lang.MissingPropertyException: No such property: locatie for class: Script78
  at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:49)
  at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:241)
  at Script78.createFolder(Script78.groovy:8)
  at Script78$createFolder.callCurrent(Unknown Source)
  at Script78.getResponseFilename(Script78.groovy:14)
  at Script78$getResponseFilename.callCurrent(Unknown Source)
  at Script78.run(Script78.groovy:21)
  at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93)
  at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:51)
  at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:148)
  at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)

Ответы [ 5 ]

10 голосов
/ 16 июня 2011

Есть несколько способов сделать это. Можно создать шаг теста Groovy с помощью следующего сценария:

def myOutFile = "C:/Temp/MyOutDir/response.xml"
def response = context.expand( '${MyTestRequest#Response}' )
def f = new File(myOutFile)
f.write(response, "UTF-8")
2 голосов
/ 03 мая 2018

Существует более короткий синтаксис. Логика похожа на то, что @robert Shared

def response=context.expand('${TestRequest#RawRequest}')
new File("c:/testpath/input.xml").write(response)

, если вы хотите уменьшить его до одной строки

 new File("c:/testpath/input.xml").write(context.expand('${TestRequest#RawRequest}')

Вы можете заменить RawRequest на то, что хотите сохранить

Запрос или ответ

RawRequest используется, когда вы хотите, чтобы данные заменяли переменные, используемые в запросе

2 голосов
/ 16 июня 2011

Попробуйте использовать SoapUI инструменты, чтобы выбрать значение того, что вы хотите. Щелкните правой кнопкой мыши область редактирования groovy, выберите Get Data -> ваш набор тестов -> ваш тестовый набор -> ваш шаг теста -> response. Это даст вам полный ответ. Вы также можете погрузиться глубже в response с помощью этого метода.

1 голос
/ 08 февраля 2013

Проверьте ответ McDonald. Лучший способ сохранить и снять запрос.

http://www.loadui.org/forum/viewtopic.php?f=5&t=16354#p38935

0 голосов
/ 24 апреля 2014

Более полезно, если нам нужно сохранить ошибку в ответе:

import com.eviware.soapui.support.XmlHolder
import java.text.MessageFormat
import org.apache.commons.lang.ObjectUtils

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def retrieve = groovyUtils.getXmlHolder("MyTestRequest#Response" )

if (!ObjectUtils.equals(retrieve.getNodeValue("//*:xpath"), "string")){
 def currentTime = System.currentTimeMillis()
 def fullFilePath = context.expand('${projectDir}') + File.separator + "Fail-"+currentTime+".xml"
 def reportFile = new File(fullFilePath)
 if (!reportFile.exists())
 {
  reportFile.createNewFile()    
  reportFile.append((Object)retrieve.getPrettyXml(), 'UTF-8')
 }
}
...