Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save thomasdarimont/c3c8fe37e1d47f3acd7773c4a8459ddf to your computer and use it in GitHub Desktop.
Save thomasdarimont/c3c8fe37e1d47f3acd7773c4a8459ddf to your computer and use it in GitHub Desktop.
Gatling Keycloak Load-testing example
package de.acme.idm.testing.load
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
class SimpleLoginEditLogoutRecordedSimulation extends Simulation {
val httpProtocol = http
.baseURL("http://192.168.99.1:8080")
.proxy(Proxy("192.168.99.1", 8080).httpsPort(8443))
.inferHtmlResources(WhiteList(), BlackList())
.acceptHeader("*/*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.userAgentHeader("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0")
val headers_0 = Map(
"Accept" -> "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Upgrade-Insecure-Requests" -> "1")
val headers_1 = Map("Accept" -> "text/css,*/*;q=0.1")
val jqueryUiUri = "http://code.jquery.com/ui/1.11.4/jquery-ui.js"
val keycloakBaseUri = "http://192.168.99.1:8080/u/auth"
var keycloakVersion = "1.9.9.1.acme-snapshot";
val scn = scenario("SimpleLoginEditLogoutRecordedSimulation")
// open login page
.exec(http("request_0")
.get("/u/auth/realms/acme-test/account")
.headers(headers_0)
.check(css("#kc-form-login", "value").saveAs("kc-form-login"))
.resources(http("request_1")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/css/login.css")
.headers(headers_1),
http("request_2")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/lib/patternfly/css/patternfly.css")
.headers(headers_1),
http("request_3")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/css/login-mobile.css")
.headers(headers_1),
http("request_4")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/lib/patternfly/js/patternfly.min.js"),
http("request_5")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/lib/zocial/zocial.css")
.headers(headers_1),
http("request_6")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/lib/bootstrap/bootstrap.js"),
http("request_7")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/css/forms.css")
.headers(headers_1),
http("request_8")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/lib/jquery/jquery-1.10.2.js"),
http("request_9")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/img/checkbox/checkbox.png"),
http("request_10")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/img/logo.png"),
http("request_11")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/img/icons/info.png")))
.pause(16)
// login with username + password
.exec(http("request_12")
.get("/u/auth/resources/" + keycloakVersion + "/login/acme-public/img/checkbox/checkbox_hover.png")
.resources(http("request_13")
.post("${kc-form-login}")
.headers(headers_0)
.formParam("username", "ed-test")
.formParam("password", "test")
.formParam("login", "Anmelden"),
http("request_14")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_15")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(13)
// goto password page
.exec(http("request_16")
.get("/u/auth/realms/acme-test/account/password")
.headers(headers_0)
.resources(http("request_17")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_18")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(7)
// goto authenticator page
.exec(http("request_19")
.get("/u/auth/realms/acme-test/account/totp")
.headers(headers_0)
.resources(http("request_20")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_21")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(8)
// goto application page
.exec(http("request_22")
.get("/u/auth/realms/acme-test/account/applications/")
.headers(headers_0)
.resources(http("request_23")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_24")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(24)
// goto profile page
.exec(http("request_25")
.get("/u/auth/realms/acme-test/account/")
.check(css("#stateChecker", "value").saveAs("stateChecker"))
.headers(headers_0)
.resources(http("request_26")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_27")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(45)
// change user firstname
.exec(http("request_28")
.post("/u/auth/realms/acme-test/account/")
.headers(headers_0)
.formParam("stateChecker", "${stateChecker}")
.formParam("email", "tester@localhost")
.formParam("firstName", "Theo")
.formParam("lastName", "Tester")
.formParam("submitAction", "Save")
.resources(http("request_29")
.get(jqueryUiUri + "")
.check(status.is(404)),
http("request_30")
.get(jqueryUiUri + "")
.check(status.is(404))))
.pause(8)
// logout user
.exec(http("request_31")
.get("/u/auth/realms/acme-test/protocol/openid-connect/logout?redirect_uri=http%3A%2F%2F192.168.99.1%3A8080%2Fu%2Fauth%2Frealms%2Facme-test%2Faccount%2F")
.headers(headers_0))
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment