from pycon.pyconfr import talk




           Testons en Python
     un retour d'expérience sur l'optimisation
             d'un process validation
class myTalk(talk):

    # introduction générale

    def __init__(self,
                 ISTQB=CFTL,
                 goals=[tester,
                        team] ):

        ...
Introduction
Qui suis-je ?

● Ingénieur Validation Logiciel chez Parrot depuis près de
  3 ans

● Python comme moteur des scripts de validation
  logicielle, des librairies et de l'automatisation des tests.

● Certification ISTQB (International Software Testing
  Qualifications Board) - Niveau Fondation
Introduction
Ce n'est pas...
Introduction
Ce n'est pas...
Introduction
c'est :
● Un retour d'expérience pour :
       ■ partager les idées...
       ■ ... et les erreurs !


● Python utilisé dans le domaine de la
  validation des logiciels embarqués

● Un exemple d'application des pratiques
  courantes
Introduction
Qu'est ce que la Validation Logicielle ?

ISTQB : Norme ISO 9126 (qualité logicielle)

   ●   Fonctionnabilité
   ●   Fiabilité
   ●   Utilisabilité
   ●   Rendement
   ●   Maintenabilité
   ●   Portabilité
Introduction

Que recherche le        Que recherche le
testeur ?               département validation ?

● découvrir de          ● Réaliser un maximum
  nouveaux bugs au        de tests en un
  sein du produit         minimum de temps

● tester de nouvelles   ● Trouver un maximum
  features                de bugs
Introduction

               let's do it FAST !

● Factoriser    (librairies)
● Automatiser (outils)
● Scénariser    (pool de script)
● Tester
def Part1(test_case, framework):

    # base de la validation

    import unittest
    ...
Validation Logicielle en Python
Qu'est ce qu'un cas de test ?

  Cas de test : un ensemble de valeurs d'entrée, de
  préconditions d‘exécution, de résultats attendus et de
  postconditions d‘exécution, développées pour un
  objectif ou une condition de tests particulier, tel
  qu'exécuter un chemin particulier d'un programme ou
  vérifier le respect d‘une exigence spécifique [d‘après
  ISTQB - IEEE 610]

Ce qui est facilement transposable au sein d'un
script
Validation Logicielle en Python
Un wrapper de unittest (Fast)

                  Pytestemb

Historique :
   ● Développé en interne, puis open source
   ● https://github.com/biluti/pytestemb
   ● version actuelle : 1.4.0
   ● version 2.0 en cours de développement
Validation Logicielle en Python
Un wrapper de unittest - Pytestemb
permet de gérer les scénarios des tests :
  ●   valeurs d'entrée
  ●   préconditions d‘exécution
  ●   résultats attendus
  ●   postconditions d‘exécution
  ●   objectif/condition de tests particulier
  ●   chemin particulier d'un programme
Validation Logicielle en Python
Un wrapper de unittest - Pytestemb
Exemple de script avec pytestemb
     import pytestemb as test

     if __name__ == "__main__":

       test.set_setup(pre_conditions)
       test.add_test_case(disconnect_during_playing_iPod)
       test.set_cleanup(post_conditions)

       test.run_script()
Validation Logicielle en Python
Un wrapper de unittest - Pytestemb
Exemple de script avec pytestemb

     def pre_conditions():
       pipe.create()
       pipe.connect()

     def post_conditions():
       pipe.disconnect()
       pipe.destroy()
Validation Logicielle en Python
Un wrapper de unittest - Pytestemb
Exemple de script avec pytestemb
     def disconnect_during_playing_iPod():
       # test coded here...
       pytestemb.assert_equal(exp1, exp2, "exp1 is != exp2")
       ....

       pytestemb.assert_true_fatal(is_present, "iPod not connected")
Validation Logicielle en Python
De la nécessité d'avoir un pool de test (faSt)

- Plusieurs scénarios
   - Plusieurs test cases
       -Plusieurs scripts
- La gestion des paramètres locaux
- La réutilisation de scénarios basiques (test
unitaires) pour des scénarios plus complexes
(test fonctionnels / recettes)
Validation Logicielle en Python
L'automatisation (fAst)
  test automation: The use of software to
  perform or support test activities, e.g. test
  management, test design, test execution
  and results checking. [ISTQB Glossary]

En cela, le Python permet de répondre à
certaines problématiques...
Validation Logicielle en Python
L'automatisation (fAst)


         ... MAIS NE PAS EN ABUSER
             AU SEIN DES SCRIPTS !
