How to use profile method of TestProf.RubyProf Package

Best Test-prof_ruby code snippet using TestProf.RubyProf.profile

ruby_prof.rb

Source:ruby_prof.rb Github

copy

Full Screen

...11 #12 # # or in your code13 # TestProf::RubyProf.run14 #15 # To profile a specific examples add :rprof tag to it:16 #17 # it "is doing heavy stuff", :rprof do18 # ...19 # end20 #21 module RubyProf22 # RubyProf configuration23 class Configuration24 PRINTERS = {25 "flat" => "FlatPrinter",26 "flat_wln" => "FlatPrinterWithLineNumbers",27 "graph" => "GraphPrinter",28 "graph_html" => "GraphHtmlPrinter",29 "dot" => "DotPrinter",30 "." => "DotPrinter",31 "call_stack" => "CallStackPrinter",32 "call_tree" => "CallTreePrinter",33 "multi" => "MultiPrinter"34 }.freeze35 # Mapping from printer to report file extension36 # NOTE: txt is not included and considered default37 PRINTER_EXTENSTION = {38 "graph_html" => "html",39 "dot" => "dot",40 "." => "dot",41 "call_stack" => "html"42 }.freeze43 LOGFILE_PREFIX = "ruby-prof-report"44 attr_accessor :printer, :mode, :min_percent,45 :include_threads, :exclude_common_methods,46 :test_prof_exclusions_enabled,47 :custom_exclusions48 def initialize49 @printer = ENV["TEST_RUBY_PROF"].to_sym if PRINTERS.key?(ENV["TEST_RUBY_PROF"])50 @printer ||= ENV.fetch("TEST_RUBY_PROF_PRINTER", :flat).to_sym51 @mode = ENV.fetch("TEST_RUBY_PROF_MODE", :wall).to_sym52 @min_percent = 153 @include_threads = false54 @exclude_common_methods = true55 @test_prof_exclusions_enabled = true56 @custom_exclusions = {}57 end58 def include_threads?59 include_threads == true60 end61 def exclude_common_methods?62 exclude_common_methods == true63 end64 def test_prof_exclusions_enabled?65 @test_prof_exclusions_enabled == true66 end67 # Returns an array of printer type (ID) and class.68 def resolve_printer69 return ["custom", printer] if printer.is_a?(Module)70 type = printer.to_s71 raise ArgumentError, "Unknown printer: #{type}" unless72 PRINTERS.key?(type)73 [type, ::RubyProf.const_get(PRINTERS[type])]74 end75 end76 # Wrapper over RubyProf profiler and printer77 class Report78 include TestProf::Logging79 def initialize(profiler)80 @profiler = profiler81 end82 # Stop profiling and generate the report83 # using provided name.84 def dump(name)85 result = @profiler.stop86 printer_type, printer_class = config.resolve_printer87 if %w[call_tree multi].include?(printer_type)88 path = TestProf.create_artifact_dir89 printer_class.new(result).print(90 path: path,91 profile: "#{RubyProf::Configuration::LOGFILE_PREFIX}-#{printer_type}-" \92 "#{config.mode}-#{name}",93 min_percent: config.min_percent94 )95 else96 path = build_path name, printer_type97 File.open(path, "w") do |f|98 printer_class.new(result).print(f, min_percent: config.min_percent)99 end100 end101 log :info, "RubyProf report generated: #{path}"102 end103 private104 def build_path(name, printer)105 TestProf.artifact_path(106 "#{RubyProf::Configuration::LOGFILE_PREFIX}-#{printer}-#{config.mode}-#{name}" \107 ".#{RubyProf::Configuration::PRINTER_EXTENSTION.fetch(printer, "txt")}"108 )109 end110 def config111 RubyProf.config112 end113 end114 class << self115 include Logging116 def config117 @config ||= Configuration.new118 end119 def configure120 yield config121 end122 # Run RubyProf and automatically dump123 # a report when the process exits.124 #125 # Use this method to profile the whole run.126 def run127 report = profile128 return unless report129 @locked = true130 log :info, "RubyProf enabled globally"131 at_exit { report.dump("total") }132 end133 def profile134 if locked?135 log :warn, <<~MSG136 RubyProf is activated globally, you cannot generate per-example report.137 Make sure you haven's set the TEST_RUBY_PROF environmental variable.138 MSG139 return140 end141 return unless init_ruby_prof142 options = {143 merge_fibers: true144 }145 options[:include_threads] = [Thread.current] unless146 config.include_threads?147 profiler = ::RubyProf::Profile.new(options)148 profiler.exclude_common_methods! if config.exclude_common_methods?149 if config.test_prof_exclusions_enabled?150 # custom test-prof exclusions151 exclude_rspec_methods(profiler)152 # custom global exclusions153 exclude_common_methods(profiler)154 end155 config.custom_exclusions.each do |klass, mids|156 profiler.exclude_methods! klass, *mids157 end158 profiler.start159 Report.new(profiler)160 end161 private162 def locked?163 @locked == true164 end165 def init_ruby_prof166 return @initialized if instance_variable_defined?(:@initialized)167 ENV["RUBY_PROF_MEASURE_MODE"] = config.mode.to_s168 @initialized = TestProf.require(169 "ruby-prof",170 <<~MSG171 Please, install 'ruby-prof' first:172 # Gemfile173 gem 'ruby-prof', '>= 0.16.0', require: false174 MSG175 ) { check_ruby_prof_version }176 end177 def check_ruby_prof_version178 if Utils.verify_gem_version("ruby-prof", at_least: "0.17.0")179 true180 else181 log :error, <<~MGS182 Please, upgrade 'ruby-prof' to version >= 0.17.0.183 MGS184 false185 end186 end187 def exclude_rspec_methods(profiler)188 return unless TestProf.rspec?189 RSpecExclusions.generate.each do |klass, mids|190 profiler.exclude_methods!(klass, *mids)191 end192 end193 def exclude_common_methods(profiler)194 if defined?(TSort)195 profiler.exclude_methods!(196 TSort,197 :tsort_each198 )199 profiler.exclude_methods!(200 TSort.singleton_class,201 :tsort_each, :each_strongly_connected_component,202 :each_strongly_connected_component_from203 )204 end205 profiler.exclude_methods!(206 BasicObject,207 :instance_exec208 )209 end210 end211 end212end213if TestProf.rspec?214 require "test_prof/ruby_prof/rspec"215 require "test_prof/ruby_prof/rspec_exclusions"216end217# Hook to run RubyProf globally218TestProf.activate("TEST_RUBY_PROF") do219 TestProf::RubyProf.run...

