2011-06-16 50 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/")