在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.at
和strftime
的组合,如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中每次执行后需要打印测试的开始和结束时间的主要内容,如果未能解决你的问题,请参考以下文章