2009-12-22 61 views
1

我想使用JMeter加載測試Rails應用程序。應用程序的關鍵部分涉及一個包含文本輸入和文件上傳的表單。它可以在瀏覽器中正常工作,但是當我嘗試在JMeter中發佈該頁面時,Rails將多部分表單的所有部分都保存爲臨時文件,這會在查找字符串並導致臨時文件時導致事件中斷。負載測試多部分形式

看來,所不同的是,從一個瀏覽器,該件包含文本輸入多部分請求的看起來像這樣:

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

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

而從JMeter的它看起來像這樣:

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

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

顯然,Rails看到前者並將其解釋爲純文本值,並將其視爲字符串,但將後者視爲後者並將其保存爲臨時文件。

我一直無法找到一個設置來說服JMeter不要在多部分窗體中爲非文件字段發送額外的標頭。

有沒有一種方法說服Rails忽略這些標題並將文本/純文本視爲字符串而不是文本文件?或者在我的控制器前放置一個過濾器的快捷方式,可以去除額外的頭部?

另外,是否有更好的工具來加載測試包含文件上傳的Rails應用程序?

回答

0

有可能是一個更好的辦法,但我最終加入一個快速過濾器打開text/plain的臨時文件轉換成字符串參數哈希中:

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 

順便說,事實證明,JMeter是在這裏更正,導軌不正確:根據RFC 2388,多部分請求中的每個項目都應該具有內容類型(不僅僅是文件),所以Rails確實不應該使用內容類型頭部的存在來確定它是否是文件。呃,好吧。

0

我還使用了上面的解決方案,因爲ColdFusion發送類似的頭文件(減去Content-Transfer-Encoding)與每條表單數據。我想知道是否有更好的方法。

編輯:任何人都知道這是否已在Rails 3中修復?

1

因此,我已經在源代碼中定製了JMeter的多部分請求發佈部分,以提出軌道理解的請求。改變很簡單,如下所示,但創建編譯Java/JMeter環境需要花費時間。 :(

不管怎麼說,現在我可以上傳成功通過多交一個文件可以通過JMeter。


在SRC /協議

/HTTP /組織/阿帕奇/ JMeter的/協議/ HTTP /採樣/ 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$ 
*****/ 

PS

尖端尖端2創建構建環境。4是

  1. 註釋掉第三方庫檢查build.xml文件。

+0

不是開源的太棒了! – 2010-10-18 19:30:11

0

你什麼樣的錯誤

  • 複製的lib/XStream的-1.3.1.jar從二進制歸檔到lib /目錄?類似於

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

    Rack有問題可以解釋您的問題。請參閱https://github.com/rack/rack/issuesearch?state=open&q=rewind#issue/116

  • +0

    謝謝,但這實際上看起來像是相反的問題:在Rack問題中它應該有一個Tempfile時有一個字符串,但我的問題是我認爲應該是字符串(簡單表單字段值)的東西顯示作爲臨時文件。 – 2011-02-14 21:03:38

    2

    現在您可以在JMeter中勾選「使用瀏覽器兼容標題」。可能已經保存自己很多的時候有地獄:-)

    0

    我們也都具有類似的問題,除了上面的答案,我們也該請求相關的HTTP頭Manager的X-CSRF-Token並且是 成功能夠根據需要多次上傳所需的媒體。