Ruby 识别运行缓慢的测试
在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
除了使用代码分析工具或单独运行测试外,是否有一种简单的方法可以判断哪些测试方法快,哪些慢?当我需要在大型测试套件中执行此操作时,我会覆盖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将对每个测试用例执行一次。