2012-06-22 14 views
7

Mam plan testowania JMeter z następującymi próbkami żądań http.j Sekwencja wątku

  1. Logowanie
  2. połączeń niektóre funkcje, które potrzebuje zalogowany użytkownik
  3. Wyloguj

Kiedy wykonać planu testów z 5 równoległych wątków, widzę, że próbnik 2 nazywa się przed wywołaniem próbnik 1 dla niektórych wątków, który następnie zawiedzie twierdzenia o odpowiedzi.

Czy istnieje sposób określenia sekwencji próbników do wykonania?

+0

Co sprawia, że ​​myślisz, że Sampler 2 jest wykonywany przed Sampler 1? Żądania są wykonywane sekwencyjnie, z góry do dołu, a to bardzo mało prawdopodobne, aby się nie udało, więc być może problem z interpretacją wyników. –

+0

Ponieważ widzę w drzewie wyników widoku, że gdy zaczynam od 5 równoległych wątków, login jest wywoływany 4 razy, a druga strona nie odpowiada twierdzeniu, że powinien istnieć przycisk wylogowania. – rangalo

+0

"Wyświetl drzewo wyników" nie odzwierciedla sekwencji wątków, nie jest wiarygodnym źródłem (ponieważ niektóre wątki mogą być wykonywane szybciej niż inne). –

Odpowiedz

10

ten powinien zapewnić, że są one wykonywane kolejno:

enter image description here

Więc zacznijmy grupy wątków.

liczba wątków (użytkowników) to 5.

Więc zakładając, że masz logika wypracować dla swojej logowania próbnika. Po prostu dodaj do niego dodatkowy sampler. Tak więc kliknij prawym przyciskiem myszy na tę próbkę Add > Post Processors > BSF PostProcessor, wewnątrz tego dużego skryptu wpisz: ${__setProperty(ThreadValue,${__threadNum},)}.

Spowoduje to zapisanie numeru nici w nieruchomości o nazwie ThreadValue. Upewnij się, że wybrałeś swój język jako beanshell na liście rozwijanej.

Następnie po samplach logowania dodaj kontroler if. Dodaj do tego pola stan (${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum})

Oznacza to, że -.> Nie rejestrowane tylko w rzeczy, podczas gdy rzeczywista logowanie się powiedzie i czy gwint logowanie pasuje do wątku w którym aktualnie jesteś

I to ty rób swoje dane logowania tylko wewnątrz kontrolera if. Jeśli chcesz mieć pewność, że wylogujesz właściwego użytkownika, umieść dodatkowe, jeśli kontroler go obejmie.

Cheers

+0

Czy mogę sprawdzić, czy logowanie powiodło się w oparciu o kod odpowiedzi? – zillani

2

Co trzeba wziąć pod uwagę to, że każdy wątek jest odrębnym podmiotem, jak prawdziwy użytkownik, i że ma własną sesję, ale JMeter jest przeznaczony do wykonywania tych wątki asynchronicznie, tzn. równolegle. Sesja View Tree Tree wyświetla całą aktywność ze wszystkich wątków , jak to się dzieje niezależnie od logicznej sekwencji wątków. Jeśli wolisz, aby jeden wątek tworzył 5 iteracji, po prostu zmień liczbę wątków na 1 i użyj pętli 5, a to zachowa sekwencję (chociaż to pokona punkt użycia narzędzia do testowania obciążenia, takiego jak JMeter!).

Jeśli zmienisz liczbę wątków na 1, zobaczysz prawdziwą, logiczną sekwencję wykonania w drzewie wyników. To pokaże, że każdy sampler jest wykonywany w kolejności od góry do dołu.

Teraz, w twoim przypadku, podejrzewam, że masz problem nie dlatego, że rzeczy są uruchamiane poza kolejnością, ale raczej dlatego, że serwer traci kontekst sesji między żądaniami. Jest to bardzo powszechne i często można rozwiązać problem za pomocą HTTP Cookie Manager lub przy użyciu Regular Expression Extractor.