Bonjour,
j'ai un petit problème qui mérite un oeil externe
J'ai une classe de test avec des méthodes de test.
Chaque méthode de test possède un décorateur timeout
La definition du décorateur se fait en déhors de la classe de test.
Quand je lance unittest, aucun soucis, les tests se lance et j'ai bien le timeout qui fonctionne ... par contre avec nosetest plus rien ne se lance
(et bien sûr en enlevant les décorateurs tout fonctionne bien :-/ )
Si vous avez une idée je suis preneur
Voici le bout de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 import unittest import signal import time class TimeoutException(Exception): pass def timeout(timeout_time): """ decorator function catching the argument """ def timeout_function(func): """ decorator function """ def _timeout_function(self): """ create a signal handler set the timeout with the argument given while calling the decorator @timeout call the function catch a timeout exception if necessary """ def timeout_handler(signum, frame): print 'Timeout (%s sec) reached' % str(timeout_time) raise TimeoutException() old_handler = signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(timeout_time) # triger alarm in timeout_time seconds try: retval = func(self) except TimeoutException: return 'Timeout (%s sec) reached' % str(timeout_time) finally: signal.signal(signal.SIGALRM, old_handler) signal.alarm(0) return retval return _timeout_function return timeout_function class Test_MaclasseDeTest(unittest.TestCase): @timeout(5) def test_OK(self): print 'dummy test ok' #content of the test pass @timeout(5) def test_KO(self): print 'dummy test ko' time.sleep(10) #content of the test pass if __name__ == "__main__": unittest.main()
Partager