Тестирование публикации форм в FunkLoad - PullRequest
0 голосов
/ 23 октября 2011

Я пытаюсь проверить работоспособность веб-приложения с помощью FunkLoad.

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

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

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

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

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

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

Спасибо

1 Ответ

2 голосов
/ 28 октября 2011

Установите прокси-рекордер 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>
...