Estoy tratando de utilizar dos gatling alimentadores para la producción de solicitud http post data :

Primer archivo contiene algunos campos. Uno de ellos es un contador. Con este valor me gustaría añadir a mi cuerpo post tan lejos como las líneas de segundo alimentador.

Por ejemplo :

fileA.csv
---------
fileAId,counter
value,3

fileB.csv
---------
fileBId
stack
overflow

Quiero para la construcción de esta cadena : «el valor de desbordamiento de pila pila».

He creado un escenario :

object Actions {
    val search = forever() {
        group("Test") {
            exec(feed(FeederUtils.fileAFeeder))
            .exec(  
                http("Test")                                            
                    .post(uri)                          
                    .body(StringBody("""${fileAId} """ +     FeederUtils.generateItems(${counter}.toInt)))
                )
                .pause(20 seconds)
            }
        }
}   

Y un objeto FeederUtils :

object FeederUtils {
    val fileAFeeder= csv("fileA.csv").circular

    var fileBFeeder = csv("fileB.csv").circular

    def generateItems(itemsNumber: Int) : String = {
        var i = 0;
        var returnedString = "";
        for(i <- 0 to itemsNumber) {
            exec(feed(fileBFeeder))
            returnedString = returnedString + """${fileBId} """
        }

        return returnedString ;
    }
}

Tengo dos problemas : llamada a la función no se compile (no encontrado: valor $) y el alimentador de variables no existe en generateItems.

Soy nuevo en el Gatling & Scala así que creo que esto es evidente, pero no entiendo cómo exec y alimentar a las funciones de trabajo.

Gracias !

EDICIÓN : Funcionales código es el siguiente :

object FeederUtils {
    val fileAFeeder= csv("fileA.csv").circular

    var fileBVector = csv("fileB.csv").records

    var fileBIterator = 0;

    def generateItems(itemsNumber: Int) : String = {
        var i = 0;
        var returnedString = "";
        for(i <- 0 to itemsNumber) {
            var currentItem = fileBVector(fileBIterator)

            //Circular read
            if (fileBIterator < fileBVector.size) { 
              fileBIterator+=1
            } else {
              fileBIterator=0
            }

            returnedString = returnedString + currentItem("fileBId")
        }

        return returnedString ;
   }
}

object Actions {
    val search = forever() {
        group("Test") {
            exec(feed(FeederUtils.fileAFeeder))
            .exec({session => session.set("generatedString",feederUtils.generateItems(session("counter").as[String].toInt))})
            .exec(  
                http("Test")                                            
                    .post(uri)                          
                    .body(StringBody("""${fileAId} ${generatedString}"""))
                )
                .pause(20 seconds)
            }
        }
} 

El concepto siguiente : función de alimentación de los almacenes de datos en los atributos de sesiones, que puede ser leida desde gatling expresiones EL o manualmente con la Sesión de la API. Tuve que combinar ambos.

Enlaces :

Sesión de la API

Expresiones EL

Sesión de manipulación con exec

InformationsquelleAutor N LAMY | 2014-12-09

1 Comentario

  1. 1

    No se puede utilizar un alimentador para su segundo archivo. En el mejor, se puede tirar de varios registros a la vez, pero los nombres serán traducidos (fileBId1, fileBId2…).

    Cargar el segundo archivo de contenido con Gatling csv analizador, por lo que será capaz de acceder a los registros (registros de campo) y guárdelo en un mundial val.

    De la alimentación desde el primer archivo.

    A continuación, escribir un exec(función) donde:

    • recuperar el contador de la sesión
    • generar un desplazamiento aleatorio (ThreadLocalRandom) si quieres algo como la estrategia al azar, o una AtomicInteger que se incrementaría si quieres algo como la circular de la estrategia.
    • recuperar registros de la segunda archivo (el uso de un modulo en los registros vector de tamaño adecuados índices)
    • calcular el final de la Cadena de

    No intente utilizar Gatling en EL código personalizado. Ver doc.

    • Thks mucho por su respuesta 🙂 he añadido funcionales código en el post original (realmente no entiendo por qué no está permitido agregar respuestas : siempre la edición original post añade mucho ruido y mi mente no ayuda hilo de la lectura. Además quería añadir ejemplos de código que parece ser demasiado largo para los comentarios). Si estoy en lo correcto, puedo usar dos alimentadores, pero solo si el archivo nombres de las columnas son diferentes ? Es no sólo un ámbito específico para el uso de ellos ?
    • Los encabezados de columna definir los nombres de los atributos, por lo que si usted alimenta de múltiples alimentadores con los mismos nombres, acabará reemplazando los valores anteriores.

Dejar respuesta

Please enter your comment!
Please enter your name here