Pytanie Losowy wybór z pliku CSV w Jmeter


Mam bardzo duży plik CSV (8000+ elementów) adresów URL, które odczytuję z elementu konfiguracji zestawu danych CSV. Zapełnia ścieżkę próbnika HTTP Request i iteruje za pomocą kontrolera while.

To jest w porządku, z wyjątkiem tego, co chcę, aby każdy użytkownik (wątek) wybierał losowy adres URL z listy adresów URL CSV. Czego nie chcę, to każdy wątek używający kolejno elementów CSV.

Udało mi się to osiągnąć za pomocą kontrolera losowego z wieloma samplerami żądania HTTP, jednak 8000+ próbników HTTP naprawdę ugrzęzło w jmeterze do stanu bezużyteczności. Dlatego właśnie umieszczam adresy URL Sampler HTTP w pliku CSV. Nie wydaje mi się jednak, że mogę używać Kontrolera kolejności losowych z danymi pliku CSV. Jak więc uzyskać losowy wybór pozycji danych CSV na wątek?


11
2017-08-28 05:21


pochodzenie




Odpowiedzi:


Jest inny sposób, aby to osiągnąć:

  • utwórz osobną grupę wątków
  • w zależności od tego, co chcesz osiągnąć:
    • dodaj (losową) liczbę pętli -> to ustawi przesunięcie początkowe dla grupy wątków, która wykonuje pracę
    • dodaj liczbę lub czas w pętli i licznik czasu, a następnie przepuść pętlę, gdy działa druga grupa wątków. Ta grupa wątków odczyta "pseudo" losową linię

To nie jest losowe, plik jest nadal czytany sekwencyjnie, ale wątek roboczy powoduje skoki w pliku. Udało się to dla mnie ;-)


7
2018-06-25 15:29





Nie ma funkcji losowego wyboru podczas odczytu danych CSV. Powodem jest to, że najpierw musisz przeczytać cały plik w pamięci i to jest zły pomysł z narzędziem do testowania obciążenia (dowolne narzędzie do testowania obciążenia).

Inne komercyjne narzędzia rozwiązują ten problem, automatycznie przetwarzając dane. W JMeter można osiągnąć to samo ręcznie, po prostu sortując dane przy użyciu dowolnego pola. Jeśli sortujesz według, powiedz, nazwisko, to wynik jest faktycznie dystrybucją losową.

Uwaga. Jeśli zapewnisz domyślną All Threads jest ustawiony dla konfiguracji zestawu danych CSV, wtedy dane będą unikalne w zakresie procesu JMeter.


2
2017-09-22 18:01



Sugeruję tę odpowiedź zaproponowaną przez Olivera Lloyda. Zawsze istnieje sposób randomizacji pliku danych CSV za pomocą samplera JSR223 lub napisania małego programu, który działa przed jmeterem i losuje wiersze w pliku csv. - dnafication


Nie jestem pewien, czy to zadziała, ale i tak to zasugeruję.

Dlaczego nie podzielić adresów URL w 100 różnych plikach CSV. Następnie w każdym wątku generujesz losową liczbę i użyj tego numeru, aby zidentyfikować plik CSV do odczytu przy użyciu funkcji __CSVRead.

CSVRead "> http://jmeter.apache.org/usermanual/functions.html#_CSVRead

Teraz jedyna część, której nie jestem pewien, czy funkcja __CSVRead ponownie otwiera plik za każdym razem lub udostępnia ten sam uchwyt pliku przez wątki.

Możesz spróbować. Proszę podziel się swoimi odkryciami.


0
2017-08-28 12:59





Zgodnie z innymi odpowiedziami, powodem, dla którego nie można wybrać losowej linii, jest konieczność przeczytania całego pliku w pamięci, która jest nieefektywna.

Zamiast próbować zmusić JMeter do poradzenia sobie z tym w locie, dlaczego nie po prostu wybrać losowo kolejność plików przed rozpoczęciem testu?

Język skryptowy taki jak Perl sprawia, że ​​jest to krótkie:

 cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv

0
2018-01-07 00:23





Bardzo proste rozwiązanie. W pliku CSV dodaj kolejną kolumnę (np. B) apply = funkcja RAND () w pierwszej komórce kolumny B (np. B1). Spowoduje to utworzenie losowej liczby zmiennoprzecinkowej. Przeciągnij narożnik komórki (powiedzmy B1), aby zastosować wszystkie odpowiednie adresy URL Sortuj kolumnę B. Twój adres URL będzie sortowany losowo. Usuń kolumnę B.


0
2018-06-13 08:48





Nowa Losowa konfiguracja zestawu danych CSV z wtyczki BlazeMeter powinno idealnie pasować do Twoich potrzeb.


0
2017-07-19 12:00