PyConFR - testons en python
Transcript of PyConFR - testons en python
Testons en Pythonun retour d'expérience sur l'optimisation
d'un process validation
from pycon.pyconfr import talk
class myTalk(talk):
# introduction générale
def __init__(self, ISTQB=CFTL, goals=[tester, team] ):
...
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
ISTQB : Norme ISO 9126 (qualité logicielle)
● Fonctionnabilité● Fiabilité● Utilisabilité● Rendement● Maintenabilité● Portabilité
IntroductionQu'est ce que la Validation Logicielle ?
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 ?
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...
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 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
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 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
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)
Validation Logicielle en Python
... MAIS NE PAS EN ABUSER AU SEIN DES SCRIPTS !
def Part2(*tools):
# présentation des outils
for tool in tools:tool.present()
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
Outils et Librairies
def Conclusion(Part1, Part2):
# listing des notions vues
dir(Part1)dir(Part2)
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
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
Mail: [email protected]: @g_buret
Merci !