@@ -82,6 +82,19 @@ def pytest_terminal_summary(terminalreporter, exitstatus, config):
8282 # Wait a moment for any pending file writes
8383 time .sleep (1 )
8484
85+ # Get all test nodes from the environment
86+ node_to_test = os .getenv ("NODE_TO_TEST" )
87+
88+ if node_to_test :
89+ # Test specific nodes
90+ nodes_to_check = [node .strip () for node in node_to_test .split ("," )]
91+ else :
92+ # Check all possible nodes
93+ nodes_to_check = [
94+ "Node 01" , "Node 04" , "Node 05" , "Node 06" , "Node 07" , "Node 08" ,
95+ "Node 09" , "Node 10" , "Node 13" , "Node 14" , "Node 21" , "Node 23" , "Node 37"
96+ ]
97+
8598 # Get global stats
8699 global_stats_file = "test_output/global_stats.json"
87100 global_stats = {}
@@ -92,63 +105,52 @@ def pytest_terminal_summary(terminalreporter, exitstatus, config):
92105 except Exception :
93106 pass
94107
95- # Display blockchain summaries
108+ # Display blockchain summaries only for the tested nodes
96109 for blockchain , nodes in global_stats .items ():
97110 print (f"\n 🔗 Blockchain: { blockchain } " )
98111 for node_name , node_stats in nodes .items ():
99- print (f" • { node_name } :" )
100-
101- # Publish stats
102- p_success = node_stats .get ('publish_success' , 0 )
103- p_failed = node_stats .get ('publish_failed' , 0 )
104- p_rate = round (p_success / (p_success + p_failed ) * 100 , 2 ) if (p_success + p_failed ) > 0 else 0.0
105- print (f" 🔸 Publish: ✅ { p_success } / ❌ { p_failed } -> { p_rate } %" )
106-
107- # Query stats
108- q_success = node_stats .get ('query_success' , 0 )
109- q_failed = node_stats .get ('query_failed' , 0 )
110- q_rate = round (q_success / (q_success + q_failed ) * 100 , 2 ) if (q_success + q_failed ) > 0 else 0.0
111- print (f" 🔸 Query: ✅ { q_success } / ❌ { q_failed } -> { q_rate } %" )
112-
113- # Local Get stats
114- lg_success = node_stats .get ('local_get_success' , 0 )
115- lg_failed = node_stats .get ('local_get_failed' , 0 )
116- lg_rate = round (lg_success / (lg_success + lg_failed ) * 100 , 2 ) if (lg_success + lg_failed ) > 0 else 0.0
117- print (f" 🔸 Local Get: ✅ { lg_success } / ❌ { lg_failed } -> { lg_rate } %" )
118-
119- # Remote Get stats
120- rg_success = node_stats .get ('remote_get_success' , 0 )
121- rg_failed = node_stats .get ('remote_get_failed' , 0 )
122- rg_rate = round (rg_success / (rg_success + rg_failed ) * 100 , 2 ) if (rg_success + rg_failed ) > 0 else 0.0
123- print (f" 🔸 Get: ✅ { rg_success } / ❌ { rg_failed } -> { rg_rate } %" )
124-
125- # Timing stats
126- def format_time (seconds ):
127- return f"{ int (seconds // 60 )} min { seconds % 60 :.2f} sec" if seconds >= 60 else f"{ seconds :.2f} seconds"
128-
129- def avg_time (times ):
130- return sum (times ) / len (times ) if times else 0.0
131-
132- print (f" ⏱️ Avg Publish Time: { format_time (avg_time (node_stats .get ('publish_times' , [])))} " )
133- print (f" ⏱️ Avg Query Time: { format_time (avg_time (node_stats .get ('query_times' , [])))} " )
134- print (f" ⏱️ Avg Local Get Time: { format_time (avg_time (node_stats .get ('local_get_times' , [])))} " )
135- print (f" ⏱️ Avg Get Time: { format_time (avg_time (node_stats .get ('remote_get_times' , [])))} " )
112+ # Only show stats for nodes that were actually tested
113+ if node_name in nodes_to_check :
114+ print (f" • { node_name } :" )
115+
116+ # Publish stats
117+ p_success = node_stats .get ('publish_success' , 0 )
118+ p_failed = node_stats .get ('publish_failed' , 0 )
119+ p_rate = round (p_success / (p_success + p_failed ) * 100 , 2 ) if (p_success + p_failed ) > 0 else 0.0
120+ print (f" 🔸 Publish: ✅ { p_success } / ❌ { p_failed } -> { p_rate } %" )
121+
122+ # Query stats
123+ q_success = node_stats .get ('query_success' , 0 )
124+ q_failed = node_stats .get ('query_failed' , 0 )
125+ q_rate = round (q_success / (q_success + q_failed ) * 100 , 2 ) if (q_success + q_failed ) > 0 else 0.0
126+ print (f" 🔸 Query: ✅ { q_success } / ❌ { q_failed } -> { q_rate } %" )
127+
128+ # Local Get stats
129+ lg_success = node_stats .get ('local_get_success' , 0 )
130+ lg_failed = node_stats .get ('local_get_failed' , 0 )
131+ lg_rate = round (lg_success / (lg_success + lg_failed ) * 100 , 2 ) if (lg_success + lg_failed ) > 0 else 0.0
132+ print (f" 🔸 Local Get: ✅ { lg_success } / ❌ { lg_failed } -> { lg_rate } %" )
133+
134+ # Remote Get stats
135+ rg_success = node_stats .get ('remote_get_success' , 0 )
136+ rg_failed = node_stats .get ('remote_get_failed' , 0 )
137+ rg_rate = round (rg_success / (rg_success + rg_failed ) * 100 , 2 ) if (rg_success + rg_failed ) > 0 else 0.0
138+ print (f" 🔸 Get: ✅ { rg_success } / ❌ { rg_failed } -> { rg_rate } %" )
139+
140+ # Timing stats
141+ def format_time (seconds ):
142+ return f"{ int (seconds // 60 )} min { seconds % 60 :.2f} sec" if seconds >= 60 else f"{ seconds :.2f} seconds"
143+
144+ def avg_time (times ):
145+ return sum (times ) / len (times ) if times else 0.0
146+
147+ print (f" ⏱️ Avg Publish Time: { format_time (avg_time (node_stats .get ('publish_times' , [])))} " )
148+ print (f" ⏱️ Avg Query Time: { format_time (avg_time (node_stats .get ('query_times' , [])))} " )
149+ print (f" ⏱️ Avg Local Get Time: { format_time (avg_time (node_stats .get ('local_get_times' , [])))} " )
150+ print (f" ⏱️ Avg Get Time: { format_time (avg_time (node_stats .get ('remote_get_times' , [])))} " )
136151
137152 print ("\n 📊 Error Breakdown by Node:" )
138153
139- # Get all test nodes from the environment
140- node_to_test = os .getenv ("NODE_TO_TEST" )
141-
142- if node_to_test :
143- # Test specific nodes
144- nodes_to_check = [node .strip () for node in node_to_test .split ("," )]
145- else :
146- # Check all possible nodes
147- nodes_to_check = [
148- "Node 01" , "Node 04" , "Node 05" , "Node 06" , "Node 07" , "Node 08" ,
149- "Node 09" , "Node 10" , "Node 13" , "Node 14" , "Node 21" , "Node 23" , "Node 37"
150- ]
151-
152154 # Process each node for errors
153155 for node_name in nodes_to_check :
154156 print (f"\n 🔧 { node_name } " )
0 commit comments