Scala dodawanie wartości do zmiennej

0

Witam.
Robię testy wydajnościowe w gatlingu używając scali, a nigdy wcześniej jej nie używałem. Potrzebuję zedytować trochę jedną zmienną.
Nie wiem jak coś do niej dodać. Wygląda to tak:

var scn = scenario("RecordedSimulation")
		.exec(http("request_0")
			.post("/xxx")
			.headers(headers_0)
			.body(RawFileBody("RecordedSimulation_0000_request.txt"))
			.resources(http("request_1")
			.get(uri1 + "/xxx")
			.headers(headers_1),
            http("request_2")
			.get(uri1 + "/images/logo.fb5a8663.png")
			.headers(headers_2),
            http("request_3")
			.get(uri1 + "/images/login-box-1.791b0f43.jpg")
			.headers(headers_2),
            http("request_4")
			.get(uri1 + "/images/login-box-3.b1f9e054.jpg")
			.headers(headers_2),
            http("request_5")
			.get(uri1 + "/xxx")
			.headers(headers_1),
            http("request_6")
			.get(uri1 + "/xxx")
			.headers(headers_1),
            http("request_7")
			.get(uri1 + "/api/wiadomosci/pobierzwiadomosci")
			.headers(headers_1),
            http("request_8")
			.get(uri1 + "/xxx")
			.headers(headers_1)))

I teraz pytanie: jak później coś do tej zmiennej dodać? np.

pause(13)
		.exec(http("request_9")
			.get("/xxx")
			.headers(headers_1))
		.pause(1)
		.exec(http("request_10")
			.post("/xxx")
			.headers(headers_10)
			.body(RawFileBody("RecordedSimulation_0010_request.txt")))
		.pause(7)
		.exec(http("request_11")
			.get("/xxx")
			.headers(headers_1))
		.pause(1)
		.exec(http("request_12")
			.post("/xxx")
			.headers(headers_10)
			.body(RawFileBody("RecordedSimulation_0012_request.txt")))

Pozdrawiam.

2

Odpowiedz 5 sekundowa:

Po prostu dołącz:

  val scn = scenario("RecordedSimulation")
    .exec(http("request_0")
    .post("/partnergb/api/login/authenticate")
    .headers(headers_0)
    .body(RawFileBody("RecordedSimulation_0000_request.txt"))
      .resources(http("request_1")
      .get(uri1 + "/api/login/biezacyUzytkownik")
      .headers(headers_1),
      http("request_2")
        .get(uri1 + "/images/logo.fb5a8663.png")
        .headers(headers_2),
      http("request_3")
        .get(uri1 + "/images/login-box-1.791b0f43.jpg")
        .headers(headers_2),
      http("request_4")
        .get(uri1 + "/images/login-box-3.b1f9e054.jpg")
        .headers(headers_2),
      http("request_5")
        .get(uri1 + "/api/parametry/pobierzparametry")
        .headers(headers_1),
      http("request_6")
        .get(uri1 + "/api/parametry/pobierzparametrykalkulatora")
        .headers(headers_1),
      http("request_7")
        .get(uri1 + "/api/wiadomosci/pobierzwiadomosci")
        .headers(headers_1),
      http("request_8")
        .get(uri1 + "/api/informacje/pobierzwszystkieinformacje")
        .headers(headers_1)))
    .exec(http("request_9")
      .get("/partnergb/api/klienci/znajdzKlienta?identyfikator=58062456334")
      .headers(headers_1))
    .pause(1)
    .exec(http("request_10")
      .post("/partnergb/api/klienci/anulujpotwierdzanie")
      .headers(headers_10)
      .body(RawFileBody("RecordedSimulation_0010_request.txt")))
    .pause(7)
    .exec(http("request_11")
      .get("/partnergb/api/klienci/znajdzKlienta?identyfikator=54030216139")
      .headers(headers_1))
    .pause(1)
    .exec(http("request_12")
      .post("/partnergb/api/klienci/anulujpotwierdzanie")
      .headers(headers_10)
      .body(RawFileBody("RecordedSimulation_0012_request.txt")))

Odpowiedz 20 sekundowa.