def Part2(*tools):

    # présentation des outils

    for tool in tools:
        tool.present()
Outils et Librairies
Pourquoi une librairie métier ?
  ● Des aspects spécifiques impliquent une
     factorisation du code orienté métier
  ● Certaines opérations seront réalisées par
     TOUS les testeurs, plusieurs fois par jour

Restreinte ? Open-source ?
  ● Au choix...
  ● ... mais le choix open-source n'est pas
     toujours utile pour le reste du monde !
Outils et Librairies
Que mettre dans la librairie ?

● modules d'automatisation
   ○ spécifique métier (pyserial, pybluez, ...)


● modules d'import/export resultats et tests
   ○ interface avec les bases de données


● modules d'installation-distribution
   ○ pour la release au sein de l'équipe (setuptools)
Outils et Librairies
Les campagnes de tests
      <XMLProjectVersion Version="2.1"/>
      <MetaCampaigns>
        <MetaCampaign Info="" Name="PLAYER">
          <Campaign Name="PLAYER_MSC"/>
          <Campaign Name="PLAYER_STARTUP"/>
        </MetaCampaign>
      </MetaCampaigns>
      <Campaigns>
        <Campaign Info="" Name="PLAYER_MSC">
          <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CSSV_(MSC)"/>
          <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CWNG_(MSC)"/>
        </Campaign>
        <Campaign Info="" Name="PLAYER_STARTUP">
          <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CGPS_(startup)"/>
...
Outils et Librairies
Outils et Librairies
Les serveurs de tests
def Conclusion(Part1, Part2):

    # listing des notions vues

    dir(Part1)
    dir(Part2)
Quel gain ?
Pour le testeur ?              Pour le département ?

● Les scripts à écrire sont    ● Le pool de scripts gère
  plus faciles car l'univers     les regressions et les
  validation est déjà en         campagnes, tout est
  place                          facilement réutilisable

● L'automatisation permet      ● Les outils permettent un
  de rejouer et réutiliser       gain de temps dans la
  des scénarios                  gestion et l'import/export
                                 des résultats
Utilisation de Python
Python comme moteur des scripts
Mais aussi dans les outils et librairies

Python est utilisé de bout en bout
  ● idéal pour les changements dans l'équipe
  ● idéal pour la maintenance
  ● idéal pour la gestion des packages
Merci !

Mail:    guillaume.buret@parrot.com
Twitter: @g_buret

