2017-01-06 3 views
0

In Gurke Vergangenheit scheine ich eine Option zu erinnern, die Zeit, die für jeden SchrittKann ich für jeden Schritt in der Gurke Zeitstempel bekommen?

And I navigate to a widget with widget form 
    #features/step_definitions/common_sd.rb:26 
    ### STEP COMPLETED 9.634963s 

Denken dieser Funktionalität weg von Gurken ging abzuschließen nahm zu bekommen, meine Arbeit um war zu Zeitstempel Funktionalität zu jedem Schnipsel hinzufügen das fühlt sich klobig

st = Time.now 
... 
step_end(st) 

und

def step_end(st) 
    puts "### STEP COMPLETED #{(Time.now - st)}s" 
end 

ich die env.rb verwenden könnte, wenn ich wollte, universelle Haken für den Anfang und das Ende jedes Szenarios, aber keine Schritte, soweit ich das beurteilen kann.

Ich kann eine Art von globalen Schritt-Wrapper erstellen, der die Zeitmetriken hinzufügt und jeden Schritt aufruft.

Irgendwelche Ideen auf dem elegantesten Weg Zeit für einen Schritt zu bekommen?

+1

Haben Sie bei den bereits vorhandenen Haken sah Gurke bietet? Speziell ['AfterStep'] (https://github.com/cucumber/cucumber/wiki/Hooks#step-hooks) – engineersmnky

+0

Ja, aber das wäre immer noch eine Zeile, die zu jedem Szenario hinzugefügt wurde. Wenn ich weiß, dass ich Zeit brauche, um bei jedem Schritt weiterzumachen, würde ich gerne einmal den Global Command schreiben, oder finde die schwer fassbare Gurkenflagge '' 'Gurke - Zeitstempel features \ tests \' '' – TangibleDream

Antwort

1

Dies ist Kopieren-Einfügen von meinem features/support/env.rb. Ich kündigte vor Gurke Jahren verwendet und daher kann ich bieten nicht eine anspruchsvolle Antwort, da ich habe fast alles vergessen, aber ich hoffe, dass diese Schnipsel führen können Sie nach rechts Richtung:

# encoding: utf-8 

require 'bundler/setup' 
require 'rspec/expectations' 

MAX_SCENARIOS = 10 
scenario_times = {} 

Around() do |scenario, block| 
    start = Time.now 
    block.call 
    sc = if scenario.respond_to?(:scenario_outline) 
     scenario.scenario_outline 
     else 
     scenario 
     end 
    t = scenario_times["#{sc.feature.file}::#{scenario.name}"] = Time.now - start 
    # puts "### STEP COMPLETED #{t}s" 
end 

# print top 10 sorted by execution time 
at_exit do 
    max_scenarios = if scenario_times.size > MAX_SCENARIOS 
        MAX_SCENARIOS 
        else 
        scenario_times.size 
        end 

    puts '—'*20 + " top #{max_scenarios} slowest " + '—'*20 
    sorted_times = scenario_times.sort { |a, b| b[1] <=> a[1] } 
    sorted_times[0..max_scenarios - 1].each do |key, value| 
    puts "#{value.round(5)} #{key}" 
    end 
end 
Verwandte Themen