python - Funkload 和 cookie

标签 python django load-testing funkload

我在设置 funkload 以便与 cookie 良好配合时遇到问题。我打开 fl-record 并执行一系列请求,其中每个请求都发送一个 cookie。如果我使用该命令而不提供文件夹路径,则输出将以 TCPWatch-Proxy 格式存储,并且我可以看到所有 cookie 的内容,因此我知道它们已发送。

例如,这是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 测试,则所有 Cookie 都会被省略。代码中没有一行与它们有任何关系:

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()

还有一个配置文件,但也没有关于 cookie 的内容。

另一方面,文档指出 fl 有(Cookie 支持)。我还在之前的版本中发现了一些有关 Cookie 支持的错误修复,因此我可以假设这不仅仅是一个空语句。我还在其中一个更改日志中发现了一点,指出输出中不包含“已删除的 cookie”。这让我想知道,也许问题在于,记录的 cookie 被标记为删除,或者在从 TCP-Watch 格式转换为实际测试用例时被 fl 识别为此类。然而,这只是一个疯狂的猜测。

我想知道:

  • 如果您曾经在 cookie 的 funkload 支持方面取得过成功。如果是这样,您使用的是哪个版本。
  • 您使用 funkload 的一般经验以及它是否值得在更复杂的设置中使用。

编辑

显然,TCPWatch 记录的一些请求被完全忽略,并且不包含在输出测试用例中。有人知道为什么要这样做吗?和重定向有什么关系吗?

编辑(2)

好的,确实如此。这件事其实是有道理的。它忽略了重定向的结果,因为这些结果将通过简单地遵循 HTTP 302 Found 生成。然而 cookie 的问题仍然无法解释。

最佳答案

我看到这个旧帖子没有得到答复,所以我想我可以发帖:

在Python中: 识别您发送的 cookie 的名称。我的是标题中的“csrftoken”,帖子中的“csrfmiddlewaretoken”与“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/" )

关于python - Funkload 和 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377535/

相关文章:

python - 用户输入列表,然后将数字相加计算ISBN校验位

python - 使用 Qsettings 恢复 QCheckBox

python - 在 Google App Engine 上运行 Python37 时出现问题

html - 为什么我的 Django 应用程序返回空白页

java - JMeter 与 Java Swing 应用程序

java - JMeter 中的网站 URL 正在重定向并且未加载测试 URL

python - 删除两个数据框之间不常见的列?

python - 如何在 Numpy 中有效地将二维数组中的每个元素乘以一维数组?

jquery - 在 Django 中获取 POST 值

azure - Azure 上的负载测试