Функциональное тестирование приложения 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")
должно сработать).