Ruby 识别运行缓慢的测试

Ruby 识别运行缓慢的测试,ruby,unit-testing,testunit,Ruby,Unit Testing,Testunit,在ruby的测试/单元中,软件指示测试运行所需的时间,一系列的通过、错误和失败就像一个伪进度条 除了使用代码分析工具或单独运行测试外,是否有一种简单的方法可以判断哪些测试方法快,哪些慢?当我需要在大型测试套件中执行此操作时,我会覆盖test::Unit::TestCase设置和拆卸。它不能给出精确的测量结果,但可以帮助评估相对速度 module Test module Unit def setup @start_time = Time.now end d

在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

当我需要在大型测试套件中执行此操作时,我会覆盖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的回答,我更喜欢另一种解决方案:

安装程序与Sarah编写的类似,但拆卸应在列表中添加测试名称和执行时间。
所以你可以对这个列表进行评估,排序或者其他什么。我不知道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);
  }
}
公共类ExecutionTimeTest{
公共静态数组列表执行次数;
公共双启动;
@课前
公共静态void初始值列表(){
executionTimes=新建ArrayList();
}
@下课
公共静态void printExecutionTimes(){
int i=1;
用于(双倍时间:执行次数){
System.out.println(“测试”+(i++)+“:”+时间);
}
}
@以前
公共无效startExecutionTime(){
start=System.currentTimeMillis();
}
@之后
public void calculateExecutionTime(){
executionTimes.add(System.currentTimeMillis()-start);
}
}

根据Sarah的回答,我更喜欢另一种解决方案:

安装程序与Sarah编写的类似,但拆卸应在列表中添加测试名称和执行时间。
所以你可以对这个列表进行评估,排序或者其他什么。我不知道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);
  }
}
公共类ExecutionTimeTest{
公共静态数组列表执行次数;
公共双启动;
@课前
公共静态void初始值列表(){
executionTimes=新建ArrayList();
}
@下课
公共静态void printExecutionTimes(){
int i=1;
用于(双倍时间:执行次数){
System.out.println(“测试”+(i++)+“:”+时间);
}
}
@以前
公共无效startExecutionTime(){
start=System.currentTimeMillis();
}
@之后
public void calculateExecutionTime(){
executionTimes.add(System.currentTimeMillis()-start);
}
}

如果您使用的是测试单元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将进行基准测试。

如果您使用的是测试单元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将有基准测试。

有趣。在Ruby中,您可能希望在TestSuite类中这样做。如果您将它添加到TestCase中,那么每个测试类将有一个执行时间数组,而不是套件有一个。这就是BeforeClass和Before之间的区别。BeforeClass将执行一次,Before将对每个测试用例执行一次。在Ruby中,您可能希望在TestSuite类中这样做。如果您将它添加到TestCase中,那么每个测试类将有一个执行时间数组,而不是套件有一个。这就是BeforeClass和Before之间的区别。BeforeClass将执行一次,Before将对每个测试用例执行一次。