Development #67911
paralléliser les tests via tox -p
0%
Description
C'était déjà très lent, et avec l'arrivée de django 3 et la nécessité de tester en parallèle sur deux version de django, c'est encore pire.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par A. Berriot il y a plus d'un an
- Lié à Development #67760: fonctionner avec django 3.2 ajouté
Mis à jour par A. Berriot il y a plus d'un an
- Fichier 0001-Parallelize-tests-in-CI-67911.patch 0001-Parallelize-tests-in-CI-67911.patch ajouté
- Tracker changé de Support à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par A. Berriot il y a plus d'un an
- Assigné à changé de A. Berriot à Benjamin Dauvergne
Division du temps d'exécution par 3, on passe de 20 à 6 minutes.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Ok, j'aurai préféré qu'on conserver une partie du dbname, comme dans wcs_olap.feeder.truncate_pg_identifier :
def truncate_pg_identifier(identifier, hash_length=6, force_hash=False): if len(identifier) < 64 and not force_hash: return identifier else: # insert hash in the middle, to keep some readability return ( identifier[:(63 - hash_length) // 2] + hashlib.md5(identifier.encode('utf-8')).hexdigest()[:hash_length] + identifier[-(63 - hash_length) // 2:])
Mis à jour par A. Berriot il y a plus d'un an
- Fichier 0001-Parallelize-tests-in-CI-67911.patch 0001-Parallelize-tests-in-CI-67911.patch ajouté
- Fichier 0002-Speed-up-authentic-provisionning-tests.patch 0002-Speed-up-authentic-provisionning-tests.patch ajouté
- Statut changé de Solution validée à Solution proposée
Mis à jour par A. Berriot il y a plus d'un an
Benjamin Dauvergne a écrit :
Ok, j'aurai préféré qu'on conserver une partie du dbname, comme dans wcs_olap.feeder.truncate_pg_identifier :
[...]
J'aurais préféré aussi, mais je n'ai pas réussi à trouver une façon de faire ça correctement dans le code. J'ai l'impression que le dbname tel qu'utilisé dans les settings n'est pas vraiment le dbname final. D'après les erreurs que j'ai vues, il y a encore une concatenation derrière entre ce nom là et d'autres, et je n'ai pas trouvé où ce situe cette logique.
(J'ai poussé un autre patch sur la branche en attendant mais je vais le déplacer dans un ticket séparé, ça sera plus simple)
Mis à jour par A. Berriot il y a plus d'un an
- Statut changé de Solution proposée à Résolu (à déployer)
Author: Agate Berriot <aberriot@entrouvert.com> Date: Wed Aug 3 10:56:29 2022 +0200 Parallelize tests in CI (#67911)
Mis à jour par Benjamin Dauvergne il y a plus d'un an
Agate Berriot a écrit :
(J'ai poussé un autre patch sur la branche en attendant mais je vais le déplacer dans un ticket séparé, ça sera plus simple)
Oui, lest tests rajoutent un '-test' tu pouvais contrôler ça en définissant la clé DATABASES['default']['TEST']['NAME'] au lieu de @DATABASES['default']['NAME']
.
Mis à jour par A. Berriot il y a plus d'un an
Benjamin Dauvergne a écrit :
Agate Berriot a écrit :
(J'ai poussé un autre patch sur la branche en attendant mais je vais le déplacer dans un ticket séparé, ça sera plus simple)
Oui, lest tests rajoutent un '-test' tu pouvais contrôler ça en définissant la clé
DATABASES['default']['TEST']['NAME'] au lieu de @DATABASES['default']['NAME']
.
c'est ce que j'avais fait au départ, mais ça ne fonctionnait pas : quelque part, quelque chose rajoute un suffixe beaucoup plus long qui contient notamment le nom de l'environnement tox
Mis à jour par Benjamin Dauvergne il y a plus d'un an
Agate Berriot a écrit :
c'est ce que j'avais fait au départ, mais ça ne fonctionnait pas : quelque part, quelque chose rajoute un suffixe beaucoup plus long qui contient notamment le nom de l'environnement tox
Je n'ai jamais constaté ce comportement, sur la machine jenkins je ne vois aucun exemple de ça dans les bases qui traînent.
Mis à jour par A. Berriot il y a plus d'un an
Benjamin Dauvergne a écrit :
Agate Berriot a écrit :
c'est ce que j'avais fait au départ, mais ça ne fonctionnait pas : quelque part, quelque chose rajoute un suffixe beaucoup plus long qui contient notamment le nom de l'environnement tox
Je n'ai jamais constaté ce comportement, sur la machine jenkins je ne vois aucun exemple de ça dans les bases qui traînent.
Testé à l'instant: en local, si je passe de hashlib.sha256(DB_NAME.encode()).hexdigest()[:10]
à hashlib.sha256(DB_NAME.encode()).hexdigest()[:30]
, je me retrouve avec ce genre d'erreurs:
E django.core.exceptions.ImproperlyConfigured: The database name 'test_255620ecf08bbf4fe200cd2edfa36a_py3-django22-drf312-coverage-multipublik' (76 characters) is longer than PostgreSQL's limit of 63 characters. Supply a shorter NAME in settings.DATABASES.
Il y a un suffixe py3-django22-drf312-coverage-multipublik
, vraisenblablement le TOX_ENV_NAME qui est rajouté au dbname.
Mis à jour par A. Berriot il y a plus d'un an
Trouvé ! C'est pytest-django qui a une logique qui gère ça automatiquement : https://pytest-django.readthedocs.io/en/latest/database.html?highlight=tox#django-db-modify-db-settings-tox-suffix
Mis à jour par Benjamin Dauvergne il y a plus d'un an
Ok, vu le code on aurait intérêt à juste avoir une fixture django_db_modify_db_settings
pour y faire la troncature et laisser le code d'origine voir le simplifier.
https://github.com/pytest-dev/pytest-django/blob/1ad013e4bc612d89dcade9e0427c198566f05006/pytest_django/fixtures.py#L51
https://github.com/pytest-dev/pytest-django/blob/1ad013e4bc612d89dcade9e0427c198566f05006/pytest_django/fixtures.py#L79
https://github.com/pytest-dev/pytest-django/blob/1ad013e4bc612d89dcade9e0427c198566f05006/pytest_django/fixtures.py#L281
Mis à jour par A. Berriot il y a plus d'un an
- Lié à Development #67933: Simplifier le nom des bases en test ajouté
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
Parallelize tests in CI (#67911)