在ruby中每次执行后需要打印测试的开始和结束时间

Posted

技术标签:

【中文标题】在ruby中每次执行后需要打印测试的开始和结束时间【英文标题】:Need to print the start and end time of the test after each execution in ruby 【发布时间】:2014-11-28 06:06:18 【问题描述】:

我是自动化领域的新手,在编写本文时需要帮助。

 before(:each) do
      # test start time 
      # video start time :00:00:00
      setup function
    end

it "test case 1" do
   #perform action1
   #perform action2 ...
end

it "test case 2" do
   #perform action1
   #perform action2 ...
end

after(:each) do
      teardown function
      #test end time
      #video end time : 00:00:57
  end

我的 .rb 文件看起来像这样,我需要打印测试执行前后的时间

想法:

当批处理脚本开始执行时,视频也同时开始录制 所以脚本打印的时间应该和视频播放时间相匹配 视频播放时间从 00:00:00 开始 所以当第一个测试用例开始时,显示的执行时间应该是 00:00:00 同样,第二个测试用例将在 00:00:57 执行,然后在 00:01:46 执行下一个测试用例

这样我就可以匹配在视频的哪个时间轴执行了哪个测试用例

Final Output: 
Video start time: 00:00:00
Video end time : 00:00:57

Video start time: 00:00:57
Video end time: 00:01:40

我必须用 ruby​​ 编写它。我怎样才能做到这一点。我应该使用计时器吗?

【问题讨论】:

【参考方案1】:

要跟踪时间,只需存储开始时间,并在您需要知道从那时起经过了多少秒时将当前时间与该时间进行比较:

start_time = Time.now
sleep(1)
Time.now - start_time # => 1.001715

为了在 RSpec 测试套件中的每个示例之前和之后做一些事情,around hooks 是要走的路。

around(:each) do |example|
  # This happens before the example
  example.run
  # This happens after the example
end

要将秒数格式化为“HH:MM:SS”,您可以使用Time.atstrftime 的组合,如Ruby/Rails - How to convert seconds to time? 中所述:

Time.at(123).utc.strftime("%H:%M:%S")
=> "00:02:03"

结合以上内容,您应该可以执行以下操作:

around(:each) do |example|
  $start_time ||= Time.now
  elapsed_seconds = Time.now - $start_time
  puts "Video start time: #Time.at(elapsed_seconds).utc.strftime("%H:%M:%S")"
  example.run
  elapsed_seconds = Time.now - $start_time
  puts "Video end time: #Time.at(elapsed_seconds).utc.strftime("%H:%M:%S")"
  puts
end

这应该输出每个示例经过的秒数,例如:

Video start time: 00:00:00
Video end time: 00:00:01

Video start time: 00:00:01
Video end time: 00:00:03

Video start time: 00:00:03
Video end time: 00:00:03

【讨论】:

以上是关于在ruby中每次执行后需要打印测试的开始和结束时间的主要内容,如果未能解决你的问题,请参考以下文章

如何查询存储过程开始执行时间和结束时间

Pytest测试用例之setup与teardown方法

每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行

linux 结束打印任务

StopWatch 监控Java代码运行时间和分析性能

如何打印数据框的开始日期和结束日期?