我必须使用Gatling/Scala编写一些测试。在我的具体情况下,我必须使用用户名和密码登录网站(此外还有密钥斗篷安全性)。有一个带有很多用户/密码行的CSV文件,我的目标是使用此CSV文件中的每个用户/密码登录。
问题是我不知道怎么做。我可以用用户名/密码和密钥斗篷的安全令牌登录,只需一个用户。到目前为止还可以,但还不够。以下是我到目前为止所做的。
第一类:
class LasttestBestand extends Simulation {
val context = Context.ladeContext("de", "integ")
val userCredentials = TestdatenImport.ladeTestDaten("de")
val httpProtocol = http
.baseUrl(s"${context.protocol}://${context.host}")
.inferHtmlResources(
BlackList(""".*\.css""", """.*\.js""", """.*\.ico""", """.*\.woff"""),
WhiteList()
)
.acceptHeader("application/json, text/plain, */*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("de,en-US;q=0.7,en;q=0.3")
.disableFollowRedirect
.userAgentHeader(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:63.0) Gecko/20100101 Firefox/63.0"
)
val scn = scenario("Lasttest Bestand")
.feed(userCredentials.csvFeeder)
.exec(Login.holeAccessToken("${Benutzername}", "${Passwort}", context))
.exec(Suche.ladeKundensucheResourcen(context))
setUp(
scn.inject(
atOnceUsers(1)
)
).protocols(httpProtocol)
}
馈线类:
class TestdatenImport(val csvFeeder: BatchableFeederBuilder[String]) {}
object TestdatenImport {
def ladeTestDaten(land: String) = {
val csvFeeder = csv(s"data/eca-bb3-${land}-testdaten.csv").circular
new TestdatenImport(
csvFeeder
)
}
}
登录名:
object Login {
def holeAccessToken(
benutzer: String,
passwort: String,
context: Context
): ChainBuilder = {
val keycloakUri = s"${context.protocol}://${context.keycloakHost}"
val redirectUri =
s"${context.protocol}%3A%2F%2F${context.host}%2Fapp%2F%3Fredirect_fragment%3D%252Fsuche"
exec(
http("Login Page")
.get(
s"$keycloakUri/auth/realms/${context.realm}/protocol/openid-connect/auth"
)
.queryParam("client_id", "bestand-js")
.queryParam("redirect_uri", redirectUri)
.queryParam("state", UUID.randomUUID().toString())
.queryParam("nonce", UUID.randomUUID().toString())
.queryParam("response_mode", "fragment")
.queryParam("response_type", "code")
.queryParam("scope", "openid")
.header(
"Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
)
.header("Upgrade-Insecure-Requests", "1")
.check(status.is(200))
.check(
css("#kc-form-login")
.ofType[Node]
.transform(variable => {
variable.getAttribute("action")
})
.saveAs("loginUrl")
)
).exec(
http("Login")
.post("${loginUrl}")
.formParam("username", benutzer)
.formParam("password", passwort)
.header(
"Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
)
.header("Upgrade-Insecure-Requests", "1")
.check(status.is(302))
.check(
header("Location")
.transform(url => {
url.substring(url.indexOf("code=") + 5, url.length())
})
.saveAs("code")
)
.check(header("Location").saveAs("nextPage"))
)
.exec(
http("Fetch Token")
.post(
s"$keycloakUri/auth/realms/${context.realm}/protocol/openid-connect/token"
)
.header("Accept", "*/*")
.header("Origin", s"${context.protocol}://${context.host}")
.formParam("code", "${code}")
.formParam("grant_type", "authorization_code")
.formParam("client_id", "bestand-js")
.formParam("redirect_uri", redirectUri)
.check(status.is(200))
.check(
jsonPath("$..access_token")
.saveAs("accessToken")
)
)
}
}
如您所见,我在场景中添加了一个进纸器,但我不知道如何“重复”登录CSV文件中有用户/密码行的次数。我做错了什么?
在CSV文件中输入尽可能多的用户,例如:
scn.inject(
rampUsers(numberOfEntries) during(10 minutes)
)
我使用CSV馈送器来馈送多个模拟。当使用gatlingRun运行时,每个模拟从一开始就开始读取文件。我将进料器保存在对象变量中(必须像静态变量一样): 有没有办法让所有模拟都使用相同的馈线实例,或者让每个实例在其他实例完成的地方继续?
我一直在使用JMeter和Gatling在JSF2 PrimeFaces4 web应用程序上记录一个场景,以便对其进行负载测试。这两个工具都可以很好地进行录制,但是由于在commandButton上打开弹出对话框的单击操作不会触发关联事件,所以该场景的重播失败了。所述commandButton由场景中的前一个操作(同一表行中的下拉选择)启用。 只有在性能测试工具上运行场景时才会出现此问题,而不是在
我是加特林的新手,我有自己无法解决的问题。我必须从我创建的feeder中提取价值,但我不知道该怎么做。你知道怎么做吗?谢谢你的帮助。
我用CSV在加特林创建了一个简单的馈线。脚本运行良好,没有出现任何错误。我知道在负载测试期间会从CSV获取值。但我如何才能确保每个用户都得到了哪些价值呢。我必须确保第一个用户应该使用用户名:user1和密码:password1登录。因为我对加特林非常陌生,所以我找不到解决这个问题的办法。因此,请帮我找到解决方案,提前谢谢。。。。。。 我的CSV包含- 用户1密码1 用户2密码2 用户密码 我的进纸
我将springBoot与JOOQ一起使用,并希望记录生成的SQL。 我将slf4J添加到maven依赖项和log4j.xml中,就像在JOOQ文档中一样(http://www.JOOQ.org/doc/latest/manual/sql-execution/logging/)。但是当jooq执行一些查询时,我在控制台中看不到任何日志。
我遇到了一个问题,似乎没有将来自馈线的数据添加到会话中。我正在测试一个系统,其中一个用户有一个角色(即用户或管理员),我需要根据角色执行各种测试。在高级教程之后,我将链拆分为不同的对象(每个对象都在自己的文件中)——其中一个对象包含登录过程,无论用户角色如何,登录过程都是相同的。我不想重复使用这个,但要用不同的喂食器。 我使用csv feeder加载用户名和密码,但看起来它无法将数据添加到会话中,