1- import logging
21import os
3- import io
42import sys
53import pytest
64import requests
@@ -15,71 +13,45 @@ class RunReport:
1513 _duration = collections .defaultdict (float )
1614
1715 def pytest_runtest_logfinish (self , location ):
18- try :
19- package , _ , name = location
20- requests .post (os .environ ['REPLY_URL' ], json = {
21- 'package' : package ,
22- 'name' : name ,
23- 'pass' : not self ._failed [location ],
24- 'skip' : self ._skipped [location ],
25- 'output' : "\n " .join (self ._failures [location ] + self ._logs [location ]),
26- 'elapsed' : self ._duration [location ],
27- })
28- except Exception as e :
29- logging .info (f"Failed to send report: { e } " , exc_info = True )
30- print (e )
16+ package , _ , name = location
17+ requests .post (os .environ ['REPLY_URL' ], json = {
18+ 'package' : package ,
19+ 'name' : name ,
20+ 'pass' : not self ._failed [location ],
21+ 'skip' : self ._skipped [location ],
22+ 'output' : "\n " .join (self ._failures [location ] + self ._logs [location ]),
23+ 'elapsed' : self ._duration [location ],
24+ })
3125
3226 def pytest_runtest_logreport (self , report : pytest .TestReport ):
33- try :
34- if report .caplog :
35- self ._logs [report .location ].append (report .caplog )
36- if report .longrepr and hasattr (report .longrepr , 'reprcrash' ):
37- repr_crash = report .longrepr .reprcrash
38- if hasattr (repr_crash , 'message' ):
39- message = repr_crash .message
40- else :
41- message = f'unknown: { repr_crash } '
42- self ._failures [report .location ].append (message )
43- elif report .longrepr and isinstance (report .longrepr , tuple ) and len (report .longrepr ) == 3 :
44- message = report .longrepr [2 ]
45- self ._failures [report .location ].append (message )
46- elif report .longreprtext :
47- # longrepr can be either a tuple or an exception.
48- # we need to make it more friendly to one-line repr in CLI
49- self ._logs [report .location ].append (report .longreprtext )
50- if not report .passed :
51- self ._failed [report .location ] = True
52- if report .skipped :
53- self ._skipped [report .location ] = True
54- self ._duration [report .location ] += report .duration
55- except Exception as e :
56- logging .info (f"Failed to collect report: { e } " , exc_info = True )
57- print (e )
27+ if report .caplog :
28+ self ._logs [report .location ].append (report .caplog )
29+ if report .longrepr and hasattr (report .longrepr , 'reprcrash' ):
30+ repr_crash = report .longrepr .reprcrash
31+ if hasattr (repr_crash , 'message' ):
32+ message = repr_crash .message
33+ else :
34+ message = f'unknown: { repr_crash } '
35+ self ._failures [report .location ].append (message )
36+ elif report .longrepr and isinstance (report .longrepr , tuple ) and len (report .longrepr ) == 3 :
37+ message = report .longrepr [2 ]
38+ self ._failures [report .location ].append (message )
39+ elif report .longreprtext :
40+ # longrepr can be either a tuple or an exception.
41+ # we need to make it more friendly to one-line repr in CLI
42+ self ._logs [report .location ].append (report .longreprtext )
43+ if not report .passed :
44+ self ._failed [report .location ] = True
45+ if report .skipped :
46+ self ._skipped [report .location ] = True
47+ self ._duration [report .location ] += report .duration
5848
5949
6050if __name__ == '__main__' :
61- # Capture output
62- stdout = io .StringIO ()
63- stderr = io .StringIO ()
64-
65- # Run pytest and capture output
66- exit_code = pytest .main ([
51+ sys .exit (pytest .main ([
6752 '-n' , '10' ,
6853 "--log-disable" , "urllib3.connectionpool" ,
6954 "--log-format" , "%(asctime)s %(levelname)s [%(name)s] %(message)s" ,
7055 "--log-date-format" , "%H:%M" ,
71- "--cov=src" , "--cov-report=xml" ,
72- ], plugins = [RunReport ()])
73-
74- # Print captured stdout and stderr
75- out = stdout .getvalue ()
76- print ("=== STDOUT ===" )
77- print (out )
78- logging .error (out )
79-
80- print ("=== STDERR ===" )
81- err = stderr .getvalue ()
82- print (err )
83- logging .error (err )
84-
85- sys .exit (exit_code )
56+ "--cov" , "--cov-report=xml" , "--cov-config=.coveragerc" ,
57+ ], plugins = [RunReport ()]))
0 commit comments