测试发布到FunkLoad中的表单

时间:2011-10-23 11:57:10

标签: python testing functional-testing funkload

我正在尝试使用FunkLoad测试网络应用程序的功能。

正在测试的页面只是一个登录表单 - 给出电子邮件和密码,如果成功,它会重定向到索引页面;如果不成功则会抛出错误。

我有以下代码:

self.get(server_url + "/login", description="Get /init/default/login")
params=[['email', 'xxxx@gmail.com'],
        ['password', 'xxxxx'],
        ['_formname','login'],
        ]
ret=self.post('%s/login' % server_url,
          params=params,
          description="Testing login functionality")

self.logd(self.getBody())

无论是有效的电子邮件ID / pwd还是错误的电子邮件,测试都会抛出200作为返回码,并保留在同一个登录页面中。

如何使用FunkLoad测试表单中的发布?

(顺便说一句,当我用机械化脚本测试这个网页时,我可以登录然后路由到正确的索引页面)

谢谢

1 个答案:

答案 0 :(得分:2)

设置funkload代理记录器并使用浏览器登录您的网站,如funkload文档中所述:http://funkload.nuxeo.org/recorder.html

然后,您可以轻松检查您通过POST发送的内容。您可能正在考虑发送其他参数。在下面的示例中,我正在测试使用crsfmiddleware的django登录,并且还有一个redirect_to参数,因此如果登录成功,服务器将知道重定向到哪里。测试并不真正使用表单,它只是发送浏览器发送的内容,如果有人这样做的话。如果您想测试真实的表单功能,最好的方法是使用像selenium这样的东西。

我必须添加以手动提取crsftoken,因为它随每个请求而变化,并且断言检查它是否没有返回到登录页面,但除此之外,此测试就像为我自动生成的记录器:

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

    # /tmp/tmpMFahey_funkload/watch0001.request
    self.get(server_url + "/",
        description="Get /")
    # /tmp/tmpMFahey_funkload/watch0002.request
    reply = self.get(server_url + "/company/config/dashboard/",
        description="Get /company/config/dashboard/")

    csrftoken = extract_token(self.getBody(), "name='csrfmiddlewaretoken' value='", "' />")
    # /tmp/tmpMFahey_funkload/watch0005.request
    self.post(server_url + "/accounts/manager/login/?next=/company/config/dashboard/", params=[
        ['csrfmiddlewaretoken', csrftoken],
        ['redirect_to', '/company/config/dashboard/'],
        ['email', 'user'],
        ['password', '****']],
        description="Post /accounts/manager/login/")

    self.assert_("login" not in self.getLastUrl(), "Error in login")

    # /tmp/tmpMFahey_funkload/watch0008.request
    self.get(server_url + "/accounts/manager/logout/",
        description="Get /accounts/manager/logout/")

这适用于以下形式:

<form method="post" action="">
<input type='hidden' name='csrfmiddlewaretoken' value='bb7d67ced4a2c6ee44eba811d44c936d' />
<input type="hidden" name="redirect_to" value="/company/config/dashboard/" id="id_redirect_to" />
<input id="id_email" type="text" class="formtxt fom_size1" name="email" maxlength="100" />
<input id="id_password" type="password" class="formtxt fom_size1" name="password" />
<button class="formbtn" type="submit">Validate</button>