2013-08-28 18 views
11

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.Losowy wybór z pliku CSV w Jmeter

Jest to dobrze, z wyjątkiem tego, co chcę, aby każdy użytkownik (wątek) wybierał losowy 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 zamówień losowych z wieloma samplerami żądania HTTP, jednak 8000+ próbników HTTP naprawdę zablokowało jmeter 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?

Odpowiedz

0

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 tylko część nie jestem pewien, czy funkcja __CSVRead ponownie otwiera plik za każdym razem lub akcji tego samego pliku uchwyt na nici.

możesz spróbować. Proszę udostępniać swoje odkrycia.

1

nie ma losowe funkcja wybór podczas odczytywania danych CSV. powodem jest to, że trzeba przeczytać cały plik do pamięci pierwszy zrób to i to jest zły pomysł z narzędziem do testowania obciążenia (dowolne narzędzie do testowania obciążenia)

Inne narzędzia komercyjne 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 ustawienie wartości domyślnej All Threads dla konfiguracji zestawu danych CSV, dane będą unikalne w zakresie procesu JMeter.

7

Nie ma innego sposobu, aby to osiągnąć:

  • utworzyć oddzielną grupę nitek
  • w zależności od tego, co chcesz osiągnąć:
    • dodać (losowo) licznik pętli -> zostanie ustawiona przesunięcie początkowe dla grupy wątków, która wykonuje pracę, dodać liczbę pętli lub na zawsze i zegar i pozwolić jej na pętlę podczas działania innej grupy wątków. Ta grupa wątek będzie czytać „” pseudo losowy linia

to naprawdę nie jest przypadkowy, plik jest nadal czytać po kolei, ale twoja praca sprawia, że ​​skoki gwintu w pliku. To zadziałało dla mnie ;-)

0

Jak podają inne odpowiedzi, powodem, dla którego nie można wybrać losowo 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, takich jak Perl sprawia krótkie prace to:

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

Znacznie proste rozwiązanie do przodu. W pliku CSV dodaj kolejną kolumnę (powiedz B) Zastosuj = funkcja RAND() w pierwszej komórce kolumny B (powiedz B1). Spowoduje to utworzenie losowej liczby zmiennoprzecinkowej. Przeciągnij narożnik komórki (na przykład B1), aby zastosować wszystkie odpowiednie adresy URL. Kolumna sortowania B. Twój adres URL zostanie posortowany losowo. Usuń kolumnę B.