2012-03-22 19 views
13

Mam następującą konfigurację:Dzielenie wartości cookies między grupami wątek w JMeter

Thread A 
    - Http Cookie Manager 
    - Login Page 
Thread B 
    - Http Cookie Manager 
    - Page to hit 
    - Another page to hit 

Próbowałem dostać cookie, który jest ustawiony w Logowania do właściwości globalne, a następnie ustawić go do Http Cookie Manager w wątku B. Jednak nie udało mi się go naprawić. Próbowałem już BeanShell PostProcessors i takie, ale nie udało mi się go poprawnie skonfigurować.

=== Dodaj do wyjaśnienia ===

Powodem nie mogę mieć dziennik w widoku i ciasteczka kierownik wątek B jest spowodowane zachowaniem pożądanym. Celem jest zalogowanie się, pobranie pliku cookie, a następnie trafienie kilku stron w kółko. Daje nam to możliwość zalogowania się raz, a następnie symulacji wielu trafień od tego użytkownika. Poprzez umieszczenie menedżera plików cookie i zalogowanie się w tym samym wątku użytkownik zaloguje się, raz uderzy w kilka stron, a następnie zaloguje się i zrobi to ponownie.

Odpowiedz

21

Powinienem być trochę bardziej przejrzysty w moim pytaniu, ale to naprawiliśmy. Oto nasze rozwiązanie:

Http Cookie Manager 
Thread A - 1 Thread - 1 Loop Count 
    - Login Page 
     - BeanShell PostProcessor 
      - props.put("MyCookie","${COOKIE_<INSERT ACTUAL COOKIE NAME>}"); 
Thread B - 50 Threads - Infinite Loop Count 
    - BeanShell PreProcessor 
     - import org.apache.jmeter.protocol.http.control.CookieManager; 
     import org.apache.jmeter.protocol.http.control.Cookie; 
     CookieManager manager = sampler.getCookieManager(); 
     Cookie cookie = new Cookie("<INSERT ACTUAL COOKIE NAME>",props.get("MyCookie"),"<INSERT DOMAIN NAME>","<INSERT COOKIE PATH>",false,0); 
     manager.add(cookie); 
    - Page to hit 
    - Another page to hit, repeat as needed 

Potem nastąpiła zmiana konfiguracji JMeter potrzebne:

Otwórz plik jmeter.properties i przejdź do wiersza „CookieManager.save.cookies = false” i uczynić go = true.

Umożliwi to użycie pliku cookie logowania w pierwszym wątku w drugim wątku.

+0

Jak uzyskać ścieżkę do plików cookie? – Esty

+0

Możesz użyć "/" jako ścieżki ... –

+0

@Clarence Klopfstein, I użyłeś metody, którą zrobiłeś, i jestem w stanie zobaczyć te same nazwy i wartości ciasteczek, ale prośby, których używam, mówią teraz "[nie ma ciasteczek]". Jakiś pomysł? –

1

Dlaczego nie dodać Http Cookie Manager do poziomu planu badań zamiast grupy wątków pierwszej i pogrupować wszystkie próbniki w jednej grupie wątków?

Test Plan 
    Http Cookie Manager 
    Thread Group 
     - Login Page 
     - Page to hit 
     - Another page to hit 

To powinno rozwiązać twój problem bez żadnych innych dodatkowych próbników.
A może istnieją pewne obiektywne powody, aby wdrożyć to, co zrobiłeś?

... Proszę spojrzeć na this również.

+1

Opublikuję nieco nasze rozwiązanie, ale udało nam się to zrobić. Aby odpowiedzieć na sugestię, pomysł polegał na jednokrotnym zalogowaniu się i zrobieniu wielu rzeczy i zobaczeniu, jak to działa. Twoja metoda wymagałaby zalogowania się w każdej iteracji. Nie jest to realistyczny test obciążenia. –

+0