PyConFR - testons en python

  • 1.
    from pycon.pyconfr importtalk Testons en Python un retour d'expérience sur l'optimisation d'un process validation
  • 2.
    class myTalk(talk): # introduction générale def __init__(self, ISTQB=CFTL, goals=[tester, team] ): ...
  • 3.
    Introduction Qui suis-je ? ●Ingénieur Validation Logiciel chez Parrot depuis près de 3 ans ● Python comme moteur des scripts de validation logicielle, des librairies et de l'automatisation des tests. ● Certification ISTQB (International Software Testing Qualifications Board) - Niveau Fondation
  • 4.
  • 5.
  • 6.
    Introduction c'est : ● Unretour d'expérience pour : ■ partager les idées... ■ ... et les erreurs ! ● Python utilisé dans le domaine de la validation des logiciels embarqués ● Un exemple d'application des pratiques courantes
  • 7.
    Introduction Qu'est ce quela Validation Logicielle ? ISTQB : Norme ISO 9126 (qualité logicielle) ● Fonctionnabilité ● Fiabilité ● Utilisabilité ● Rendement ● Maintenabilité ● Portabilité
  • 8.
    Introduction Que recherche le Que recherche le testeur ? département validation ? ● découvrir de ● Réaliser un maximum nouveaux bugs au de tests en un sein du produit minimum de temps ● tester de nouvelles ● Trouver un maximum features de bugs
  • 9.
    Introduction let's do it FAST ! ● Factoriser (librairies) ● Automatiser (outils) ● Scénariser (pool de script) ● Tester
  • 10.
    def Part1(test_case, framework): # base de la validation import unittest ...
  • 11.
    Validation Logicielle enPython Qu'est ce qu'un cas de test ? Cas de test : un ensemble de valeurs d'entrée, de préconditions d‘exécution, de résultats attendus et de postconditions d‘exécution, développées pour un objectif ou une condition de tests particulier, tel qu'exécuter un chemin particulier d'un programme ou vérifier le respect d‘une exigence spécifique [d‘après ISTQB - IEEE 610] Ce qui est facilement transposable au sein d'un script
  • 12.
    Validation Logicielle enPython Un wrapper de unittest (Fast) Pytestemb Historique : ● Développé en interne, puis open source ● https://github.com/biluti/pytestemb ● version actuelle : 1.4.0 ● version 2.0 en cours de développement
  • 13.
    Validation Logicielle enPython Un wrapper de unittest - Pytestemb permet de gérer les scénarios des tests : ● valeurs d'entrée ● préconditions d‘exécution ● résultats attendus ● postconditions d‘exécution ● objectif/condition de tests particulier ● chemin particulier d'un programme
  • 14.
    Validation Logicielle enPython Un wrapper de unittest - Pytestemb Exemple de script avec pytestemb import pytestemb as test if __name__ == "__main__": test.set_setup(pre_conditions) test.add_test_case(disconnect_during_playing_iPod) test.set_cleanup(post_conditions) test.run_script()
  • 15.
    Validation Logicielle enPython Un wrapper de unittest - Pytestemb Exemple de script avec pytestemb def pre_conditions(): pipe.create() pipe.connect() def post_conditions(): pipe.disconnect() pipe.destroy()
  • 16.
    Validation Logicielle enPython Un wrapper de unittest - Pytestemb Exemple de script avec pytestemb def disconnect_during_playing_iPod(): # test coded here... pytestemb.assert_equal(exp1, exp2, "exp1 is != exp2") .... pytestemb.assert_true_fatal(is_present, "iPod not connected")
  • 17.
    Validation Logicielle enPython De la nécessité d'avoir un pool de test (faSt) - Plusieurs scénarios - Plusieurs test cases -Plusieurs scripts - La gestion des paramètres locaux - La réutilisation de scénarios basiques (test unitaires) pour des scénarios plus complexes (test fonctionnels / recettes)
  • 18.
    Validation Logicielle enPython L'automatisation (fAst) test automation: The use of software to perform or support test activities, e.g. test management, test design, test execution and results checking. [ISTQB Glossary] En cela, le Python permet de répondre à certaines problématiques...
  • 19.
    Validation Logicielle enPython L'automatisation (fAst) ... MAIS NE PAS EN ABUSER AU SEIN DES SCRIPTS !
  • 20.
    def Part2(*tools): # présentation des outils for tool in tools: tool.present()
  • 21.
    Outils et Librairies Pourquoiune librairie métier ? ● Des aspects spécifiques impliquent une factorisation du code orienté métier ● Certaines opérations seront réalisées par TOUS les testeurs, plusieurs fois par jour Restreinte ? Open-source ? ● Au choix... ● ... mais le choix open-source n'est pas toujours utile pour le reste du monde !
  • 22.
    Outils et Librairies Quemettre dans la librairie ? ● modules d'automatisation ○ spécifique métier (pyserial, pybluez, ...) ● modules d'import/export resultats et tests ○ interface avec les bases de données ● modules d'installation-distribution ○ pour la release au sein de l'équipe (setuptools)
  • 23.
    Outils et Librairies Lescampagnes de tests <XMLProjectVersion Version="2.1"/> <MetaCampaigns> <MetaCampaign Info="" Name="PLAYER"> <Campaign Name="PLAYER_MSC"/> <Campaign Name="PLAYER_STARTUP"/> </MetaCampaign> </MetaCampaigns> <Campaigns> <Campaign Info="" Name="PLAYER_MSC"> <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CSSV_(MSC)"/> <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CWNG_(MSC)"/> </Campaign> <Campaign Info="" Name="PLAYER_STARTUP"> <Script Path="script.command.PLAYER" Type="TST" Name="cmd_CGPS_(startup)"/> ...
  • 24.
  • 25.
    Outils et Librairies Lesserveurs de tests
  • 26.
    def Conclusion(Part1, Part2): # listing des notions vues dir(Part1) dir(Part2)
  • 27.
    Quel gain ? Pourle testeur ? Pour le département ? ● Les scripts à écrire sont ● Le pool de scripts gère plus faciles car l'univers les regressions et les validation est déjà en campagnes, tout est place facilement réutilisable ● L'automatisation permet ● Les outils permettent un de rejouer et réutiliser gain de temps dans la des scénarios gestion et l'import/export des résultats
  • 28.
    Utilisation de Python Pythoncomme moteur des scripts Mais aussi dans les outils et librairies Python est utilisé de bout en bout ● idéal pour les changements dans l'équipe ● idéal pour la maintenance ● idéal pour la gestion des packages
  • 29.
    Merci ! Mail: guillaume.buret@parrot.com Twitter: @g_buret