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.

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

Ce decorator prend en paramètre un temps maximum d’exécution en Ps et affiche<br />

une erreur de type AssertionError en cas de dépassement de ce temps.<br />

Decorator timedtest<br />

#!/usr/bin/python<br />

# -*- coding: utf8 -*from<br />

test import pystone<br />

import time<br />

# Unité kPs<br />

kPs = 1000<br />

# TOLÉRANCE en Ps<br />

TOLERANCE = 0.5 * kPs<br />

class DurationError(AssertionError): pass<br />

def mesure_pystone():<br />

return pystone.pystones(loops=pystone.LOOPS)<br />

def timedtest(max_pystones, local_pystones=mesure_pystone()):<br />

""" décorateur timedtest """<br />

ifnot isinstance(max_pystones, float):<br />

max_pystones = float(max_pystones)<br />

def _timedtest(function):<br />

def __timedtest(*args, **kw):<br />

start_time = time.time()<br />

try:<br />

return function(*args, **kw)<br />

finally:<br />

total_time = time.time() - start_time<br />

if total_time == 0:<br />

pystone_total_time = 0<br />

else:<br />

ratio = local_pystones[0] / local_pystones[1]<br />

temps = total_time / ratio<br />

if temps > (max_pystones + TOLERANCE):<br />

raise DurationError((('Test trop long (%.2f Ps, '<br />

'duree maximum: %.2f Ps)')<br />

% (temps,<br />

max_pystones)))<br />

return __timedtest<br />

return _timedtest<br />

TOLERANCE permet de gérer un laps de temps supplémentaire, et sert à calibrer les<br />

tests en fonction de la puissance de la machine de test.<br />

483

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

Saved successfully!

Ooh no, something went wrong!