lo que he hecho
estoy usando soapUI (3.6.1 Versión gratuita) Servicios de simulacros para servir a los datos específicos de aplicaciones cliente 2 Soy la prueba . Con algunas secuencias de comandos simples de Groovy, he configurado algunas operaciones simuladas para obtener respuestas de archivos específicos en función de las solicitudes realizadas por las aplicaciones del cliente.¿Cómo puedo usar rutas relativas a los archivos de respuesta externos para soapUI MockService
Los contenidos estáticos de la respuesta simulada es:
${responsefile}
El maravilloso en el panel de despacho scripting operación es:
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryB.xml").text
}
En este ejemplo, cuando la aplicación cliente emite una solicitud a la simulacro de servicio que contiene la cadena CategoryA, la respuesta devuelta por soapUI es el contenido del archivo ID_List_CategoryA.xml
Lo que estoy tratando de lograr e
Todo esto funciona bien con los caminos absolutos en el groovy. Ahora quiero extraer toda la colección del archivo de proyecto soapUI y los archivos externos en un paquete para una fácil implementación. De mi lectura sobre soapUI yo esperaba que esto sería tan fácil como configurar el valor de la raíz de Recursos proyecto para $ {} projectdir y cambiar mis caminos a:
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("Test_Files/ID_List_CategoryB.xml").text
}
... teniendo en cuenta que los que reside el archivo XML de proyectos soapUI en C:/soapProject/
Lo que he probado hasta ahora
por lo tanto, eso no funciona. He intentado variaciones de rutas relativas:
- ./Test_Files/ID_List_CategoryA.xml
- /Test_Files/ID_List_CategoryA.xml
- Test_files/ID_List_CategoryA.xml
Un puesto indicó que soapUI podría considerar el directorio primario de los archivos del proyecto como la raíz para los propósitos de la ruta relativa, así que probé las siguientes variaciones también:
- ./soapProject/Test_Files/ID_List_CategoryA.xml
- /soapProject/Test_Files/ID_List_CategoryA.xml
- soapProject/Test_files/ID_List_CategoryA.xml
Cuando nada de eso funcionó He intentado hacer uso de la $ {projectDir} propiedad en la secuencia de comandos groovy, pero todos los intentos fallaron con un error "No such property: mockService for class: Script [n]". Admittefly, realmente estaba buscando algo al intentar hacer eso.
He intentado utilizar la información de este post y otros: How do I make soapUI attachment paths relative?
... sin ninguna suerte. Reemplazar "prueba" con "simulación" (entre otros cambios) en el código de la solución de esa publicación resultó en más errores de propiedad, p.
testFile = new File(mockRunner.project.getPath())
.. llevado a ...
No such property: mockRunner for class: Script3
Lo que yo creo que necesite
Los mensajes que he encontrado en relación con este tema se centran en soapUI bancos de pruebas. Realmente necesito una solución que esté centrada en MockService o al menos arroje algo de luz sobre cómo se puede manejar de forma diferente para MockServices en lugar de TestSuites.
Cualquier ayuda es muy apreciada. Gracias. Marca.
La Solución - Proporcionado por GargantuChet
Lo que sigue incluye los cambios sugeridos por GargantuChet para resolver el problema de tratar de acceder al $ {projectdir} propiedad y permitir el uso de rutas relativas mediante la definición de un nuevo objeto projectdir dentro el alcance del guión maravilloso:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectDir = groovyUtils.projectPath
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryB.xml").text
}
Tratando su ejemplo codificado para patadas resultó en el siguiente error: 'No se pudo enviar utilizando script; groovy.lang.MissingMethodException: sin firma del método: Script27.var() es aplicable para tipos de argumentos: (java.lang.String) values: [C:/soapProject] Posibles soluciones: wait(), run(), run(), every(), any(), wait (long) ' – Mark
_Sorry about Reposts. No me di cuenta de que el formateo en las respuestas de comentarios sería tan problemático. Como soapUI no tiene visor de consola, cambié la primera sugerencia para registrar el valor predeterminado de DefaultBathBase: 'log.info" Dir actual: "+ defaultPathBase. As usted sospechaba, registró el directorio de la aplicación soapUI. Luego traté de ver si podía registrar el valor de la propiedad $ {projectDir}: 'log.info" Dir del proyecto: "+ projectDir' Obtuve el siguiente error:' No se pudo enviar usando script; groovy.lang.MissingPropertyException: No existe dicha propiedad: projectDir for class: Script26' – Mark
'projectDir' puede no estar definido en el script/scope actual. Aparentemente, puede hacer referencia usando ['def groovyUtils = new com.eviware.soapui.support.GroovyUtils (context); def projectDir = groovyUtils.projectPath; log.info (projectDir) '] [1], que probablemente sea el método aprobado por Groovy. Voy a tomar una copia de Groovy y averiguar qué pasa con el ejemplo codificado. [1] http://www.webservices-testing.com/2011/10/project-path-using-groovy-in-soapui.html – GargantuChet