Testen einer Flask-Wtforms-App, die CSRF Token (PyTest) verwendetPython

Python-Programme
Anonymous
 Testen einer Flask-Wtforms-App, die CSRF Token (PyTest) verwendet

Post by Anonymous »

Ich habe eine Flask -App, die auf dem Tutorial hier basiert https://flask.palletsprojects.com/en/stable/tutorial/. Das Tutorial wird mit einer Testsuite geliefert, aber die App angepasst, um WTForms zu verwenden, um die Tests zu verwenden, bei denen die Datenversorgungsdaten nicht mehr funktionieren. Ich kann sehen, dass keiner der Formen bestätigt, da sie kein CSRF -Token enthält. Wie kann ich das Token zu den gesendeten Postdaten hinzufügen? Ich bin auf diesen ziemlich alten Wild gestoßen, das zeigt, wie es geht, aber es scheint veraltet für die Version von Werkzug, die ich verwende, da es sich auf das Selbst bezieht. /gist.github.com/singingwolfboy/2fca1de64950d5dfed72.
Ich verwende Flask == 3.1.0
flask_wtf==1.2.2
PYTEST==8.3.4
SELENIUM==4.29.0
WERKZUGE==.1.1.3
WtForms == 3.2.1
tests/conftest.py

Code: Select all

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

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post