2011-06-16 52 views
1

我無法設置funkload與Cookie一起使用。我打開fl-record並執行一系列請求,每個請求都發送一個cookie。如果我在不提供文件夾路徑的情況下使用該命令,則輸出將以TCPWatch-Proxy格式存儲,並且我可以看到所有Cookie的內容,因此我知道它們已發送。Funkload和cookies

例如,這是watch0003.request內容:

GET http://mydomainnamehere.pl/api/world/me/ HTTP/1.1 
Host: mydomainnamehere.pl 
Proxy-Connection: keep-alive 
Referer: http://mydomainnamehere.pl/test/engine/ 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.57 Safari/534.24 
Accept: */* 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: pl,en-US;q=0.8,en;q=0.6,fr-FR;q=0.4,fr;q=0.2 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: Beacon-ClientID=<<<some-beaconpush-id-here>>>; sessionid=<<<some-session-id>>>; fbs_<<<some-facebook-id>>>="access_token=<<<some-access-token>>>&expires=1308254400&secret=<<<some-secret>>>&session_key=<<<some-session-key>>>&sig=<<<some-signature>>>&uid=<<<some-user-id>>>"; Beacon-Preferred-Client=WebSocket 

但是,如果我跑fl-record與測試案例的名稱,這樣做爲了funkload存儲輸出爲Python測試,所有的餅乾被省略。沒有在一行代碼,將有什麼與他們:

import unittest 
from funkload.FunkLoadTestCase import FunkLoadTestCase 
from webunit.utility import Upload 
from funkload.utils import Data 
#from funkload.utils import xmlrpc_get_credential 

class Simple(FunkLoadTestCase): 

    def setUp(self): 
     """Setting up test.""" 
     self.logd("setUp") 
     self.server_url = self.conf_get('main', 'url') 
     # XXX here you can setup the credential access like this 
     # credential_host = self.conf_get('credential', 'host') 
     # credential_port = self.conf_getInt('credential', 'port') 
     # self.login, self.password = xmlrpc_get_credential(credential_host, 
     #             credential_port, 
     # XXX replace with a valid group 
     #             'members') 

    def test_simple(self): 
     # The description should be set in the configuration file 
     server_url = self.server_url 
     # begin of test --------------------------------------------- 

     ... 

     # /tmp/tmp5Nv5lW_funkload/watch0003.request 
     self.get(server_url + "/api/world/me/", 
       description="Get /api/world/me/") 

     ... 

     # end of test ----------------------------------------------- 

    def tearDown(self): 
     """Setting up test.""" 
     self.logd("tearDown.\n") 

if __name__ in ('main', '__main__'): 
    unittest.main() 

還有一個配置文件,但沒有關於cookies有兩種。

另一方面,文檔指出fl(Cookie支持)。我還發現了以前版本中有關Cookie支持的一些錯誤修正,因此我可以認爲這不僅僅是一個空的聲明。我還在其中一個更新日誌中發現了一個觀點,即在輸出中不包含「已刪除的Cookie」。這讓我想知道,問題可能在於記錄的cookies被標記爲刪除,或者通過從TCP-Watch格式轉換爲實際的測試用例時被識別爲這樣。然而,這只是一個瘋狂的猜測。

我想知道:

  • 如果你曾經有過成功的支持funkload的餅乾。如果是這樣,你使用的是哪個版本。
  • 您對Funkload的一般體驗以及它是否值得在更復雜的設置中使用。

編輯

顯然有些由TCPWatch記錄的請求都被完全忽略,並且不包括在輸出測試案例。任何人都知道爲什麼會這樣做?它與重定向有什麼關係?

EDIT(2)

好,它的作用。這一件事實際上是有道理的。它遺漏了重定向的結果,因爲這些將通過簡單地遵循HTTP 302 Found而生成。然而,cookies的問題仍然沒有解釋。

回答

0

我在Funkload中發現了一個錯誤。 Funkload不能正確處理帶有'。'的cookie。在域中。目前,所有的cookie都被默默忽略。

檢查這個分支:https://github.com/sbook/FunkLoad

我已經發送拉請求:https://github.com/nuxeo/FunkLoad/pull/32

+0

不幸的是我完全停止使用Funkload。我也從它的創作者那裏聽說,我遇到的行爲其實是有意的。基本原理或多或少是預計cookie會在測試周期內重新創建 - 因此簽名操作必須是每個測試用例的一部分。也就是說,可能還有其他一些我沒遇到過的bug。 – julkiewicz 2011-09-07 01:17:52

+0

你能詳細說明你切換到了什麼嗎?我目前正在設置Funkload,並且很想知道是否有很好的選擇。 – yayitswei 2011-10-12 10:23:18

1

我看到這個老帖子沒有回答,所以我想我可以張貼:

在Python: 確定您要發送的cookie的名稱。我的標題是'csrftoken',後面跟'csrfmiddlewaretoken'>相同,我得到了cookie的值,然後通過相同的郵件進行身份驗證。例如:

res = self.get (server_url + '/login/', description = 'Get url').cookies.itervalues ().next () 
    morsel_str = res [ '/' ] [ 'csrftoken' ] 
    csrftoken = morsel_str.value 
    # Once Cookie found include it in params 
    params = [ 
     [ 'csrfmiddlewaretoken', csrftoken ], 
     [ 'username', 'username..' ], 
     [ 'password', '********' ] ] 
    self.setHeader ('cookie', 'csrftoken={0}'.format (csrftoken)) 
    resp = self.post (server_url + '/login/', params, description = "Post /login/")