2017-01-06 5 views
0

В огурца прошлом, я, кажется, помню вариант, чтобы получить время, которое потребовалось для каждого шага, чтобы завершитьМогу ли я получить временные метки для каждого шага в огурце?

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

Думая эту функциональность ушла из огурца, моя работа вокруг, чтобы добавить функциональность метки времени для каждого фрагмента кода который чувствует себя неуклюжей

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

и

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

Я мог бы использовать env.rb если бы я хотел универсальные крючки для начала и конца каждого сценария, но не шаги, насколько я могу судить.

Я могу создать своего рода глобальную оболочку, которая добавляет метрики времени и вызывает каждый шаг.

Любые идеи по наиболее изящному способу получить время для завершения на шаг?

+1

Вы смотрели на уже имеющиеся крючках огурец обеспечивает? В частности ['AfterStep'] (https://github.com/cucumber/cucumber/wiki/Hooks#step-hooks) – engineersmnky

+0

Да, но это все равно будет линией, добавленной к каждому сценарию. Если я знаю, что хочу, чтобы я успевал на каждом шагу идти вперед, мне бы очень хотелось написать глобальную команду один раз или найти этот неуловимый флаг огурца '' 'cucumber --timestamp features \ tests \' '' – TangibleDream

ответ

1

Это копия с моих функций/поддержка/env.rb. Я ушел с использованием огурца лет назад и, следовательно, не могу обеспечить сложный ответ, так как я почти все забыл, но я надеюсь, что этот фрагмент может привел вас к правильному направлению:

# 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 

 Смежные вопросы

  • Нет связанных вопросов^_^