PyConFR - testons en python

29
Testons en Python un retour d'expérience sur l'optimisation d'un process validation from pycon.pyconfr import talk

Transcript of PyConFR - testons en python

Page 1: PyConFR - testons en python

Testons en Pythonun retour d'expérience sur l'optimisation

d'un process validation

from pycon.pyconfr import talk

Page 2: PyConFR - testons en python

class myTalk(talk):

# introduction générale

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

...

Page 3: PyConFR - testons en python

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

Page 4: PyConFR - testons en python

Ce n'est pas...

Introduction

Page 5: PyConFR - testons en python

Ce n'est pas...

Introduction

Page 6: PyConFR - testons en python

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

Page 7: PyConFR - testons en python

ISTQB : Norme ISO 9126 (qualité logicielle)

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

IntroductionQu'est ce que la Validation Logicielle ?

Page 8: PyConFR - testons en python

Introduction

● découvrir de nouveaux bugs au sein du produit

● tester de nouvelles features

● Réaliser un maximum de tests en un minimum de temps

● Trouver un maximum de bugs

Que recherche le testeur ?

Que recherche le département validation ?

Page 9: PyConFR - testons en python

Introduction

let's do it FAST !

● Factoriser (librairies)

● Automatiser (outils)

● Scénariser (pool de script)

● Tester

Page 10: PyConFR - testons en python

def Part1(test_case, framework):

# base de la validation

import unittest...

Page 11: PyConFR - testons 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

Page 12: PyConFR - testons 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

Page 13: PyConFR - testons 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

Page 14: PyConFR - testons en python

Un wrapper de unittest - Pytestemb

Exemple de script avec pytestembimport 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

Page 15: PyConFR - testons 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

Page 16: PyConFR - testons en python

Un wrapper de unittest - Pytestemb

Exemple de script avec pytestembdef 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

Page 17: PyConFR - testons 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

Page 18: PyConFR - testons 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

Page 19: PyConFR - testons en python

L'automatisation (fAst)

Validation Logicielle en Python

... MAIS NE PAS EN ABUSER AU SEIN DES SCRIPTS !

Page 20: PyConFR - testons en python

def Part2(*tools):

# présentation des outils

for tool in tools:tool.present()

Page 21: PyConFR - testons en python

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

Page 22: PyConFR - testons en python

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

Page 23: PyConFR - testons en python

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

Page 24: PyConFR - testons en python

Outils et Librairies

Page 25: PyConFR - testons en python

Les serveurs de tests

Outils et Librairies

Page 26: PyConFR - testons en python

def Conclusion(Part1, Part2):

# listing des notions vues

dir(Part1)dir(Part2)

Page 27: PyConFR - testons en python

Quel gain ?

Pour le testeur ?

● Les scripts à écrire sont plus faciles car l'univers validation est déjà en place

● L'automatisation permet de rejouer et réutiliser des scénarios

Pour le département ?

● Le pool de scripts gère les regressions et les campagnes, tout est facilement réutilisable

● Les outils permettent un gain de temps dans la gestion et l'import/export des résultats

Page 28: PyConFR - testons en python

Python comme moteur des scriptsMais 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

Utilisation de Python

Page 29: PyConFR - testons en python

Mail: [email protected]: @g_buret

Merci !