Accueil » Zope » Forum Zope » Forum Général Zope » Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

 • Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

Document Actions
Réponses: 11   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

Posté par schnito le 25/04/2007 13:08
Bonjour tout le monde !

Voici mon soucis.

Je travaille sur un type de contenu assez important. Je fais des modifications assez fréquentes, et je veux donc tester si tout fonctionne bien.

Seulement, si je veux tester, je suis obliger d'arrêter l'instance, de redemarrer, de reinstaller le produit. Sinon, mes modifications ne sont pas prises en comptes ...

Tout ceci est plutôt long, et je perds beaucoup de temps ...

Y-a-t-il une solution plus rapide ??

Je vous remercie pour vos réponses.

@+. ;)
  • smoke Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par amine le 20/05/2007 17:47
    Il y a la methode classique: dans le dossier de ton produit (dans le systeme de fichiers), crée un fichier texte appellé "refresh.txt". ensuite, il faut demarrer ton instance zope en mode debug: il faut donc modifier ton zope.conf en consequence.
    ensuite, redemarre ton instance zope. va au Control Panel, clique sur Product Management, tu obtiendras la liste des produits installés. clique sur ton produit, tu verras un onglet "refresh". lis bien ce qu'indique cette page.
    En 2 mot: à chaque fois que tu feras une modification dans le code source de ton produit, il suffit de cliquer sur le bouton dans l'onglet "refresh" pour que les modifs se repercutent sans devoir redemarrer.
    Il est à noter que cette methode fonctionne assez mal en developpement Plone, mais elle rend de fiers services.
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par schnito le 22/05/2007 10:06
    Salut amine et merci !

    Oui, je connais cette méthode de refresh, mais elle ne marche iniquement dans le cas de modification de templates ou choses du genres.

    mais sous Plone si tu modifies le schéma de ton type de contenu par exemple, ou une fontion de la classe, le refresh n'est pas suffisant ...

    Par exemple, si on modifie une fonction de la classe, et qu'on essaye d'éditer ou de créer un nouvel objet, on obtiens cette erreur :

    code:
    Cache values may only be in one cache



    Une astuce aussi pour gagner du temps et de faire un pack de la ZODB, car elle peut vite prendre beaucoup de place.
    Ensuite, les redémarrages d'instance seront plus rapide ...
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par gawel le 22/05/2007 22:00
    C'est peut-être le moment de se pencher sur les test unitaires.

    Il y a moulte exemples dans les produits Plone. tests/test_*.py
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par schnito le 23/05/2007 11:13
    je pensais m'y mettre effectivement, mais la je ne vois pas le rapport ...
    •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

      Posté par amine le 23/05/2007 22:25
      Ce que Gawel veut dire, c'est qu'au lieu de faire tes tests en verifiant le resultat depuis l'interface Zope ou Plone (en testant le resultat sur un objet que tu as crée dans Plone en maniant souris, clavier et tes mirettes), crée des tests unitaires qui se chargeront de faire tes tests à ta place de façon "rationelle".
      exemple: Une methode dans ton produit retourne un resultat. au lieu de le tester de visu, laisse faire un test unitaire. tu peux concevoir des scenarios. une fois lancé, le test unitaire se charge de verifier à ta place si tout se passe bien. c'est sûr, efficace et conseillé.
      Les tests unitaires "coutent" du temps au debut: chaque methode devra avoir son test. Au debut, tu as l'impression de perdre du temps à créer une methode et le test qui va avec. Mais crois moi, c'est pas du temps perdu: l'experience montre que ça permet un gain de temps et d'efficacité de l'ordre de l'inimaginable.
      Mot-clé pour ton aventure: PloneTestCase ;) .
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par schnito le 24/05/2007 09:45
    Ah oui, d'accord je comrpends bien now !

    MAis alors, disons que j'ai une méthode qui récupère les css inclus dans une page html, et que je dois recuperer les styles pour generer un xml dans le but d'avoir les classes dans la liste des styles de fckeditor. Là le résultat est un fichier ...

    Ou un autre, qui parse un fichier html pour récupérer les metadatas, et initialiser les champs d'un formulaire correspondants ...

    C'est pas un peu compliqué a faire en test unitaire ça ?

    Merci bien en tout cas.
    •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

      Posté par amine le 25/05/2007 22:54
      Prépare du café, telecharge PloneTestCase et la documentation qui va avec. Prevoir une nuit relativement blanche.
      Crée un petit produit basique, de type "hello world", mais en prévoyant dès le debut les tests qui vont avec. Pour cela, il faut comprendre la philosophie de Plonetestcase et des tests unitaires.
      Ensuite, petit à petit, implemente les methodes de ton produit initial à celui-ci.
      Au bout du compte, tu auras ton produit fini, testé et qui tourne comme la Lamborghini dans Gran Turismo.
      Et dans la foulée, sans t'en rendre compte, tu auras appris la programmation orientée test (Test-driven Programming pour frimer).
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par schnito le 29/05/2007 12:54
    d'acoord, je vais m'y atteler.

    merci bien !
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par ychaouche le 24/07/2008 12:45
    Salut à tous,

    J'ai le même problème mais pour un cas différent car je suis en phase de prototypage. Je dois coder et tester que ce que j'ai écris fonctionne pour un cas simple (je n'ai pas besoin de tester tous les cas pour l'instant).

    J'ai un zope en mode debug, un refresh.txt dans mon produit, un auto-refresh checké en ZMI, et pourtant, quand je change le code de ma classe, j'ai beau cliquer sur le lien refresh (malgrés l'auto-refresh) dans le control_panel > products > mon produit et rien n'y fait. J'ai l'impression qu'il ne recompile pas.

    Est-ce que je suis vraiment obligé de redémarrer mon instance zope à chaque fois que je change le code de ma classe ?

    Merci d'avance.
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par ychaouche le 24/07/2008 15:37
    Est-ce que quelqu'un a déjà essayé refreshng ? je ne sais pas si c moi mais il plante lamentablement.
  •  • Re: Optimiser les tests : comment faire pour ne pas réinstaller le produit à chaque fois

    Posté par ychaouche le 25/07/2008 16:01
    Bon en fait ce n'est pas totalement vrai.

    Ça ne marchait pas parce que j'utilisais zLOG dans mon produit pour avoir des traces dans le fichier de log de Zope. Quand j'ai supprimé tout le code qui l'utilise, mon produit s'est rafraîchit sans difficulté. J'extrapole en supposant que tous les imports Zope (tels que from Zope2 import DB etc.) feront lamentablement planter le refresh...