@@ -73,6 +73,7 @@ def clean(self):
7373 self ._starting_time = None
7474 self .result = Result .NOT_RUN
7575 self .logfile = None
76+ self .out = None
7677 self .extra_logfiles = []
7778 self ._env_variable = ''
7879
@@ -102,16 +103,41 @@ def add_env_variable(self, variable, value):
102103 self ._env_variable += " "
103104 self ._env_variable += "%s=%s" % (variable , value )
104105
105- def get_extra_log_content (self , extralog ):
106- if extralog not in self .extra_logfiles :
107- return ""
106+ def open_logfile (self ):
107+ path = os .path .join (self .options .logsdir ,
108+ self .classname .replace ("." , os .sep ))
109+ mkdir (os .path .dirname (path ))
110+ self .logfile = path
111+
112+ if self .options .redirect_logs == 'stdout' :
113+ self .out = sys .stdout
114+ elif self .options .redirect_logs == 'stderr' :
115+ self .out = sys .stderr
116+ else :
117+ self .out = open (path , 'w+' )
118+
119+ def close_logfile (self ):
120+ if not self .options .redirect_logs :
121+ self .out .close ()
122+
123+ self .out = None
108124
109- f = open (extralog , 'r+' )
125+ def _get_file_content (self , file_name ):
126+ f = open (file_name , 'r+' )
110127 value = f .read ()
111128 f .close ()
112129
113130 return value
114131
132+ def get_log_content (self ):
133+ return self ._get_file_content (self .logfile )
134+
135+ def get_extra_log_content (self , extralog ):
136+ if extralog not in self .extra_logfiles :
137+ return ""
138+
139+ return self ._get_file_content (extralog )
140+
115141 def get_classname (self ):
116142 name = self .classname .split ('.' )[- 1 ]
117143 classname = self .classname .replace ('.%s' % name , '' )
@@ -235,13 +261,15 @@ def _kill_subprocess(self):
235261
236262 def thread_wrapper (self ):
237263 self .process = subprocess .Popen ("exec " + self .command ,
238- stderr = self .reporter . out ,
239- stdout = self .reporter . out ,
264+ stderr = self .out ,
265+ stdout = self .out ,
240266 shell = True ,
241267 env = self .proc_env )
242268 self .process .wait ()
243269
244270 def run (self ):
271+ self .open_logfile ()
272+
245273 self .command = "%s " % (self .application )
246274 self ._starting_time = time .time ()
247275 self .build_arguments ()
@@ -256,12 +284,12 @@ def run(self):
256284 for log in self .extra_logfiles :
257285 message += "\n - %s" % log
258286
259- self .reporter . out .write ("=================\n "
260- "Test name: %s\n "
261- "Command: '%s'\n "
262- "=================\n \n "
263- % (self .classname , self .command ))
264- self .reporter . out .flush ()
287+ self .out .write ("=================\n "
288+ "Test name: %s\n "
289+ "Command: '%s'\n "
290+ "=================\n \n "
291+ % (self .classname , self .command ))
292+ self .out .flush ()
265293
266294 printc (message , Colors .OKBLUE )
267295
@@ -282,6 +310,8 @@ def run(self):
282310 " (" + self .message + ")" if self .message else "" ),
283311 color = utils .get_color_for_result (self .result ))
284312
313+ self .close_logfile ()
314+
285315 return self .result
286316
287317
@@ -748,11 +778,9 @@ def run_tests(self, cur_test_num, total_num_tests):
748778 i = cur_test_num
749779 for test in self .tests :
750780 sys .stdout .write ("[%d / %d] " % (i + 1 , total_num_tests ))
751- self .reporter .open_logfile (test )
752781 res = test .run ()
753782 i += 1
754783 self .reporter .after_test (test )
755- self .reporter .close_logfile ()
756784 if res != Result .PASSED and (self .options .forever or
757785 self .options .fatal_error ):
758786 return test .result
0 commit comments