2012-09-18 8 views
0

Django allows auto database routing. Il est possible d'avoir différentes bases de données pour le test et la production. La valeur par défaut pour le test est sqlite3. La migration de sqlite3 vers couchdb aura une amélioration significative du temps pour les tests unitaires qui prennent plus de 10 minutes. courir?en remplaçant sqlite par défaut avec la base de données couchdb pour l'optimisation du test django

Quelle autre optimisation de db de test peut-on faire?

+0

Il ne semble pas y avoir suffisamment d'informations ici. Changez-vous uniquement pour améliorer les performances de votre test? Vos tests prennent 10 minutes: avez-vous envisagé d'optimiser les performances des tests? Je pense que passer du SQL à un db NoSQL nécessiterait beaucoup de retouches: est-ce le cas ici? – Chris

Répondre

0

Pas sûr que vous pourriez réussir à remplacer SQLite avec CouchDB et enregistrer toutes ses fonctionnalités, sauf si votre utilisation de SQLite est très basique. Sachant combien de sqlite permet de faire, cela ne pourrait pas être si facile. CouchDB pourrait accélérer vos tests si seulement vous utilisez des requêtes SQL assez triviales ou si vous avez des calculs complexes sur les résultats de la requête. Comme les vues CouchDB stockent des résultats prêts à l'emploi avec une sémantique de demande de mise à jour à la demande, cela pourrait vous faire économiser du temps CPU.

Cependant, avez-vous essayé d'utiliser le stockage :memory:? Ou travailler avec test db sur tmpfs? Notez également qu'avec CouchDB vos tests peuvent souffrir de la latence du réseau - les requêtes HTTP ne sont pas aussi bon marché que les appels de fonction via le pilote (sqlite est juste un pilote de base de données, pas un SGBDR complet).

P.S. Notez que je ne parle pas de position de Django ORM ou d'autres puisque normalement ils ne pourraient pas fournir une bonne efficacité en tant que bibliothèques natives. Par exemple, SQLite permet des requêtes personnalisées SELECT, tandis que views est rarement utilisé alors que CouchDB fonctionne mieux avec des requêtes views prédéfinies plutôt que des requêtes personnalisées (temporary views).

+0

Si vous utilisez sqlite3 dans les tests, la base de données de test est créée dans la mémoire en dehors de la boîte dans Django. – jasisz

+0

@jasiz vraiment? J'ai toujours pensé que le comportement dépendait de la configuration puisque, probablement, vous voulez regarder l'état db après tous les tests ou, si certains d'entre eux échouent, afficher l'état db ou utiliser la db pré-générée pour les tests cibles, etc. être vraiment douloureux. – Kxepal

+0

Ouais, vraiment;) Et même d'autres bases de données sont détruites après des tests https://docs.djangoproject.com/fr/dev/topics/testing/#the-test-database – jasisz

0

Je suggère d'utiliser des paramètres complètement différents pour développer/tester au lieu de routeurs.

Si la base de données est la principale raison pour laquelle le test dure si longtemps, c'est souvent en raison de l'utilisation d'appareils dans les tests qui sont chargés avant chaque test - utiliser https://github.com/dnerdy/factory_boy ou une solution similaire peut être très utile.

Questions connexes