Domanda

Sto cercando di caricare-test un'applicazione Rails utilizzando JMeter. Una parte critica dell'applicazione comporta una forma che comprende entrambi gli ingressi di testo e caricamento di file. Funziona bene in un browser, ma quando cerco di inviare la pagina in JMeter, Rails è salvare tutte le parti del modulo multipart come file temporanei, che fa sì che le cose a rompere quando è alla ricerca di una stringa e ottiene un tempfile invece.

Sembra che la differenza è che, da un browser, il pezzo della richiesta multipart che contiene un input di testo è simile al seguente:

-----------------------------7d93b4186074c
Content-Disposition: form-data; name="field_name"

test
-----------------------------7d93b4186074c

mentre da JMeter assomiglia a questo:

-----------------------------7d159c1302d0y0
Content-Disposition: form-data; name="field_name"
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

test
-----------------------------7d159c1302d0y0

Quindi, apparentemente Rails vede l'ex e lo interpreta come un valore testo normale e lo tratta come una stringa, ma vede quest'ultimo e lo salva in un file temporaneo.

Non sono stato in grado di trovare un ambiente di convincere JMeter non inviare le intestazioni aggiuntive sotto forma multipart per i campi non di file.

C'è un modo per convincere Rails di ignorare queste intestazioni e trattare il testo / testo normale come stringhe invece di file di testo? O un modo rapido per mettere un filtro di fronte al mio controller che metterà a nudo le intestazioni in più?

In alternativa, c'è uno strumento migliore per caricare-test un'applicazione Rails che comprende caricare un file?

È stato utile?

Soluzione 3

Ci può essere un modo migliore, ma ho finito per l'aggiunta di un filtro rapido per trasformare il testo / file temporanei in pianura stringhe all'interno del parametro hash:

  def change_text_files_to_strings
    params.each_pair do |key, value|
      params[key] = value.read if (value.class.to_s=='Tempfile' && value.content_type.start_with?('text/plain') )
    end
  end

Tra l'altro, si scopre che jmeter è corretto qui, e rotaie non corretta: secondo RFC 2388, ogni elemento in una richiesta più parti dovrebbe avere un tipo di contenuto (non solo file), quindi Rails in realtà non dovrebbe essere utilizzando la presenza di un header Content-type per determinare se si tratta di un file. Ah bene.

Altri suggerimenti

Risulta in questi giorni si può semplicemente spuntare "headers uso del browser compatibili" in JMeter. Potrebbe aver salvato me un inferno di un sacco di tempo lì: -)

multipart parte richiesta inviando

Così, ho personalizzato di JMeter nel codice sorgente per spegnere la richiesta che Rails capire. Il cambiamento è facile come mostrato di seguito, ma per creare la compilazione ambiente Java / JMeter preso tempo. : (

In ogni modo, ora posso caricare correttamente un file per posta multipart tramite JMeter.


in src / protocollo / http / org / apache / jmeter / protocollo / http / campionatore / PostWriter.java

writeStartFileMultipart()
//writeln(out, "Content-Transfer-Encoding: binary"); // $NON-NLS-1$

writeFormMultipart()
/*****
writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$
writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$
*****/

P.S.

Un suggerimento suggerimento per creare l'ambiente di sviluppo per la 2.4 è

  1. per commentare le librerie 3a parte il check-in file build.xml.

  2. Copia lib / XStream-1.3.1.jar dall'archivio binario in lib /

Ho usato anche la soluzione di cui sopra come ColdFusion stava inviando intestazioni simili (meno il Content-Transfer-Encoding) con ogni pezzo di dati del modulo. Mi chiedo se c'è un modo migliore.

EDIT: Qualcuno sa se questo è stato risolto in Rails 3

Che tipo di errore si ottiene? Qualcosa di simile

NoMethodError (undefined method `rewind' for "1":String):

C'è un problema con il rack che potrebbe spiegare il problema. Vedere https://github.com/rack/rack/issuesearch? state = aperta & q = riavvolgere # edizione / 116

Abbiamo anche avendo un problema simile, In aggiunta alle risposte di cui sopra abbiamo anche correlare il X-CSRF-Token di HTTP Header Dirigente tale richiesta e sono stati successo in grado di caricare il supporto richiesto quanti volte che volevamo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top