Получение файлов cookie из отправки формы и их использование с веб-тестом

Итак, я пытаюсь выполнить несколько тестов с библиотекой веб-тестов, проблема в том, что на моем сайте есть контроль доступа, который требует входа пользователя в систему. Кажется, что сообщение формы прошло успешно, но в результате нет файлов cookie (по крайней мере, которые я мог найти), а cookiejar пуст после входа в систему.

Испытательная установка:

class TestMyViewSuccessCondition(unittest.TestCase):

    def setUp(self):
        self.config = testing.setUp()

        from myapp import main

        settings = {'sqlalchemy.url': postgresqlURL}
        app = main({}, **settings)
        from webtest import TestApp

        self.testapp = TestApp(app, cookiejar=CookieJar())

Контрольная работа:

    page = self.testapp.get('/login', status=200)

    self.assertIn('Please login', page)

    form = page.forms['loginForm']
    form['username'] = 'user'
    form['password'] = 'userpw'

    result = form.submit(status=200)

    # self.testapp.cookies is empty dictionary at this point
    # it fails here, login page is shown again
    page = self.testapp.get('/home', status=200)

результат возвращает 200 OK, и HTML-содержимое страницы входа после отправки формы, но перенаправление не происходит, это проблема? или это работает как задумано? Перед любым контролем доступа другие формы работали нормально. Файлы cookie будут меняться каждый раз, когда пользователь нажимает на ссылку или перезагружает страницу. Я использую файлы cookie сеанса. Я попытался установить небезопасный флаг для файлов cookie.

и последний возврат моего входа в систему:

if 'form.submitted' in request.POST:
# do stuff
    return HTTPFound(location=request.route_url('home'))

Я бы использовал обычный модульный тест, но поскольку модуль модульного теста теряет свои орешки, когда представление пытается выполнить перенаправление, кто-то предложил библиотеку веб-тестирования.


person Miro K.    schedule 16.06.2016    source источник


Ответы (1)


Проблема заключалась в том, что form.submit() на самом деле не имитировал мой основной вариант использования, когда пользователь нажимает кнопку отправки. В обычном случае браузер добавляет имя пользователя, пароль и ('form.submitted', '') рядом с request.POST. Но form.submit() добавляет только имя пользователя и пароль, и только те, которые определены в форме, поэтому я не мог определить свои собственные значения для запроса. (по крайней мере я не понял как)

Проблема была решена в представлении входа в систему. изменив if 'form.submitted' in request.POST: -> if 'username' in request.POST and 'password' in request.POST:

Файлы cookie работают нормально, как показано выше, вход в систему не поддерживает мой тест.

person Miro K.    schedule 17.06.2016