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.
Files
Related issues
Associated revisions
History
Updated by Agate Berriot about 1 year ago
- Related to Development #67760: fonctionner avec django 3.2 added
Updated by Agate Berriot about 1 year ago
- File 0001-Parallelize-tests-in-CI-67911.patch 0001-Parallelize-tests-in-CI-67911.patch added
- Tracker changed from Support to Development
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Updated by Agate Berriot about 1 year ago
- Assignee changed from Agate Berriot to Benjamin Dauvergne
Division du temps d'exécution par 3, on passe de 20 à 6 minutes.
Updated by Benjamin Dauvergne about 1 year ago
- Status changed from Solution proposée to 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:])
Updated by Agate Berriot about 1 year ago
- File 0001-Parallelize-tests-in-CI-67911.patch 0001-Parallelize-tests-in-CI-67911.patch added
- File 0002-Speed-up-authentic-provisionning-tests.patch 0002-Speed-up-authentic-provisionning-tests.patch added
- Status changed from Solution validée to Solution proposée
Updated by Agate Berriot about 1 year ago
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)
Updated by Agate Berriot about 1 year ago
- Status changed from Solution proposée to Résolu (à déployer)
Author: Agate Berriot <aberriot@entrouvert.com> Date: Wed Aug 3 10:56:29 2022 +0200 Parallelize tests in CI (#67911)
Updated by Benjamin Dauvergne about 1 year ago
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']
.
Updated by Agate Berriot about 1 year ago
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
Updated by Benjamin Dauvergne about 1 year ago
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.
Updated by Agate Berriot about 1 year ago
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.
Updated by Agate Berriot about 1 year ago
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
Updated by Benjamin Dauvergne about 1 year ago
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
Updated by Agate Berriot about 1 year ago
- Related to Development #67933: Simplifier le nom des bases en test added
Updated by Transition automatique about 1 year ago
- Status changed from Résolu (à déployer) to Solution déployée
Parallelize tests in CI (#67911)