[Groonga-commit] groonga/grntest [master] Show statistics per worker at the end

Back to archive index

null+****@clear***** null+****@clear*****
Sat Aug 11 14:13:00 JST 2012


Kouhei Sutou	2012-08-11 14:13:00 +0900 (Sat, 11 Aug 2012)

  New Revision: e34b5f4e0c566842e8a218db0f1394d098fd8ab1
  https://github.com/groonga/grntest/commit/e34b5f4e0c566842e8a218db0f1394d098fd8ab1

  Log:
    Show statistics per worker at the end

  Modified files:
    lib/groonga/tester.rb

  Modified: lib/groonga/tester.rb (+92 -42)
===================================================================
--- lib/groonga/tester.rb    2012-08-11 00:34:23 +0900 (41d6ab6)
+++ lib/groonga/tester.rb    2012-08-11 14:13:00 +0900 (468da65)
@@ -240,6 +240,12 @@ module Groonga
         @test_script_path = nil
         @interruptted = false
         @status = "not running"
+
+        @n_tests = 0
+        @n_passed_tests = 0
+        @n_failed_tests = 0
+        @n_not_checked_tests = 0
+        @elapsed_time = 0
       end
 
       def interrupt
@@ -255,29 +261,50 @@ module Groonga
         @test_script_path.basename(".*").to_s
       end
 
+      def statistics
+        items = [
+          "#{@n_tests} tests",
+          "#{@n_passed_tests} passes",
+          "#{@n_failed_tests} failures",
+          "#{@n_not_checked_tests} not checked_tests",
+        ]
+        "#{throughput}: " + items.join(", ")
+      end
+
+      def throughput
+        if @elapsed_time.zero?
+          tests_per_second = 0
+        else
+          tests_per_second = @n_tests / @elapsed_time
+        end
+        "%6.2f tests/sec" % tests_per_second
+      end
+
       def run(queue)
         succeeded = true
 
-        @reporter.start_worker(self)
-        catch do |tag|
-          loop do
-            suite_name, test_script_path = queue.pop
-            break if test_script_path.nil?
-
-            unless @suite_name == suite_name
-              @reporter.finish_suite(self) if @suite_name
-              @suite_name = suite_name
-              @reporter.start_suite(self)
-            end
-            @test_script_path = test_script_path
-            runner = TestRunner.new(@tester, self)
-            succeeded = false unless runner.run
+        measure do
+          @reporter.start_worker(self)
+          catch do |tag|
+            loop do
+              suite_name, test_script_path = queue.pop
+              break if test_script_path.nil?
+
+              unless @suite_name == suite_name
+                @reporter.finish_suite(self) if @suite_name
+                @suite_name = suite_name
+                @reporter.start_suite(self)
+              end
+              @test_script_path = test_script_path
+              runner = TestRunner.new(@tester, self)
+              succeeded = false unless runner.run
 
-            break if interruptted?
+              break if interruptted?
+            end
+            @status = "finished"
+            @reporter.finish_suite(@suite_name) if @suite_name
+            @suite_name = nil
           end
-          @status = "finished"
-          @reporter.finish_suite(@suite_name) if @suite_name
-          @suite_name = nil
         end
         @reporter.finish_worker(self)
 
@@ -292,27 +319,39 @@ module Groonga
 
       def pass_test(result)
         @status = "passed"
+        @n_passed_tests += 1
         @test_suites_result.test_passed
         @reporter.pass_test(self, result)
       end
 
       def fail_test(result)
         @status = "failed"
+        @n_failed_tests += 1
         @test_suites_result.test_failed(test_name)
         @reporter.fail_test(self, result)
       end
 
       def no_check_test(result)
         @status = "not checked"
+        @n_not_checked_tests += 1
         @test_suites_result.test_not_checked
         @reporter.no_check_test(self, result)
       end
 
       def finish_test(result)
+        @n_tests += 1
         @test_suites_result.test_finished
         @reporter.finish_test(self, result)
         @test_script_path = nil
       end
+
+      private
+      def measure
+        started_time = Time.now
+        yield
+      ensure
+        @elapsed_time = Time.now - started_time
+      end
     end
 
     class Result
@@ -1245,6 +1284,16 @@ EOF
       end
 
       private
+      def report_summary(result)
+        puts("#{result.n_tests} tests, " +
+               "#{result.n_passed_tests} passes, " +
+               "#{result.n_failed_tests} failures, " +
+               "#{result.n_not_checked_tests} not checked tests.")
+        pass_ratio = result.pass_ratio
+        elapsed_time = result.elapsed_time
+        puts("%.4g%% passed in %.4fs." % [pass_ratio, elapsed_time])
+      end
+
       def print(message)
         @current_column += message.to_s.size
         @output.print(message)
@@ -1319,13 +1368,7 @@ EOF
 
       def finish(result)
         puts
-        puts("#{result.n_tests} tests, " +
-               "#{result.n_passed_tests} passes, " +
-               "#{result.n_failed_tests} failures, " +
-               "#{result.n_not_checked_tests} not checked tests.")
-        pass_ratio = result.pass_ratio
-        elapsed_time = result.elapsed_time
-        puts("%.4g%% passed in %.4fs." % [pass_ratio, elapsed_time])
+        report_summary(result)
       end
 
       private
@@ -1363,10 +1406,6 @@ EOF
 
       def start(workers)
         @workers = workers
-        n_workers.times do
-          puts
-          puts
-        end
       end
 
       def start_worker(worker)
@@ -1405,26 +1444,37 @@ EOF
       end
 
       def finish(result)
+        draw
         puts
-        puts("#{result.n_tests} tests, " +
-               "#{result.n_passed_tests} passes, " +
-               "#{result.n_failed_tests} failures, " +
-               "#{result.n_not_checked_tests} not checked tests.")
-        pass_ratio = result.pass_ratio
-        elapsed_time = result.elapsed_time
-        puts("%.4g%% passed in %.4fs." % [pass_ratio, elapsed_time])
+        report_summary(result)
       end
 
       private
+      def draw
+        @workers.each do |worker|
+          draw_status_line(worker)
+          draw_test_line(worker)
+        end
+      end
+
+      def draw_status_line(worker)
+        clear_line
+        puts("[#{worker.id}] (#{worker.status}) #{worker.suite_name}")
+      end
+
+      def draw_test_line(worker)
+        clear_line
+        if worker.test_name
+          puts("  #{worker.test_name}")
+        else
+          puts("  #{worker.statistics}")
+        end
+      end
+
       def redraw
         @mutex.synchronize do
+          draw
           up_n_lines(n_using_lines)
-          @workers.each do |worker|
-            clear_line
-            puts("[#{worker.id}] (#{worker.status}) #{worker.suite_name}")
-            clear_line
-            puts("  #{worker.test_name}")
-          end
         end
       end
 
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index