Тестирование приложения Flask-Wtforms, которое использует токен CSRF (Pytest)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Тестирование приложения Flask-Wtforms, которое использует токен CSRF (Pytest)

Сообщение Anonymous »

У меня есть приложение Flask на основе учебника здесь https://flask.palletsprojects.com/en/stable/tutorial/. Учебное пособие поставляется с тестовым набором, но с адаптацией приложения для использования WTForms тесты, которые публикуют данные формы, перестали работать. Я вижу, что это потому, что ни одна из форм не подтверждает, поскольку они не включают токен CSRF. Как я могу добавить токен в отправляемые данные по сообщениям? Я наткнулся на эту довольно старую суть, показывающую, как это сделать, но, кажется, устарела для версии Werkzeug, которую я использую, поскольку она относится к Self.cookie_jar , которая была удалена - https:/ /gist.github.com/singingwolfboy/2fca1de64950d5dfed72.
Я использую Flask == 3.1.0
flask_wtf==1.2.2
pytest==8.3.4
selenium==4.29.0
werkzeug==3.1.3
wtforms==3.2.1
tests/conftest.py
import os
import tempfile

import pytest
from flaskr import create_app
from flaskr.db import get_db, init_db

with open(os.path.join(os.path.dirname(__file__), 'data.sql'), 'rb') as f:
_data_sql = f.read().decode('utf8')

@pytest.fixture
def app():
db_fd, db_path = tempfile.mkstemp()

app = create_app({
'TESTING': True,
'DATABASE': db_path,
})

with app.app_context():
init_db()
get_db().executescript(_data_sql)

yield app

os.close(db_fd)
os.unlink(db_path)

@pytest.fixture
def client(app):
return app.test_client()

@pytest.fixture
def runner(app):
return app.test_cli_runner()

tests/test_auth.py
import pytest
from flask import g, session
from flaskr.db import get_db

def test_register(client, app):
assert client.get('/auth/register').status_code == 200
response = client.post_csrf(
'/auth/register', data={'username': 'a', 'password': 'a'}
, follow_redirects=True)
print(f'{response.status=}')
print(f'{response.response=}')
for x in response.response:
print(x)
assert response.headers["Location"] == "/auth/login"

with app.app_context():
assert get_db().execute(
"SELECT * FROM user WHERE username = 'a'",
).fetchone() is not None


Подробнее здесь: https://stackoverflow.com/questions/794 ... ken-pytest
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Тестирование приложения Flask-Wtforms, которое использует токен CSRF (Pytest)
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Получение ошибки «Неверный токен CSRF», даже если CSRF отключен
    Гость » » в форуме JAVA
    0 Ответы
    92 Просмотры
    Последнее сообщение Гость
  • Токен CSRF, вмешиваясь в TDD - есть ли переменная, которая хранит выход CSRF?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Приложение Flask WTForms создает файл для загрузки. Пользователи получают чужой файл (то же имя). Как исправить?
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как предварительно заполнить флажки с помощью Flask/WTForms
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»