2011-10-23 1 views
0

Я пытаюсь проверить функциональность веб-приложения с помощью FunkLoad.Тестирование публикации в формах в FunkLoad

Страница под тестированием - это только форма входа в систему - укажите адрес электронной почты и pwd, и в случае успеха перенаправляет на индексную страницу; если не удастся, это вызывает ошибку.

У меня есть следующий код:

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

ли действительный электронный идентификатор/пароль или неправильно один, тест бросает 200 в качестве кода возврата и остается в одной и той же странице входа.

Как проверить проводку в формах с помощью FunkLoad?

(Кстати, когда я тестировал эту веб-страницу с механизировать сценарий, я мог бы войти в систему, а затем направляется на нужную страницу индекса)

Спасибо

+0

могли бы вы опубликовать полную форму, чтобы увидеть, если есть что-то еще нужно добавить к Params POST? – ashwoods

+0

Благодарим вас за подробный код. Я отправил по электронной почте автора и выяснил, что должны быть включены даже скрытые поля. Он работает после включения скрытых полей. – jjude

ответ

2

Настройте funkload прокси-рекордером и войти в свой сайт используя ваш браузер, как описано в документах funkload: http://funkload.nuxeo.org/recorder.html

Тогда вы легко сможете проверить, что именно вы отправляете через POST. Возможно, вы отправляете другие параметры, как вы думаете. В следующем примере я тестирую логин django, который использует crsfmiddleware, а также имеет параметр 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». Выньте назад, и все получилось отлично. –