2011-10-23 43 views
0

我正在尝试使用FunkLoad测试Web应用程序的功能。在FunkLoad中测试发布到表单

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

我有下面的代码:

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

self.logd(self.getBody()) 

无论是一个有效的电子邮件ID /密码或错误的,测试抛出一个200作为返回代码,并停留在同一个登录页面。

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

(顺便说一句,当我测试了这个网页与机械化剧本,我可以登入,然后路由到正确的索引页)

谢谢

+0

你可以发布完整的表格,看看是否有你要添加到post数据别的东西? – ashwoods

+0

感谢您提供详细的代码。我通过电子邮件发送作者,发现即使隐藏字段也应该包括在内。它包含隐藏的字段后工作。 – jjude

回答

2

设置的funkload代理记录和登录到您的网站使用浏览器作为funkload文档描述:http://funkload.nuxeo.org/recorder.html

那么你很容易地检查你是通过邮寄什么。按照您的想法,您可能会发送其他参数。在下面的例子中,我测试了一个使用crsfmiddleware的django登录,并且还有一个redirect_to参数,因此如果登录成功,服务器知道重定向到哪里。该测试并不真的使用的形式,它只是发送如果有人做了浏览器会发送什么。如果你想测试真正的表单功能,最好的方法是使用像硒这样的东西。

我不得不手动提取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> 
+0

我还必须更改实际的“csrfmiddlewaretoken”字符串...我的是“\ r \ r \ ncsrfmiddlewaretoken”。拿出前面的回报,它工作得很好。 –