class Actir::ParallelTests::Test::Logger

Public Class Methods

log(result, process_index) click to toggle source
# File lib/actir/parallel_tests/test/logger.rb, line 18
def log(result, process_index)
  #获取执行环境的当前进程号以及总进程数目
  #process_index = env["TEST_ENV_NUMBER"]
  #num_process   = env["PARALLEL_TEST_GROUPS"]
  prepare(process_index)

  lock(process_index) do
    File.open(logfile(process_index), 'a') { |f| f.puts result }
  end
end
show_log(process_index) click to toggle source

打印每个进程的log文件内容到屏幕上

# File lib/actir/parallel_tests/test/logger.rb, line 30
def show_log(process_index)
  separator = "\n"
  File.read(logfile(process_index)).split(separator).map do |line| 
    if line == ""
      puts line 
    else
      puts "[process_" + process_index.to_s + "] - " + line 
    end
  end
end

Private Class Methods

lock(process_index) { || ... } click to toggle source
# File lib/actir/parallel_tests/test/logger.rb, line 53
def lock(process_index)
  File.open(logfile(process_index), 'r') do |f|
    begin
      f.flock File::LOCK_EX
      yield
    ensure
      f.flock File::LOCK_UN
    end
  end
end
logfile(process_index) click to toggle source
# File lib/actir/parallel_tests/test/logger.rb, line 64
def logfile(process_index)
  "tmp/parallel_test_p_#{process_index}.log"
end
prepare(process_index) click to toggle source

ensure folder exists + clean out previous log this will happen in multiple processes, but should be roughly at the same time so there should be no log message lost

# File lib/actir/parallel_tests/test/logger.rb, line 46
def prepare(process_index)
  return if @@prepared[process_index]
  @@prepared[process_index] = true
  FileUtils.mkdir_p(File.dirname(logfile(process_index)))
  File.write(logfile(process_index), '')
end