This is probably closer to what you want.
https://github.com/piotrmurach/rspec-benchmark

Allen Madsen
http://www.allenmadsen.com

On Thu, Feb 23, 2017 at 7:58 AM, Jason Fleetwood-Boldt <[email protected]
> wrote:

> Rspec is picky about the "describe" and "it" blocks. Those are methods
> being called, and as such, create your specs in a "pre-run" place in
> memory. Generally you should avoid any Ruby code outside of an "it" block
> (of course, except for the provided Rspec hooks— before(:each),
> before(:all), etc) as this often causes problems.
>
> First of all, you're not even supposed to have 2 specs with identical
> names (although you could fix that easily by putting the loop variable 'i'
> inside of your spec name, like "Example it block for #{i} iteration")
>
> Second of all, you're actually telling Rspec to create 50,000 specs.
> (Since you two example blocks, actually 100,000 specs). Are you insane?
> There's no way I could possibly get my Mac — which admittedly is no longer
> top of the line — to run 100,000 specs in memory.
>
> Why would you run the same spec 100,000 times? What you're trying to do
> does not make any sense.
>
> Now, perhaps you want to loop through some *operation* 50,000 times. In
> this case, you'd have *1 spec* that would have the for loop *inside* of
> it, not the "it" inside of the for loop which is your problem.
>
> And the short answer is : Rspec is a testing tool for Ruby code,
> specifically *domain logic*. As you say, it is not suitable for stress
> testing or load testing. For load or stress testing, you'll almost
> certainly want to do this in a Production environment (or a Staging
> environment, assuming you have Prod-Staging parity) as you'l need to
> load/stress test against the real architecture you're running on.
>
> I've never heard of anyone using Rspec for load or stress testing. Your
> mileage may vary, and perhaps what you're trying to do is use Rspec to hit
> an external site (like your Production site), which makes slightly more
> sense. But still, I see no reason why the for loop is outside of the "it"
> statement.
>
> Rspec *does not run procedurally* as the code might suggest (and as many,
> many junior Ruby people get confused by), it creates the specs first by
> parsing the whole file ("describe" and "it" are actually methods being
> called to create specs in memory.), then it runs all the specs after having
> parsed them. The reason you see it crash without running anything is that
> you've just maxed out your memory before you've even run your very first
> spec. All it's doing is maxing out while parsing the file and creating the
> specs (100,000 of them) in memory.
>
> -Jason
>
>
>
>
> On Feb 23, 2017, at 5:58 AM, Satya Rao <[email protected]> wrote:
>
> Thanks Jon for your quick reply, what I observed with rspec code is, first
> it tries to loop over 5 lack times and then try to run it blocks, it means
> the looping is actually happening twice i.e 10 lack times, is that a rspec
> a limitation. Is there any other solution other than increasing the RAM?
>
> And then Rspec is not suitable for stress scenarios?
>
>
> On Thursday, 23 February 2017 16:22:53 UTC+5:30, Jon Rowe wrote:
>>
>> You’re getting that error because you’re running out of memory, the two
>> code snippets you describe are not identical, the RSpec one creates more
>> classes and objects under the hood, you should reduce the amount of specs
>> you are trying to create at once or make more memory available to Ruby.
>>
>> Hope that helps
>>
>> Jon Rowe
>> ---------------------------
>> [email protected]
>> jonrowe.co.uk
>>
>> On Thursday, 23 February 2017 at 21:13, Satya Rao wrote:
>>
>> Hi Everybody,
>>  I'm new to Rspec. I'm getting '[FATAL] failed to allocate memory' when I
>> loop through some it blocks over 500000 times. And when tried the same with
>> pure ruby I'm not getting the fatal error and the execution was successful.
>> Below is my code.
>>
>> Rspec code:
>>
>> fatal_error_check_spec.rb
>> --------------------------------------
>>
>> describe "fatal error check" do
>> for i in 1 .. 500000
>> it "Example it block 1" do
>> puts "My first it"
>> end
>> it "Example it block 2" do
>> puts "My second it"
>> end
>> end
>> end
>>
>>
>>
>> When running the above rspec code  gives me an above fatal error after ~4
>> mins without running anything.
>>
>>
>> Pure Ruby code:
>>
>> fatal_error_check.rb
>> -----------------------------
>>
>> for i in 1 .. 500000
>> puts "My first it"
>> puts "My second it"
>> end
>>
>> When running this ruby code, I didn't get any error and printed those two
>> puts statements 5 lack times successfully.
>>
>>
>> Please help me with solving the above fatal error issue with Rspec. What
>> should I do to fix this error.
>>
>>
>> My system env is as follows:
>> -----------------------------------------
>> Windows 7 PC qith 8GB RAM
>> Ruby version: 1.9.3
>> rspec (3.5.0)
>>
>>
>> Please help me to fix this issue.
>>
>>
>> Thanks,
>> Satya.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "rspec" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/rspec/c2824e72-abb7-4374-b2a9-7137acad9aea%40googlegroups.com
>> <https://groups.google.com/d/msgid/rspec/c2824e72-abb7-4374-b2a9-7137acad9aea%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/rspec/ea6d9921-0bb7-4126-bdca-fcad936c2215%40googlegroups.com
> <https://groups.google.com/d/msgid/rspec/ea6d9921-0bb7-4126-bdca-fcad936c2215%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
> ----
>
> Jason Fleetwood-Boldt
> [email protected]
> http://www.jasonfleetwoodboldt.com/writing
>
> If you'd like to reply by encrypted email you can find my public key on
> jasonfleetwoodboldt.com (more about setting GPG: https://gpgtools.org)
>
> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/rspec/26421B36-7A39-46EE-9E75-7FEE81766159%40datatravels.com
> <https://groups.google.com/d/msgid/rspec/26421B36-7A39-46EE-9E75-7FEE81766159%40datatravels.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/CAK-y3CtQ3h_NVww6qRRH%2BG4a0rHtTM1m-vXyNoRXygrCAZoTOw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to