17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

424<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

Coverage<br />

# fichiers textes de type doctests<br />

if fichier.endswith('.txt') and dossier_tests:<br />

doc_file_suite = doctest.DocFileSuite(fichier,<br />

module_relative=False)<br />

suite.addTest(doc_file_suite)<br />

continue<br />

[...]<br />

# fichiers de tests unitaires<br />

if module.startswith('test') and dossier_tests:<br />

m = __import__(module)<br />

if 'get_test_class' in m.__dict__:<br />

class_type = m.get_test_class()<br />

test_suite = unittest.TestSuite((<br />

unittest.makeSuite(class_type), ))<br />

suite.addTest(test_suite)<br />

else:<br />

warn("%s n'a pas de fonction get_test_class" % fichier)<br />

# parcours de tous les fichiers de code pour les doctests<br />

ifnot dossier_tests and fichier.endswith('.py'):<br />

m = __import__(module)<br />

try:<br />

doc_test_suite = doctest.DocTestSuite(m)<br />

except ValueError:<br />

# pas de doctests<br />

pass<br />

else:<br />

suite.addTest(doc_test_suite)<br />

Ce script introduit en outre une variation sur les fichiers de contexte, qui restent<br />

nommés contexte.py dans les répertoires tests et deviennent tests_contexte.py<br />

en dehors. Cette modification permet de lancer un script de contexte associé à des<br />

répertoires contenant des scripts Python qui sont scannés pour les doctests.<br />

Le coverage est un complément utile qui permet de traquer le code non couvert par<br />

les tests unitaires. Les implémentations existantes de scripts de coverage se basent sur<br />

la fonction sys.settrace() qui permet d’associer une fonction à toute exécution de<br />

code. Cette fonction sera appelée à chaque fonction ou méthode visitée, et peut être<br />

combinée avec une deuxième fonction qui sera invoquée pour chaque ligne visitée.<br />

Le module trace de la bibliothèque standard est un exemple d’implémentation de<br />

settrace(). Il fournit un objet Trace, qui prend en paramètre le code à exécuter et

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!