在 ruby 的测试/单元中,软件指示测试运行需要多长时间,以及一系列通过、错误和失败的行为就像一个伪进度条。
除了使用代码分析工具或单独运行测试之外,是否有一种简单的方法可以判断哪些测试方法快哪些慢?
在 ruby 的测试/单元中,软件指示测试运行需要多长时间,以及一系列通过、错误和失败的行为就像一个伪进度条。
除了使用代码分析工具或单独运行测试之外,是否有一种简单的方法可以判断哪些测试方法快哪些慢?
当我需要在大型测试套件中执行此操作时,我会覆盖 Test::Unit::TestCase 设置和拆卸。它没有给出精确的测量值,但它可以帮助评估相对速度。
module Test
module Unit
def setup
@start_time = Time.now
end
def teardown
puts "#{@method_name}: #{Time.now - @start_time}s"
end
end
end
根据莎拉的回答,我更喜欢另一种解决方案:
像 Sarah 写的那样设置,但是 Teardown 应该在列表中添加测试名称和执行时间。
所以你可以评估这个列表,进行排序或其他什么。我不了解Ruby,所以我不知道它是否会起作用。
这是JUnit的一些Java代码来解释我的想法......
public class ExecutionTimeTest {
public static ArrayList<Double> executionTimes;
public double start;
@BeforeClass
public static void initializeList() {
executionTimes = new ArrayList<Double>();
}
@AfterClass
public static void printExecutionTimes() {
int i = 1;
for (Double time : executionTimes) {
System.out.println("Test " + (i++) + ": " + time);
}
}
@Before
public void startExecutionTime() {
start = System.currentTimeMillis();
}
@After
public void calculateExecutionTime() {
executionTimes.add(System.currentTimeMillis() - start);
}
}
如果您使用的是 test-unit gem,以详细模式运行测试将为您提供有关每个测试花费多长时间的信息:
ruby test/test_unit.rb --verbose
Loaded suite test/test_unit
Started
ChaserTestCase:
test_handle_funny_characters_in_class_method_names: .: (0.000645)
test_handle_funny_characters_in_instance_method_names:.: (0.000523)
test_modify_and_unmodify_class_method: .: (0.000534)
...
Finished in 0.019894 seconds.
MiniTest也将进行基准测试。