Project

General

Profile

Développement #98870

testdef, stocker les demandes dans une table séparée

Added by Valentin Deniaud 2 months ago. Updated 9 days ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
21 November 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Depuis #95255 les tests créent de vraies demandes. Mais, cf les commentaires de Pierre dans le ticket, ça a un impact négatif sur les perfs.

De plus ça incrémente les ids des demandes, donc on peut se retrouver avec de grands sauts entre deux numéros de demandes réelles consécutives.

Il faut essayer une autre approche : avoir une table séparée pour les demandes de test. Point d'incertitude, ça revient à peu près à doubler le nombre de tables sur chaque tenant.

Associated revisions

Revision 2ea140f1 (diff)
Added by Valentin Deniaud 9 days ago

admin: refactor some test views (#98870)

Revision 9466e7e0 (diff)
Added by Valentin Deniaud 9 days ago

sql: use separate table to hold test formdata (#98870)

Revision 5428db48 (diff)
Added by Valentin Deniaud 9 days ago

sql: migrate test formdata to separate table (#98870)

Revision 11b1e331 (diff)
Added by Valentin Deniaud 9 days ago

sql: add new table to hold test formdata workflow traces (#98870)

History

#1

Updated by Benjamin Dauvergne about 1 month ago

Ce serait bien de faire un récap sur ce qu'à apporter #95255 (donc le passage si je comprends d'une sérialisation en JSON des formdata? carddata? dans l'objet qui stocke l'exécution du test vers un stockage dans les tables normales stockant les demande, ne pas hésiter à modifier ma prose si ce n'est pas une bonne decription du changement) pour voir d'où on vient et où on va.

Je propose deux autres pistes:
  • tout stocker dans une autre table (mais donc si le changement #95255 visait à éviter trop de changement partout ben ce sera raté)
  • faire tourner les tests dans une transaction, qu'on rollback avant sa fin, comme pytest-django avec l'ORM django (mais ça n'enlèvera pas l'incrémentation des séquences qui n'est pas protégée par les transactions)
#2

Updated by Valentin Deniaud about 1 month ago

Benjamin Dauvergne a écrit :

Ce serait bien de faire un récap sur ce qu'à apporter #95255 (donc le passage si je comprends d'une sérialisation en JSON des formdata? carddata? dans l'objet qui stocke l'exécution du test vers un stockage dans les tables normales stockant les demande, ne pas hésiter à modifier ma prose si ce n'est pas une bonne decription du changement) pour voir d'où on vient et où on va.

Oui tu comprends bien, ça a apporté :
  • Simplification du code, plus besoin de serialiser et surtout deserialiser (le code a pas encore été retiré pour maintenir une compatibilité mais il faudrait (d'ailleurs la deserialisation était incomplète, on a rien pour transformer le JSON des evolutions en objets evolution))
  • Possibilité de tester la création d'une demande simplement, avec un inspect du résultat qui fonctionne (https://git.entrouvert.org/entrouvert/wcs/commit/9f8e7db82ff8cb3505d30e2defc644e9825bb8ef)
  • Pareil pour la dépendance entre les tests, ça aurait été je pense nettement plus compliqué avec de faux objets

J'ai un peu philosophé sur le sujet ici #92388-2.

Je propose deux autres pistes:
  • tout stocker dans une autre table (mais donc si le changement #95255 visait à éviter trop de changement partout ben ce sera raté)

Je ne comprends pas cette piste mais oui plus le chemin des tests divergera du chemin réel moins tout ça marchera.

  • faire tourner les tests dans une transaction, qu'on rollback avant sa fin, comme pytest-django avec l'ORM django (mais ça n'enlèvera pas l'incrémentation des séquences qui n'est pas protégée par les transactions)

Ici on part du principe que l'incrémentation est un problème, sinon on pourrait juste changer les index pour que postgres soit content (c'est ce que je comprends de ce que dit Pierre).

#3

Updated by Valentin Deniaud about 1 month ago

Qu'est-ce qui ne va pas à avoir deux tables par formdata ? Pierre semblait dire que c'était OK.

#4

Updated by Benjamin Dauvergne about 1 month ago

Valentin Deniaud a écrit :

Qu'est-ce qui ne va pas à avoir deux tables par formdata ? Pierre semblait dire que c'était OK.

Si ça n'est pas nécessaire je ne vois pas de raison de le faire; j'ai l'impression qu'on pourrait s'en sortir simplement en dupliquant le formdata formdef avant de lancer les tests puis en le supprimant. Non ?

#5

Updated by Valentin Deniaud about 1 month ago

Benjamin Dauvergne a écrit :

Si ça n'est pas nécessaire je ne vois pas de raison de le faire; j'ai l'impression qu'on pourrait s'en sortir simplement en dupliquant le formdata avant de lancer les tests puis en le supprimant. Non ?

Non à la fin du test le formdata ne doit pas être supprimé, il doit rester attaché au résultat, ce qui permet ensuite d'accéder à l'inspecteur, nécessaire pour débugger un test planté.

(un exemple pour comprendre comment ça fonctionne en vrai, notre appli congés https://formulaires-www.entrouvert.com/backoffice/forms/32/)

#6

Updated by Benjamin Dauvergne about 1 month ago

Je voulais dire formdef plus haut pas formdata; m'est avis que doublon de table ou pas il faudra un formdef alternatif de toute façon à un moment donné. J'arrête d'intervenir, on verra sur pièce.

#7

Updated by Robot Gitea about 1 month ago

  • Status changed from Nouveau to En cours

Valentin Deniaud (vdeniaud) a ouvert une pull request sur Gitea concernant cette demande :

#8

Updated by Robot Gitea about 1 month ago

  • Status changed from En cours to Solution proposée
#9

Updated by Robot Gitea about 1 month ago

Valentin Deniaud (vdeniaud) a demandé une relecture de Frédéric Péters (fpeters) sur une pull request sur Gitea concernant cette demande :

#10

Updated by Robot Gitea about 1 month ago

  • Status changed from Solution proposée to Solution validée

Frédéric Péters (fpeters) a approuvé une pull request sur Gitea concernant cette demande :

#11

Updated by Robot Gitea about 1 month ago

  • Status changed from Solution validée to En cours

Valentin Deniaud (vdeniaud) a commencé à travailler sur une pull request sur Gitea concernant cette demande :

#12

Updated by Robot Gitea about 1 month ago

  • Status changed from En cours to Solution proposée

Valentin Deniaud (vdeniaud) a demandé une relecture de Frédéric Péters (fpeters) sur une pull request sur Gitea concernant cette demande :

#13

Updated by Robot Gitea 13 days ago

  • Status changed from Solution proposée to Solution validée

Frédéric Péters (fpeters) a approuvé une pull request sur Gitea concernant cette demande :

#14

Updated by Robot Gitea 9 days ago

  • Status changed from Solution validée to Résolu (à déployer)

Valentin Deniaud (vdeniaud) a mergé une pull request sur Gitea concernant cette demande :

#15

Updated by Transition automatique 9 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF