11 October 2009

Dynamic SOAP-WS LoadTest with SOAPUI & Groovy

La idea de este post es mostrar como realizar test de carga con datos dinámicos sobre Web Services SOAP, utilizando SoapUI y Groovy. Para este ejemplo se ha utilizado la aplicación de ejemplo "calculator" que trae consigo Netbeans.

Diagrama EPC - Líneas de proceso gestionadas por eventos

En la imagen superior se puede observar todo el proceso (vista global) a seguir ... pero previamente:
  1. Se ha de crear un proyecto en SOAPUI
  2. Se ga de registrar el WSDL del WS Calculator dentro del proyecto
  3. Se ha de crear una juego de pruebas(TestSuite) para el WSDL antes registrado
  4. Dentro del método add se ha de crear la siguiente estructura de pasos:
    1. Un elemento propiedades
    2. 3 scripts de groovy
    3. 1 request al método del ws (se crea por defecto)

Bien ahora solo nos queda modificar la request creada por defecto a fin de que pueda utilizar distintos datos en cada llamada y poner cuerpo a los scripts de Groovy.

Modificación de la request (petición SOAP)





Cargar datos iniciales
log.info( "SCRIPT CargaDatosIniciales" )
/////////////////////////////////////////////

def propiedades = testRunner.testCase.getTestStepByName( "Propiedades" );
def propIndex = propiedades.getProperty( "index" )
def propValores = propiedades.getProperty( "values" )

//se guarda como una cadena de texto, con los valores separados por un espacio en blanco
//se hace para luego poder hacer un split de la propiedad
def list = ""
for( i in 1..7 ){
list +=  i + " "
}
log.info( "Numero de elementos a consultar " + list.size() + "." )
log.info( list  )

propIndex.value = 0
propValores.value = list


Actualizar registro actual
log.info( "SCRIPT ActualizarRegistroActual" )
/////////////////////////////////////////////

def propiedades = testRunner.testCase.getTestStepByName( "Propiedades" );
def propIndex = propiedades.getProperty( "index" )
def propValores = propiedades.getProperty( "values" )
def propActual = propiedades.getProperty( "valorActual" )

def values = propValores.value.split()
def index = Integer.parseInt(propIndex.value)

log.info("valores : " + values)
log.info("Indice : " + index)
log.info("Valor : " + values[index] )

propActual.value = values[index];


Mover registro y comprobar
log.info( "SCRIPT MoverRegistroYcomprobar" )
/////////////////////////////////////////////

def propiedades = testRunner.testCase.getTestStepByName( "Propiedades" );
def propIndex = propiedades.getProperty( "index" )
def propValores = propiedades.getProperty( "values" )

def index = Integer.parseInt(propIndex.value) + 1
propIndex.value = index;

if(index < propValores.value.split().size()){
testRunner.gotoStepByName( "ActualizarRegistroActual" ) 
}

Finalmente nos queda probar en conjunto todo aquello que se ha creado.





- FIN -

4 comments:

Yony Castaño Duque said...

Buen día.

Mirando el post me gusta mucho el tema y creeria que es poca la referencia en español.

Hay algo que no entiendo del post y es el uso del "properties", no queda clara la idea del porque se usa.

Muchas gracias :)

Emmerson Miranda said...

El "properties" es el repositorio de las variables que se utilizan en la llamada SOAP, y se actualizan desde los scripts de groovy

Yony Castaño Duque said...

Buen día.

Gracias por responder.

ya con el concepto claro de las properties quedo con una duda.

Estoy usando el script para "extraer" mi cantidad de elementos que enviare en el request pero en mi caso siempre me devuelve 7 tal como esta validado en el script , el dilema no es aumentar sino que mis elementos del request son 4.

En el request a cada variable le agrego "${Properties#CC}", pero no se que mas hacer.

Espero me guie en mi intento de usar groovy :)

saludos

Emmerson Miranda said...

Bueno en realidad me parece que has de cambiar el bucle.
De:
for( i in 1..7 )

A:
for( i in 1..4 )