2017-01-05 3 views
0

У меня проблема, когда данные из фидера не добавляются в сеанс. Я тестирую систему, в которой пользователь имеет роль (то есть пользователь или администратор), и мне нужно выполнить различные тесты в зависимости от роли. Следуя расширенному руководству, я разделил свои цепочки на разные объекты (каждый объект в собственном файле) - один из объектов содержит процедуру входа, которая является той же, независимо от роли пользователя. Я не буду повторно использовать это, но с разными фидерами.Данные из фидера недоступны в сценарии

Загружаю имя пользователя и пароль с помощью фидера csv, но похоже, что он не может добавить данные в сеанс, потому что при запуске симуляции я получаю Failed to build request Submit user/password: No attribute named 'password' is defined.

Вот мой код, который разделен на несколько файлов:

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 
) 
} 
} 

Сейчас CSV-файлы являются такой же:

username,password 
user,user 

Как ни странно, это работает, если я перемещаю .feed(csv("admins.csv")) в Login.scala, но тогда я не могу повторно использовать его для пользователей.

ответ

1

Решение оказалось довольно просто - вводить различные экземпляры Вход в каждом сценарии, как это:

Login.scala

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

Тогда при моделировании

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) 
}