Pliki cookie sesji/zarządzania w Apache JMeter


Mamy prosty przepływ testów wydajnościowych w aplikacji.
  • Logujemy się
  • Szukaj według pewnych kryteriów
  • wyszukaj inne parametry ponownie.

Używamy Jmetera do testowania wydajności. Musimy mieć uruchomionych wiele wątków, aby przetestować to w skalowalny sposób.
Sposób, w jaki to teraz skonfigurowaliśmy, to:
-Test Plan
- Thread Group
- Cookie Manager
- Login To application
- Search on param 1
- Search on param 2
- results summary table
- Summary report

Tak więc w zasadzie mamy tabelę przestawną zwrotów i raport na poziomie planu, podczas gdy menedżer plików cookie jest obecny na poziomie grupy wątków.
Kiedy zaczynam jeden wątek, działa dobrze i dobrze się kończy. Kiedy skaluję go do wielu wątków, gdy tylko rozpocznie się następny wątek, sesja dla ostatniego wątku staje się nieważna. Powoduje to awarie dla wszystkich już uruchomionych wątków z powodu nowo utworzonego wątku.
Wynik ten osiągnąłem obserwując:

Jeśli uruchamiam wiele wątków, tylko ostatni wątek ma prawidłowe odpowiedzi w drzewie podsumowania

2. Jeśli rozpocznę 2 wątki z 10-sekundową szybkością narastania, co oznacza, że ​​każdy wątek ma czas na zakończenie się, to oba działają pomyślnie.
Jak rozumiem, każdy wątek jest loginem do aplikacji, a ponieważ menedżer plików cookie jest na poziomie wątku, wartości będą odpowiednio przechowywane dla identyfikatora sesji dla każdego wątku? Ale co powoduje, że wartość identyfikatora sesji jest zastępowana między wątkami?
Każda pomoc byłaby bardzo mile widziana.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Skopiowano z dokumentacji jmeter:

Ostatnim elementem jest plik cookie HTTP
Menedżer. Menedżer plików cookie musi być
dodane do wszystkich testów internetowych - w przeciwnym razie
JMeter zignoruje pliki cookie.

Poprzez dodanie
to jest na poziomie grupy wątków, my
upewnij się, że wszystkie żądania HTTP będą
udostępniać te same pliki cookie.
Z rozdziału „Sterowniki logiczne 4.2.2” w sekcji

http://jmeter.apache.org/usermanual/test_plan.html
http://jmeter.apache.org/usermanual/test_plan.html
.

EDIT
: myślę, że powinieneś użyć

http://jmeter.apache.org/userm ... oller
http://jmeter.apache.org/userm ... oller
aby grupować Twoje zapytania razem z Menedżerem plików cookie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że odpowiedź Andreya nie może pomóc. Cytuje, że każde żądanie będzie używać tych samych plików cookie, ALE zgodnie z przewodnikiem jmetera:

Każdy wątek narzędzia JMeter ma własny wątek obszaru przechowywania plików cookie.

Jak rozumiem pytanie, chcesz, aby każdy wątek miał ten sam plik cookie z identyfikatorem sesji. Wydaje mi się więc, że musisz mieć dwie grupy wątków i wykonywać je sekwencyjnie. Pierwsza grupa wątków (z jednym wątkiem, który działa tylko raz) wymaga zalogowania się i zapisania wartości cookie sesji w parametrze globalnym (może być konieczne użycie możliwości skryptów jmeter).
Następnie ustaw ten plik cookie w menedżerze plików cookie drugiej grupy wątków.
Mam nadzieję że to pomoże.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj zwiększyć czas narastania. Napotkałem ten sam problem, w którym czas narastania wynosił około 1 sekundy, potem zwiększyłem go do 3 sekund na nitkę i działało dobrze.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj tego:
Otwórz plik user.properties znajdujący się w folderze bin pliku JMeter
Edytuj go i dodaj następujący wiersz:
CookieManager.check.cookies=false

Zapisz go i uruchom skrypt. Mam nadzieję, że to rozwiąże Twój problem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najpierw zmień kod na:
jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_

Następnie dodaj menedżera plików cookie HTTP do tej samej grupy wątków, co twój próbnik java.
Następnie w swoim samplerze java dodaj:
JMeterVariables jmv = JMeterContextService.getContext().getVariables();
Iterator<Map.Entry<String,Object>> it = jmv.getIterator();
while(it.hasNext()){
Map.Entry<String,Object> v = it.next();
System.out.println("name: " + v.getKey() + " value: " + v.getValue());
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się