2011-10-23 50 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」。拿出前面的回報,它工作得很好。 –