Функциональное тестирование приложения Flask: Weird Twill Traceback

Я тестирую свое приложение Flask.

Итак, вот мой вопрос (ы):

1) Мое окончательное утверждение URL в блоке кода ниже не удается. По словам Твилла, он терпит неудачу, потому что фактическим URL является "/ auth / login". Другими словами, пользователь НЕ был перенаправлен на защищенную страницу администратора. Зачем?

2) Как я могу включить аргумент запроса "/? Next='admin'" в моем утверждении URL? Другими словами, есть ли способ - с помощью Twill или с помощью Pythonic - проверить правильность разрешения следующего аргумента?

3) В функциональном тестировании есть ли другой способ показать, что перенаправление работает, кроме утверждения кода состояния 301?

Вот часть моего сценария, связанная с Twill...

   t.browser.go(t.url("/ авт / Логин /? следующая =%2Fadmin%2F"))
   URL ("/ авт / Войти /? следующая =% 2Fadmin% 2F")

Вот результат трассировки:

   TwillAssertionError: текущим URL является 'http://127.0.0.1:5000/auth/login/?next=%2Fadmin%2F';
не соответствует '/auth/login/?next=%2Fadmin%2F'

ПРИМЕЧАНИЕ. Как ни странно, утверждение кода состояния 200 после команды "go" не возвращает никакой ошибки. Я хотел бы показать, что после входа в вышеупомянутый URL, последний URL действительно является страницей администратора. Вот так...

Тест, который я хотел бы выполнить без сбоев, но не могу...

def test_redirect_via_url (self):        
        с Twill(self.app, port=8080) в качестве t:

            #: перейти на страницу администратора перед входом...
            t.browser.go(t.url("/ администратора"))

            #: утвердить адрес администратора, перенаправленный на адрес входа
            URL ('/ авт / Логин')

            #: Вышеприведенное утверждение работает, но...
            #: почему я не могу утвердить этот URL... следующий аргумент...?
            #: "/auth/login/?next=%2Fadmin%2F"
            #: это то, что на самом деле появляется в адресной строке браузера

            #: В любом случае, по ссылке '/ auth / login', давайте войдем
            fv("1", "username", "test")
            fv("1", "пароль", "welcome1")
            Отправить()

            #: Теперь я хочу показать, что мое приложение перенаправляет на защищенную страницу администратора...
            #: у которого должен быть URL localhost / admin
            URL ('/ админ')

            #: Вышеприведенное утверждение URL не выполняется. Фактический URL после отправки по-прежнему '/ auth / login'

1 ответ

Решение

Причина в том, что twill.commands.url утверждает, что переданный им URL-адрес совпадает с URL-адресом браузера, преобразовав его в регулярное выражение и сопоставив его с ним. Это приводит к /auth/login/?next=%2Fadmin%2F переводится на:

/auth/login       # Match this literal string
/?                # followed by zero or one slash
next=%2Fadmin%2F  # followed by this literal string

Что означает, что это будет соответствовать /auth/login/next=%2Fadmin%2F или же /auth/loginnext=%2Fadmin%2F но нет /auth/login/?next=%2Fadmin%2F, Обходной путь - избежать знака вопроса (url(r"/auth/login/\?next=%2Fadmin%2F") должно сработать).

Другие вопросы по тегам