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