No release in over a year
An RSpec profiler that shows you how long specs are spending in `sleep`
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Sleep Study

Sleep Study is an RSpec formatter that shows you which specs are spending the most time in sleep, and where exactly in your code those sleeps are happening.

The sleep method can be a useful tool, especially in networking code (eg: backing off after hitting a rate limit, inserting a pause between polls of a remote job status, etc). In your test environment, however, those sleeps are generally unnecessary, and it's easy to forget to stub them and end up with specs that are wasting time sleeping for no reason, adding to your build time. Running Sleep Study will identify these specs for you.

RUNNING SLEEP STUDY WILL SLOW DOWN YOUR SPECS

Sleep Study works by putting tracers around every call and return of every C routine that your code calls, and saving benchmarking data if that routine is a sleep function. As you might expect, running Ruby code involves executing a lot of C routines. Those tracers are not free, and having them in place can add an extra 20-25% to your specs' execution time. As such, it's a good idea to run Sleep Study either in a separate CI build, or only occasionally to audit your test suite.

Usage

After adding rspec-sleep_study to your Gemfile, run RSpec with the --format RSpec::SleepStudy option. (If you want the normal progress report as well, you can run RSpec with both formatters: --format progress --format RSpec::SleepStudy)

Example

bundle exec rspec --format RSpec::SleepStudy spec/

The following examples spent the most time in `sleep`:
  20.57 seconds: ./spec/features/user_sends_email_spec.rb:23
    - 7.46 seconds: ./lib/api_client.rb:12
    - 6.752 seconds: ./gems/selenium-webdriver/lib/selenium/webdriver/common/socket_poller.rb:108
  14.06 seconds: ./spec/features/apply_filters_spec.rb:39
    - 5.21 seconds: ./lib/api_client.rb:12
  10.0 seconds: ./spec/features/password_reset_email_spec.rb:22
  10.0 seconds: ./spec/features/password_reset_email_spec.rb:47
  9.06 seconds: ./spec/features/dashboard_spec.rb:49
  8.54 seconds: ./spec/features/apply_filters_spec.rb:96
  8.17 seconds: ./spec/features/dashboard_spec.rb:7
  6.69 seconds: ./spec/features/create_new_widget_spec.rb:26
  6.63 seconds: ./spec/features/create_report_spec.rb:18
  6.41 seconds: ./spec/features/create_new_widget_spec.rb:14