2017-01-05 2 views
0

Ich habe ein Problem, wo es aussieht, als ob Daten aus einem Feeder nicht zur Sitzung hinzugefügt werden. Ich teste ein System, bei dem ein Benutzer eine Rolle hat (d. H. Benutzer oder Administrator), und ich muss abhängig von der Rolle verschiedene Tests durchführen. Im Anschluss an das erweiterte Tutorial habe ich meine Ketten in verschiedene Objekte aufgeteilt (jedes Objekt in einer eigenen Datei) - eines der Objekte enthält die Login-Prozedur, die unabhängig von der Benutzerrolle gleich ist. Ich möchte das wiederverwenden, aber mit verschiedenen Feedern.Daten vom Feeder nicht im Szenario verfügbar

Ich lade den Benutzernamen und das Passwort mit dem CSV-Feeder, aber es sieht so aus, als ob es die Daten nicht zur Sitzung hinzufügen, weil ich Failed to build request Submit user/password: No attribute named 'password' is defined beim Ausführen der Simulation erhalten.

Hier ist mein Code, die in mehrere Dateien aufgeteilt:

Simulation.scala

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 

class Simulation extends Simulation { 
    val httpProtocol = http 
    .baseURL("baseURI") 

    val admins = scenario("Admins") 
    .feed(csv("admins.csv")) 
    .exec(Login.login) 
    .exec(TaskA.taskA) 

    val users = scenario("Users") 
    .feed(csv("users.csv")) 
    .exec(
    Login.login, 
    TaskB.taskB, 
    TaskC.taskC 
) 


    setUp(
    admins.inject(atOnceUsers(1))/*, 
    users.inject(atOnceUsers(1))*/ 
).protocols(httpProtocol) 
} 

Login.scala

object Login { 
    val login = group("Login") { 
    exec(http("Get form") 
    .get("/login/login.php") 
    .check(form("""form[name="relay"]""").saveAs("passwordForm"))) 
    .pause(10 seconds) 

    .exec(http("Submit user/password") 
    .post("/login/authenticate.php") 
    .form("${passwordForm}") 
    .formParam("pass", "${password}") //TODO: get from feeder 
    .formParam("user", "${username}") //TODO: get from feeder 
) 
} 
} 

Vorerst die CSV-Dateien sind die gleich:

username,password 
user,user 

Seltsamerweise funktioniert es, wenn ich die .feed(csv("admins.csv")) in Login.scala verschiebe, aber dann kann ich es nicht für Benutzer verwenden.

Antwort

1

Die Lösung erwies sich als recht einfach zu sein - injizieren verschiedene Instanzen Einloggen in jedes Szenario wie folgt aus:

Login.scala

object Login { 
    def login(feeder: FeederBuilder[_]): ChainBuilder = { 
    feed(feeder) 
    ... 
    } 
} 

Dann in der Simulation

Simulation. scala

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 

class Simulation extends Simulation { 
    val httpProtocol = http 
    .baseURL("baseURI") 

    val admins = scenario("Admins") 
    .exec(Login.login(csv("admins.csv"))) 
    .exec(TaskA.taskA) 

    val users = scenario("Users") 
    .exec(
    Login.login(csv("users.csv")), 
    TaskB.taskB, 
    TaskC.taskC 
) 


    setUp(
    admins.inject(atOnceUsers(1))/*, 
    users.inject(atOnceUsers(1))*/ 
).protocols(httpProtocol) 
} 
Verwandte Themen