Last active
May 25, 2020 14:24
-
-
Save thomasdarimont/c3c8fe37e1d47f3acd7773c4a8459ddf to your computer and use it in GitHub Desktop.
Gatling Keycloak Load-testing example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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