首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用RSpec进行性能测试

问用RSpec进行性能测试
EN

Stack Overflow用户
提问于 2012-06-24 15:06:08
回答 2查看 1.3K关注 0票数 3

我正试图将性能测试整合到一个非Rails应用程序的测试套件中,并遇到了一些问题。

  1. 我不需要每次都运行perf测试,我如何排除它们?注释和取消注释config.filter_run_excluding :perf => true似乎是个坏主意。
  2. 如何报告基准测试结果?我认为RSpec在这方面有一些机制。
EN

回答 2

Stack Overflow用户

发布于 2019-04-21 19:01:48

我创建了rspec-基准 Ruby,用于在RSpec中编写性能测试。它对测试速度、资源使用和可伸缩性有很多期望。

例如,要测试代码的速度:

代码语言:javascript
复制
expect { ... }.to perform_under(60).ms

或者与另一个实现进行比较:

代码语言:javascript
复制
expect { ... }.to perform_faster_than { ... }.at_least(5).times

或者测试计算复杂性:

代码语言:javascript
复制
expect { ... }.to perform_logarithmic.in_range(8, 100_000)

或者查看分配了多少个对象:

代码语言:javascript
复制
expect {
  _a = [Object.new]
  _b = {Object.new => 'foo'}
}.to perform_allocation({Array => 1, Object => 2}).objects

要筛选测试,可以将规范分离到performance目录中,并添加rake任务。

代码语言:javascript
复制
require 'rspec/core/rake_task'

desc 'Run performance specs'
RSpec::Core::RakeTask.new(:perf) do |task|
  task.pattern = 'spec/performance{,/*/**}/*_spec.rb'
end

然后在需要的时候运行它们:

代码语言:javascript
复制
rake perf
票数 3
EN

Stack Overflow用户

发布于 2012-06-24 21:58:43

第一个问题部分解决,第二个问题在spec/spec_helper.rb中用这段代码完全解决。

代码语言:javascript
复制
class MessageHelper
  class << self
    def messages
      @messages ||= []
    end

    def add(msg)
      messages << msg
    end
  end
end

def message(msg)
  MessageHelper.add msg
end

RSpec.configure do |c|
  c.filter_run_excluding :perf => !ENV["PERF"]

  c.after(:suite) do
    puts "\nMessages:"
    MessageHelper.messages.each {|m| puts m}
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11178530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档