Od razy zacznij sobie porządkować sam scenariusz. Np zapisuj do zmiennych kroki, które łatwo wyróżnić, a potem połącz to w samym scenario. Najprościej na Twoim przykładzie:

class Test extends Simulation {

  //Na szybko skopiowałem identyczne nagłówki, ale oczywiście każdy może być inny
  val headers_1 = Map("Accept" -> "application/json, text/plain, */*")
  val headers_2 = Map("Accept" -> "application/json, text/plain, */*")
  val headers_3 = Map("Accept" -> "application/json, text/plain, */*")
  val headers_0 = Map("Accept" -> "application/json, text/plain, */*")
  val headers_10 = Map("Accept" -> "application/json, text/plain, */*")

  val uri1 = "http://mywebpage.com"


  val login = exec(http("request_0")
    .post("/partnergb/api/login/authenticate")
    .headers(headers_0)
    .body(RawFileBody("RecordedSimulation_0000_request.txt"))

    .resources(http("request_1")
      .get(uri1 + "/api/login/biezacyUzytkownik")
      .headers(headers_1),
      http("request_2")
        .get...
//ucięte aby nie dłużyć
  

  val multiStepRequest = exec(http("request_9")
    .get("/partnergb/api/klienci/znajdzKlienta?identyfikator=58062456334")
    .headers(headers_1))
    .pause(1)
    .exec(http("request_10")
      .post("...
//ucięte aby nie dłużyć

//W scenariuszu łączysz kroki

  val scn = scenario("RecordedSimulation")
    exec(
      login,
      multiStepRequest
    )

}

Polecam ogranięcie przykładów z dokumentacji.
Polecam ogarnięcie fajnych trików porządkujących kod symulacji na przykładzie bbc galing, do odszukania na ichnim githubie.

0

Dzięki za przykład z porządkowaniem kodu :)
Pytałem o te łączenie zmiennych ponieważ chciałem w pętli dodać jeden request w którym zmienia się jedna wartość którą mam zapisaną w pętli np:

val z = Array("23424", "234234", "12313", "11")
.get("/jakies/zapytanie?id=" + z.get(id))

na początku chciałem to zrobić zwykłym forem, później znalazłem w dokumentacji funkcję repeat

.repeat(z.length-1, "counter") {
			exec(http("request_a" + counter)
				.get("/jakies/zapytanie?id=" + z.get(counter))
				.headers(headers_16))
				.pause(2)
				.exec(http("request_b" + counter)
					.post("/partnergb/api/klienci/anulujpotwierdzanie")
					.headers(headers_34))
				.pause(2)
		}

Nie wiem jak odwołać się do countera i czy trzeba go ręcznie inkrementować.

0

Poradziłem sobie z tą tablicą, tak myślę :) ponieważ nie wiem jak w gatlingu zobaczyć jaki adres jest wywołany w konkretnym requescie.
Wygląda to tak:

val listaPeseli = Array("546546", "45645645", "456546456")
val it = Iterator(listaPeseli)

//pozniej do scenariusza
.repeat(listaPeseli.length-1, "counter") {
			exec(http(s"request_a" + "${counter}")
				.get("/partnergb/api/klienci/znajdzKlienta?identyfikator=" + it.next)
				.headers(headers_16))
				.pause(2)
				.exec(http("request_b" + "${counter}")
					.post("/partnergb/api/klienci/anulujpotwierdzanie")
					.headers(headers_34))
				.pause(2)
		}

Feedera nie użyłem ponieważ jeszcze o nim nie czytałem :)
Nie wiem czy iterator działa jak powinien, jeszcze go nie przetestowałem.
Ogólnie jestem na praktykach i wczoraj miałem pierwsze zderzenie z gatlingiem i scalą (w firmie scali też nikt nie ogarnia :) )

Mam natomiast inny problem. Testuje działanie serwisu gdzie przy logowanieu do tego serwisu uzyskiwany jest nowy token, który w momencie odpalania testu jest już nie ważny.
Teraz muszę go dynamicznie pobrać, zapisać w sesji, a później dokleić do headera (wydaje mi się, że to najlepsza opcja). Obecnie czytam jak korzystać z sesji (zapisywać do niej dane, a później je pobierać).
Ktoś już z tego korzystał i może mi powiedzieć czy dobrze kombinuję? :)

Pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.