Umieszczenie Menedżera plików cookie HTTP na poziomie planu testów nie działa dla mnie ... :( –

2

Mam taki sam przypadek użycia jak ty, ale myślę, że jest prostsze rozwiązanie: wewnątrz grupy wątków możesz użyć kontrolera pętli.

Więc ...

Thread Group 
    Login 
    Loop Controller 
    - Page to hit 
    - Another page to hit 

stwierdzili, że mam jeszcze zamiar użyć można opisać sprawę, ponieważ myślę, że będziemy chcieli, aby zalogować się raz, a następnie uderzył kilka różnych stron w parrallel z różnych grup wątku . Najpierw zalogujmy się, a następnie kilka różnych grup wątków trafi na serwer jednocześnie. Twoja sztuczka jest zdecydowanie przydatna. Ale w prostych przypadkach kontroler pętli może to zrobić, jak sądzę.

+0

Czy trafienia wewnątrz kontrolera pętli będą sekwencyjne czy równoległe? –

+0

sekwencyjny - to jest właśnie powód * NIE * do korzystania z tego –

0

Powyższa odpowiedź naprawdę mi pomogła, ale Menedżer plików cookie HTTP był , brakuje mi szczegółów, które były mi potrzebne, aby to zadziałało. Poprzez ustawienie menedżera plików cookie jak poniżej, pracował dla mnie

Http Cookie Manager 
NAME $<ACTUAL_COOKIE_NAME> 
VALUE ${COOKIE_<INSERT_ACTUAL_COOKIE_NAME>}  
DOMAIN ${SITE} 
PATH /
Thread A - 1 Thread - 1 Loop Count 
.... 
Thread B - 50 Threads - Infinite Loop Count 
.... 
0

CookieManager nie udostępniać pliki cookie między wątkami. Z jakiegoś powodu metoda @ ClarenceKlopfstein nie działała dla mnie (jmeter 3.0). Z jakiegoś powodu "${COOKIE_<INSERT ACTUAL COOKIE NAME>}" nie wydawało się oceniać przekazanego ciągu.

Oto kolejne rozwiązanie logowania, a następnie przesłanie pliku cookie .ASPXAUTH. Powinien działać bez zmian konfiguracyjnych: w A setUp Thread Group (ważne):

BeanShell PostProcessor: 
import org.apache.jmeter.protocol.http.control.CookieManager; 
import org.apache.jmeter.protocol.http.control.Cookie; 

CookieManager manager = ctx.getCurrentSampler().getCookieManager(); 
Cookie cookie = manager.get(3); //Find the '.ASPXAUTH' cookie 
log.info("Cookie:" + cookie); 
props.put("MyCookie",cookie.getValue()); 

Następnie w normalnym grupy wątku:

BeanShell PreProcessor: 
import org.apache.jmeter.protocol.http.control.CookieManager; 
import org.apache.jmeter.protocol.http.control.Cookie; 
CookieManager manager = sampler.getCookieManager(); 
Cookie cookie = new Cookie(".ASPXAUTH",props.get("MyCookie"),"<DOMAIN>","/",false,0); 
manager.add(cookie); 
+0

To rozwiązanie nie działa dla mnie :( –

+0

Nadal potrzebujesz CookieManager na poziomie planu testów @ShaiAlon. Czy próbowałeś już bez? –

2

Żaden z innymi rozwiązaniami tutaj pracował dla mnie, ale wszyscy mieli jakąś część rozwiązania. Oto, co w końcu udało się przekazać ciasteczko (JSESSIONID, w moim przypadku) z jednej grupy wątków do drugiej. Uwaga: Nie musiałem ustawiać żadnej wartości.

Http Cookie Manager 
Thread A - 1 Thread - 1 Loop Count 
    - Login Page 
     - BeanShell PostProcessor 
      - import org.apache.jmeter.protocol.http.control.CookieManager; 
       import org.apache.jmeter.protocol.http.control.Cookie; 
       import org.apache.jmeter.testelement.property.PropertyIterator; 
       import org.apache.jmeter.testelement.property.JMeterProperty; 
       CookieManager manager = ctx.getCurrentSampler().getCookieManager(); 
       PropertyIterator iter = manager.getCookies().iterator(); 
       while (iter.hasNext()) { 
        JMeterProperty prop = iter.next(); 
        Cookie cookie = prop.getObjectValue(); 
        if (cookie.getName().equals("JSESSIONID")) { 
         props.put("MySessionCookie", cookie); 
         break; 
        } 
       } 
Thread B - 50 Threads - Infinite Loop Count 
    - BeanShell PreProcessor 
     - import org.apache.jmeter.protocol.http.control.CookieManager; 
     import org.apache.jmeter.protocol.http.control.Cookie; 
     CookieManager manager = sampler.getCookieManager(); 
     manager.add(props.get("MySessionCookie")); 
    - Page to hit 
    - Another page to hit, repeat as needed 
+0

dzięki. działa jak urok! –

-1

dla więcej niż jednego pola w pliku cookie próbowałem to n swoje prace

BeanShell Post Processor 
    props.put("MyCookie","${COOKIE_<FIRST FIELD>}"); 
    props.put("MyCookie1","${COOKIE_<SECOND FIELD>}"); 

    BeanShell Pre Processor 

    import org.apache.jmeter.protocol.http.control.CookieManager; 
    import org.apache.jmeter.protocol.http.control.Cookie; 
    CookieManager manager = sampler.getCookieManager(); 
    Cookie cookie = new Cookie("<FIRST FIELD>",props.get("MyCookie"),"DOMAIN","/",false,0); 
    manager.add(cookie); 
    Cookie cookie1 = new Cookie("<SECOND FIELD>",props.get("MyCookie1"),"DOMAIN NAME","/",false,0); 
    manager.add(cookie1); 
0

zamiast oddzielnej grupy wątek do logowania użytkowników, możesz wykorzystać pojedynczą grupę wątku z Jednorazowy kontroler. Dodaj Samplery pod do jednorazowego kontrolera, aby się zalogować i pobrać plik cookie sesji (który oczywiście będzie uruchamiany tylko raz). Od tego momentu grupa wątków po prostu uruchomi inne samplery przesyłające plik cookie sesji do każdego żądania. Miałem HTTP Cookie Manager z zakresu dla tego zakresu.

Powiązane problemy