2013-08-28 5 views
11

Ho un file CSV molto grande (8000+ articoli) di URL che sto leggendo con un elemento di configurazione del set di dati CSV. Sta compilando il percorso di un campionatore Request HTTP e iterando con un controller while.Selezione casuale dal file CSV in Jmeter

Questo va bene, tranne quello che voglio è avere ogni utente (thread) per selezionare un URL casuale dalla lista di URL CSV. Quello che non voglio è ciascun thread che utilizza gli elementi CSV in sequenza.

Sono stato in grado di ottenere questo risultato con un controller di ordine casuale con più campionatori HTTP Request, tuttavia 8000+ HTTP Samplers è davvero impantanato jmeter in uno stato inutilizzabile. Ecco perché inserisco gli URL di Sampler HTTP nel file CSV. Tuttavia, non sembra che io possa utilizzare il controller di ordine casuale con i dati del file CSV. Quindi, come posso ottenere una selezione casuale dei dati dei dati CSV per thread?

risposta

0

Non sono sicuro che funzionerà, ma lo suggerirò comunque.

Perché non dividere i tuoi URL in 100 diversi file CSV. Quindi in ogni thread si genera il numero casuale e si utilizza quel numero per identificare il file CSV da leggere utilizzando la funzione __CSVRead.

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

Ora l'unica parte non sono sicuro se la funzione __CSVRead riapre il file ogni volta o azioni lo stesso file gestire attraverso i filetti.

si consiglia di provarlo. si prega di condividere le vostre scoperte.

1

non c'è alcuna funzione di selezione casuale nella lettura dei dati csv. il motivo è che si avrebbe bisogno di leggere l'intero file in memoria prima di fai questo e questa è una cattiva idea con uno strumento di test di carico (qualsiasi strumento di test di carico).

Altri strumenti commerciali risolvono questo problema rielaborando automaticamente i dati. In JMeter puoi ottenere lo stesso manualmente semplicemente ordinando i dati usando un campo arbitrario. Se si ordina, per esempio Cognome, il risultato sarà distribuito in modo casuale.

Nota. Se si assicura che il valore predefinito All Threads sia impostato per la configurazione del set di dati CSV, i dati saranno esclusivi nell'ambito del processo JMeter.

7

C'è un altro modo per raggiungere questo obiettivo:

  • creare un gruppo di thread separato
  • a seconda di ciò che si vuole raggiungere:
    • aggiungere un (casuale) numero di loop -> Questo imposterà un offset iniziale per il gruppo di thread che esegue l'operazione
    • aggiunge un conteggio dei cicli o per sempre e un timer e lo lascia loop mentre l'altro gruppo di thread è in esecuzione. Questo gruppo di thread leggerà riga a caso una 'pseudo'

E 'in realtà non a caso, il file è ancora leggere in sequenza, ma il tuo thread di lavoro fa salti nel file. Ha funzionato per me ;-)

0

Come altre risposte hanno dichiarato, il motivo per cui non è possibile selezionare una riga a caso è perché si dovrebbe leggere l'intero file in memoria che è inefficiente.

Piuttosto che cercare di far funzionare JMeter al volo, perché non mettere a caso l'ordine dei file prima di iniziare il test?

Un linguaggio di scripting come Perl rende breve lavoro di questo:

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

Una soluzione molto dritto in avanti. Nel file CSV, aggiungere un'altra colonna (ad esempio B) apply = Funzione RAND() nella prima cella della colonna B (ad esempio B1). Questo creerà il numero float casuale. Trascina l'angolo della cella (diciamo B1) per applicare tutti gli URL corrispondenti Ordina la colonna B. l'URL verrà ordinato in ordine casuale. Elimina colonna B.