Me solicitan enviar 1000 peticiones de forma masiva a un servicio web de tipo SOAP, para lo cual puedo valerme de la funcionalidad de pruebas de SOAP UI.
Para esto vamos simular la llamada a un servicio que tiene la siguiente estructura:
Par lo cual vamos a crear un archivo XML por cada una de las peticiones que voy a realizar y almacenarlas en una carpeta, en este caso “requests”
Cada uno de los archivos tendrá el fragmento de la petición que variará de llamada en llamada.
Una vez que tengo armados los archivos, procedo a estructurar la prueba dentro de SOAP UI, para esto crearemos 3 pasos
Paso 1
Script lee los archivos en el directorio “request” y inicializa un arreglo con los mismos
def fileList = []
new File("/path/requests/").eachFile { f ->
if (f.isFile() && f.name.endsWith('.xml')) {
def filename = f.name[0..-1]
fileList.add(filename)
log.info filename
}
}
if (fileList.size() < 1) {
testRunner.fail("No request files")
}
context.put('fileList', fileList)
Paso 2
El paso 2 es una llamada SOAP, con una modificación para que tome el nombre del archivo del arreglo creado en el paso 1
${=new File("/path/requests/" + (context.get('fileList')).first()).text}
Paso 3
Aquí iteramos sobre cada ejecución y almacenamos tanto la llamada, como la respuesta en el directorio “responses”
def fileList = context.get('fileList') def fileName = fileList.first() def newName = fileName[0..-5] def response = context.expand( '${Step2#Response}' ) def f = new File("/path/responses/${newName}_Response.xml") f.write(response, "UTF-8") def query = context.expand( '${Step2#Request}' ) def q = new File("/path/responses/${newName}_Query.xml") q.write(query, "UTF-8") fileList.pop() if(fileList.size() >0) { testRunner.gotoStepByName("Step2") }
Por ultimo ejecutamos el caso de prueba