我遇到一个问题,它看起来来自馈线的数据没有添加到会话中。我正在测试一个用户有角色的系统(即用户或管理员),我需要根据角色执行各种测试。在高级教程之后,我将链分成不同的对象(每个对象在自己的文件中) - 其中一个对象包含登录过程,无论用户角色如何,都是相同的。我不会重复使用它,但使用不同的馈线。
我使用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中,它会起作用,但是我无法为用户重复使用它。
答案 0 :(得分:1)
解决方案非常简单 - 将不同的Login实例注入每个场景,如下所示:
<强> 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)
}