2011-06-14 14 views
5

A través de un maravilloso testtep en soapUI quiero que todos los archivos de solicitud y respuesta se almacenen en un directorio local con fecha del sistema.Almacenar archivos de solicitud/respuesta en el directorio local con Groovy testtep en soapUI

El teststep maravilloso en 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() 

me sale el siguiente error:

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) 

Respuesta

9

Existen varias formas de hacerlo. Uno crearía un paso de prueba Groovy con el siguiente script:

def myOutFile = "C:/Temp/MyOutDir/response.xml" 
def response = context.expand('${MyTestRequest#Response}') 
def f = new File(myOutFile) 
f.write(response, "UTF-8") 
+0

gracias por ayudarme y por la útil explicación que me das. – makhlo

+0

De nada :-) –

1

intenta utilizar SoapUI 's herramientas para seleccionar el valor de lo que quiera. Haga clic derecho en el área de edición groovy, elija Get Data -> su conjunto de pruebas -> su caso de prueba -> su paso de prueba ->response. Esto te dará la respuesta completa. También puede profundizar en el response con este método.

+0

gracias por ayudar a la explicación y útil que das. – makhlo

+0

Devuelve la respuesta si te ayudó :) – RonK

0

más útil si debemos guardar un error en Respuesta:

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') 
} 
} 
Cuestiones relacionadas