Full Screen

Full Screen

rspec.rb

Source:rspec.rb Github

copy

Full Screen

1# frozen_string_literal: true2require "test_prof/utils/rspec"3module TestProf4 module RubyProf5 # Reporter for RSpec to profile specific examples with RubyProf6 class Listener # :nodoc:7 class << self8 attr_accessor :report_name_generator9 end10 self.report_name_generator = Utils::RSpec.method(:example_to_filename)11 NOTIFICATIONS = %i[12 example_started13 example_finished14 ].freeze15 def example_started(notification)16 return unless profile?(notification.example)17 notification.example.metadata[:rprof_report] =18 TestProf::RubyProf.profile19 end20 def example_finished(notification)21 return unless profile?(notification.example)22 notification.example.metadata[:rprof_report]&.dump(23 self.class.report_name_generator.call(notification.example)24 )25 end26 private27 def profile?(example)28 example.metadata.key?(:rprof)29 end30 end31 end32end33RSpec.configure do |config|34 config.before(:suite) do35 listener = TestProf::RubyProf::Listener.new36 config.reporter.register_listener(37 listener, *TestProf::RubyProf::Listener::NOTIFICATIONS38 )39 end40end...

Full Screen

Full Screen

profile

Using AI Code Generation

copy

Full Screen

1 10000.times { 1 + 1 }2 10000.times { 1 + 1 }3 10000.times { 1 + 1 }4 10000.times { 1 + 1 }5 10000.times { 1 + 1 }6 10000.times { 1 + 1 }7 10000.times { 1 + 1 }8 10000.times { 1 + 1 }9 10000.times { 1 + 1 }10 10000.times { 1 + 1 }

Full Screen

Full Screen

profile

Using AI Code Generation

copy

Full Screen

1TestProf::RubyProf.profile('profile_result') do2TestProf::RubyProf.profile('profile_result', :mode => :flat) do3TestProf::RubyProf.profile('profile_result', :mode => :flat, :printer => :GraphHtmlPrinter) do4TestProf::RubyProf.profile('profile_result', :mode => :flat, :printer => :GraphHtmlPrinter, :sort_order => :self_time) do5TestProf::RubyProf.profile('profile_result', :mode => :flat, :printer => :GraphHtmlPrinter, :sort_order => :self

Full Screen

Full Screen

profile

Using AI Code Generation

copy

Full Screen

1TestProf::RubyProf.profile { 10.times { 1 + 1 } }2TestProf::RubyProf.profile { 10.times { 1 + 1 } }3TestProf::RubyProf.profile { 10.times { 1 + 1 } }4TestProf::RubyProf.profile { 10.times { 1 + 1 } }5TestProf::RubyProf.profile { 10.times { 1 + 1 } }6TestProf::RubyProf.profile { 10.times { 1 + 1 } }7TestProf::RubyProf.profile { 10.times { 1 + 1 } }8TestProf::RubyProf.profile { 10.times { 1 + 1 } }9TestProf::RubyProf.profile { 10.times { 1 + 1 } }10TestProf::RubyProf.profile { 10.times { 1 + 1 } }11TestProf::RubyProf.profile { 10.times { 1 + 1 } }

Full Screen

Full Screen

profile

Using AI Code Generation

copy

Full Screen

1 printer = RubyProf::FlatPrinter.new(result)2 printer.print(STDOUT)3 [1, 2, 3].map { |i| i + 1 }4 [1, 2, 3].map { |i| i + 1 }

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Test-prof_ruby automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful