2
import sys, traceback, re
3
from sys import stdout, stderr
4
from xmlrpclib import Fault, ProtocolError
7
## Continue raising exception
9
raise sys.exc_info()[0], sys.exc_info()[1]
17
def __init__(self, name=None):
18
if name != None: self.name = name
22
if self.step == 'finally': return False
23
next_possibilities = ['finally']
24
if not self.failure():
25
if self.next_step != None:
26
next_possibilities.insert(0, self.next_step)
28
elif self.step == None:
29
next_possibilities[:0] = [0, 1]
30
elif isinstance(self.step, int):
31
next_possibilities[:0] = [self.step + 1, 'finally']
32
for step in next_possibilities:
33
foo = "step_"+str(step)
34
if hasattr(self, foo):
40
self.status = 'not-executed'
46
def failed(self, reason):
47
self.status, self.reason = 'failed', reason
48
self.fail_step = self.step
52
self.status = 'success'
55
return self.status == 'failed'
59
foo = getattr(self, "step_"+str(self.step))
61
if self.step not in (0, 'finally', ): raise Exception, "Cannot find step `"+str(self.step)+"'!"
63
if self.step == 'finally':
67
stderr.write("Warning: finally process failed.\n")
69
self.status = 'execution'
71
self.next_step = foo()
73
self.traceback = "\n".join(traceback.format_exc().splitlines()[0:-1]) + "\n" + e.faultString
74
self.failed('Fault: '+str(e.faultCode))
76
except ProtocolError, e:
77
self.traceback = "\n".join(traceback.format_exc().splitlines()[0:-1]) + "\n" + e.faultString
78
self.failed('ProtocolError: %s: %s' % (e.errcode, e.errmsg,))
80
e, msg = sys.exc_info()[0].__name__, str(sys.exc_info()[1])
81
self.traceback = traceback.format_exc()
82
self.failed(e+(": "+msg if msg else ''))
85
stdout.write(self.name)
89
if not self.failure():
92
if not self.failure():
93
stdout.write('pass\n')
97
stdout.write('fail ('+str(self.fail_step)+'/)\n')
100
## Make a serie of tests
107
self.status = 'not-executed'
109
self.traceback = None
110
_temp = __import__(self.__module__, globals(), locals(), self.tests, -1)
111
if not hasattr(self, 'classes'):
112
self.classes = self.tests
113
self.tests = [getattr(_temp, t)() for t in self.classes]
114
self.it = iter(self.tests)
117
self.status = 'execution'
118
stdout.write(self.name+'...\n')
122
except StopIteration:
123
if not self.failure():
125
stdout.write(self.name+' ended.\n')
131
self.traceback = foo.traceback
132
self.failed("Serie Test failure on test: "+foo.name+': '+(foo.reason or 'Unknown'))
136
################################################################################
141
if __name__ == '__main__':
146
globals()['a'] = False
155
def step_finally(self):
157
globals()['a'] = True
159
class myserie(serie):
160
name = "My Test Serie"
166
if s.failure(): print s.reason