cucumber_timing_presenter 1.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/.document +5 -0
  2. data/.gitignore +49 -0
  3. data/Gemfile +7 -0
  4. data/Gemfile.lock +36 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +2 -0
  8. data/cucumber_timing_presenter.gemspec +21 -0
  9. data/lib/cucumber_timing_presenter.rb +10 -0
  10. data/lib/cucumber_timing_presenter/all_usage_results_html_presenter.rb +16 -0
  11. data/lib/cucumber_timing_presenter/configuration.rb +19 -0
  12. data/lib/cucumber_timing_presenter/html_template.rb +32 -0
  13. data/lib/cucumber_timing_presenter/javascript/jquery.sparkline.min.js +94 -0
  14. data/lib/cucumber_timing_presenter/step_average_and_total_html_presenter.rb +18 -0
  15. data/lib/cucumber_timing_presenter/step_times_of_whole_html_presenter.rb +16 -0
  16. data/lib/cucumber_timing_presenter/templates/all_usage_results.html +15 -0
  17. data/lib/cucumber_timing_presenter/templates/step_average_and_total.html +24 -0
  18. data/lib/cucumber_timing_presenter/templates/step_times_of_whole.html +16 -0
  19. data/lib/cucumber_timing_presenter/templates/unused_steps.html +0 -0
  20. data/lib/cucumber_timing_presenter/timing_formatter.rb +44 -0
  21. data/lib/cucumber_timing_presenter/unused_steps.rb +18 -0
  22. data/lib/cucumber_timing_presenter/unused_steps_html_presenter.rb +13 -0
  23. data/lib/cucumber_timing_presenter/usage_record.rb +82 -0
  24. data/lib/cucumber_timing_presenter/usage_record_html_presenter.rb +41 -0
  25. data/lib/cucumber_timing_presenter/version.rb +5 -0
  26. data/nbproject/private/rake-d.txt +0 -0
  27. data/nbproject/project.properties +3 -0
  28. data/nbproject/project.xml +11 -0
  29. data/spec/html_template_spec.rb +65 -0
  30. data/spec/spec_helper.rb +11 -0
  31. data/spec/unused_steps_spec.rb +41 -0
  32. data/spec/usage_record_spec.rb +193 -0
  33. metadata +111 -0
@@ -0,0 +1,44 @@
1
+ module CucumberTimingPresenter
2
+ class TimingFormatter
3
+ def initialize(step_mother, io, options)
4
+ @step_mother = step_mother
5
+ @io = io
6
+ @options = options
7
+
8
+ @usage_record = UsageRecord.new
9
+ @unused_steps = UnusedSteps.new
10
+ end
11
+
12
+ #call backs
13
+ def before_step(step)
14
+ @start_time = Time.now
15
+ end
16
+
17
+ def before_step_result(*args)
18
+ @duration = Time.now - @start_time
19
+ end
20
+
21
+ def after_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background)
22
+ @usage_record.record step_match.step_definition.regexp_source, @duration
23
+ end
24
+
25
+ def after_features(features)
26
+ get_unused_stepdefs
27
+
28
+ @usage_record.calculate
29
+
30
+ AllUsageResultsHtmlPresenter.new @usage_record
31
+ UnusedStepsHtmlPresenter.new @unused_steps
32
+ StepAverageAndTotalHtmlPresenter.new @usage_record
33
+ StepTimesOfWholeHtmlPresenter.new @usage_record
34
+ end
35
+
36
+
37
+ #helpers
38
+ def get_unused_stepdefs
39
+ @step_mother.unmatched_step_definitions.each do |step_definition|
40
+ @unused_steps.record step_definition.regexp_source, step_definition.file_colon_line
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,18 @@
1
+ module CucumberTimingPresenter
2
+ class UnusedSteps
3
+ def initialize
4
+ @record = Hash.new
5
+ end
6
+
7
+ def record step_name, where
8
+ result = @record[step_name]
9
+ result = where
10
+
11
+ @record[step_name] ||= result
12
+ end
13
+
14
+ def all
15
+ @record
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module CucumberTimingPresenter
2
+ class UnusedStepsHtmlPresenter < UsageRecordHtmlPresenter
3
+ def initialize unused_steps
4
+ generate_html unused_steps
5
+ end
6
+
7
+ def generate_html unused_steps
8
+ html = HtmlTemplate.new Configuration.unused_steps_template_path
9
+ html.replace "PP_UNUSED_STEPS", format_unused_steps(unused_steps.all)
10
+ html.output "unused_steps.html"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,82 @@
1
+ module CucumberTimingPresenter
2
+ class UsageRecord
3
+ def initialize
4
+ @record = Hash.new
5
+ end
6
+
7
+ def record step_name, duration
8
+ result = @record[step_name]
9
+ result ||= Hash.new
10
+ result[:instances] ||= []
11
+ result[:instances] << duration
12
+
13
+ @record[step_name] ||= result
14
+ end
15
+
16
+ def calculate
17
+ @record.each do |key, usage|
18
+ usage[:total] = usage[:instances].inject{|sum,x| sum + x }
19
+ usage[:occurances] = usage[:instances].count
20
+ usage[:average] = usage[:total].to_f / usage[:occurances].to_f
21
+ usage[:fastest] = usage[:instances].sort.first
22
+ usage[:slowest] = usage[:instances].sort.last
23
+ usage[:variation] = usage[:slowest] - usage[:fastest]
24
+ usage[:variance] = self.sample_variance usage[:instances]
25
+ usage[:standard_deviation] = self.standard_deviation usage[:variance]
26
+ end
27
+ end
28
+
29
+ def all
30
+ @record
31
+ end
32
+
33
+ def sort_by_property property
34
+ @record.sort {|a,b| a.last[property.to_sym] <=> b.last[property.to_sym]}
35
+ end
36
+
37
+ def highest_average
38
+ sort_by_property(:average).reverse.first
39
+ end
40
+
41
+ def highest_elapsed_time
42
+ sort_by_property(:total).reverse.first
43
+ end
44
+
45
+ def greatest_variation
46
+ sort_by_property(:variation).reverse.first
47
+ end
48
+
49
+ def average_times_plot_data
50
+ @record.map {|step_name, data| data[:average].to_f}.sort.reverse
51
+ end
52
+
53
+ def total_times_plot_data
54
+ sort_by_property(:average).reverse.map {|step_name, data| data[:total].to_f}
55
+ end
56
+
57
+ def step_part_of_total
58
+ @record.map {|step_name, data| data[:total]}.sort.reverse
59
+ end
60
+
61
+ def total_elapsed_time
62
+ @record.map {|step_name, data| data[:total]}.inject{|sum,x| sum + x }
63
+ end
64
+
65
+ def sample_variance data
66
+ occurances = data.count
67
+ average = data.inject{|sum,x| sum + x } / occurances.to_f
68
+
69
+ return nil if occurances <= 1
70
+
71
+ sum = data.inject(0){|acc,i|acc.to_f + (i.to_f - average)**2.0}
72
+
73
+ return 1 / (occurances.to_f - 1.0) * sum.to_f
74
+ end
75
+
76
+ def standard_deviation sample_variance
77
+ return nil if sample_variance.nil?
78
+
79
+ return Math.sqrt(sample_variance)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,41 @@
1
+ module CucumberTimingPresenter
2
+ class UsageRecordHtmlPresenter
3
+ def format_usage usage
4
+ step_name = usage.first
5
+ step_usage = usage.last
6
+
7
+ html = "<table><trbody>"
8
+ html = "#{html}<tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>#{step_name}</pre></td></tr>"
9
+ step_usage.each do |key, value|
10
+ next if key == :instances
11
+
12
+ html = "#{html}<tr><th style='text-align:right;'>#{key}</th><td style='padding-left:0.6em;'><pre>#{value}</pre></td></tr>"
13
+ end
14
+ html = "#{html}</trbody></table>"
15
+
16
+ html
17
+ end
18
+
19
+ def format_unused_steps all_unused
20
+ html = "<table><trbody>"
21
+ html = "#{html}<tr><th style='text-align:right;'>step</th><th style='text-align:left;'>where</th></tr>"
22
+
23
+ all_unused.each do |step_name, where|
24
+ html = "#{html}<tr><td style='text-align:right;'>#{step_name}</th><td style='text-align:left; padding-left:0.6em;'><pre>#{where}</pre></td></tr>"
25
+ end
26
+
27
+ html = "#{html}</trbody></table>"
28
+ html
29
+ end
30
+
31
+ def format_all all_usage
32
+ output = ""
33
+
34
+ all_usage.each do |result|
35
+ output = "#{output}#{format_usage(result)}<hr/>"
36
+ end
37
+
38
+ output
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,5 @@
1
+ module DistributedLife
2
+ module CucumberTimingPresenter
3
+ VERSION = "1.0.0.0"
4
+ end
5
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ main.file=
2
+ platform.active=Ruby
3
+ source.encoding=UTF-8
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://www.netbeans.org/ns/project/1">
3
+ <type>org.netbeans.modules.ruby.rubyproject</type>
4
+ <configuration>
5
+ <data xmlns="http://www.netbeans.org/ns/ruby-project/1">
6
+ <name>cucumber_timing_presenter</name>
7
+ <source-roots/>
8
+ <test-roots/>
9
+ </data>
10
+ </configuration>
11
+ </project>
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ module CucumberTimingPresenter
4
+ describe HtmlTemplate do
5
+ describe 'initialize' do
6
+ it 'should raise an exception if the template is not found' do
7
+ expect { HtmlTemplate.new 'path/does/not/exist' }.to raise_error
8
+ end
9
+
10
+ it 'should load all the templates' do
11
+ HtmlTemplate.new Configuration.usage_template_path
12
+ HtmlTemplate.new Configuration.unused_steps_template_path
13
+ HtmlTemplate.new Configuration.step_times_of_whole
14
+ HtmlTemplate.new Configuration.step_average_and_total
15
+ end
16
+ end
17
+
18
+ describe 'output' do
19
+ it 'should create a cucumber_timing_presenter folder in tmp if it does not exist' do
20
+ filename = "my_file.html"
21
+ path = "tmp/cucumber_timing_presenter"
22
+
23
+ html = HtmlTemplate.new Configuration.usage_template_path
24
+ html.output filename
25
+
26
+ File.directory?(path).should == true
27
+
28
+ File.delete "#{path}/#{filename}"
29
+ Dir.delete path
30
+
31
+ File.directory?(path).should == false
32
+ end
33
+
34
+ it 'should write the current content to the specified file in the tmp path' do
35
+ filename = "my_file.html"
36
+ path = "tmp/cucumber_timing_presenter/#{filename}"
37
+
38
+ html = HtmlTemplate.new Configuration.usage_template_path
39
+ html.output filename
40
+
41
+ File.exists?(path).should == true
42
+
43
+ file = File.open(path, "rb")
44
+ file_contents = file.read
45
+ html.content.should == file_contents
46
+
47
+ File.delete path
48
+ File.exists?(path).should == false
49
+ end
50
+ end
51
+
52
+ describe 'replace' do
53
+ it 'should replace small strings' do
54
+ html = HtmlTemplate.new Configuration.usage_template_path
55
+ html.replace "PP_STEP_HIGHEST_AVERAGE", %{<table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a new project called "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.221514</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.718889</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>1.00525</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.437778</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216264</pre></td></tr></trbody></table>}
56
+ html.content.should == %{<html>\n <head>\n </head>\n <body>\n <h1>Highest average run time</h1>\n <table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a new project called "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.221514</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.718889</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>1.00525</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.437778</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216264</pre></td></tr></trbody></table>\n <h1>Greatest total time spent in step</h1>\n PP_STEP_HIGHEST_ELAPSED_TIME\n <h1>Biggest variation between fastest and slowest step instance</h1>\n PP_STEP_GREATEST_VARIATION\n <hr/>\n <h1>All Steps</h1>\n PP_ALL_STEPS\n </body>\n</html>}
57
+ end
58
+ it 'should insert large strings' do
59
+ html = HtmlTemplate.new Configuration.usage_template_path
60
+ html.replace "PP_ALL_STEPS", %{<table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I change my email address to "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^(?:|I )click on "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.155292</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0862586666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.106146</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.258776</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.049146</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I go to the "([^"]*)" page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.213795</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0836632</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.183576</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>5</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.418316</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.030219</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I complete the task$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.005081</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0041195</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.001923</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008239</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003158</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" project will created$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can delete the project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can edit the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I log in as "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task in the history$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00451</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003211</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.002005</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.009633</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002505</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task in the backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I change my password to "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create an account for "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a new project called "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.221514</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.718889</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>1.00525</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.437778</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216264</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.221571</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.138235</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.166672</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.27647</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.054899</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can see "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00497</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0043055</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.001329</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008611</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003641</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should be on the "([^"]*)" page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.126848</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0253203333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.123835</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>6</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.151922</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003013</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will see that projects must have a unique name$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can create a new project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can view the project backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am a new, authenticated user$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.384872</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.3464892</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.139513</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>5</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.732446</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.245359</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be done$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I edit the project "([^"]*)" to:$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.247047</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.2460855</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.00192299999999995</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.492171</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.245124</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^then I can go to the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.122981</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0948935</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.056175</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.189787</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.066806</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can go to the projects page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.241623</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.200115666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.068747</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.600347</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.172876</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I cancel my account$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task on the project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I make the task active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project blacklog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.434581</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.417437</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.031844</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>4</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.669748</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.402737</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am a new, authenticated, admin user$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project and is done$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.026986</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.022574</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.008824</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.045148</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.018162</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view all projects$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there should be no pending accounts$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^an unapproved account exists$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^my account should be deleted$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should not see the "([^"]*)" task in the backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001214</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00121</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>7.99999999999998e-06</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00242</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001206</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" project will exist$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.014723</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.007595</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.011958</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>4</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.03038</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002765</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be told that projets require a unique name$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there will be only one "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am on the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I approve the account$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I log in using a password of "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project and is active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.460897</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.166580333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.442096</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.499741</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.018801</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I delete the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project history$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be created and associated with the project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a task in a project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the edit project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there will be no project "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.006473</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.004116</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.004714</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008232</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001759</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the new project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am on the user home page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.048025</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0405643333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.011906</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.121693</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.036119</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the following projects:$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.02984</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.447912666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.697276</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>9</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>4.031214</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.332564</pre></td></tr></trbody></table>}
61
+ html.content.should == %{<html>\n <head>\n </head>\n <body>\n <h1>Highest average run time</h1>\n PP_STEP_HIGHEST_AVERAGE\n <h1>Greatest total time spent in step</h1>\n PP_STEP_HIGHEST_ELAPSED_TIME\n <h1>Biggest variation between fastest and slowest step instance</h1>\n PP_STEP_GREATEST_VARIATION\n <hr/>\n <h1>All Steps</h1>\n <table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I change my email address to "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.268031</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^(?:|I )click on "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.155292</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0862586666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.106146</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.258776</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.049146</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I go to the "([^"]*)" page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.213795</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0836632</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.183576</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>5</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.418316</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.030219</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I complete the task$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.095895</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.005081</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0041195</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.001923</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008239</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003158</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" project will created$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003475</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can delete the project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.059107</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can edit the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216079</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I log in as "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.146968</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task in the history$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00451</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003211</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.002005</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.009633</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002505</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task in the backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003367</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I change my password to "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.215791</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create an account for "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.158814</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a new project called "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.221514</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.718889</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>1.00525</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.437778</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.216264</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.221571</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.138235</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.166672</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.27647</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.054899</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can see "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00497</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0043055</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.001329</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008611</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003641</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should be on the "([^"]*)" page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.126848</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0253203333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.123835</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>6</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.151922</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003013</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will see that projects must have a unique name$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001412</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can create a new project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.047412</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can view the project backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.071688</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am a new, authenticated user$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.384872</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.3464892</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.139513</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>5</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.732446</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.245359</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be done$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002362</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I edit the project "([^"]*)" to:$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.247047</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.2460855</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.00192299999999995</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.492171</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.245124</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^then I can go to the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.122981</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0948935</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.056175</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.189787</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.066806</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I can go to the projects page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.241623</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.200115666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.068747</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.600347</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.172876</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I cancel my account$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.044494</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should see the "([^"]*)" task on the project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.059446</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I make the task active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.079211</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project blacklog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.434581</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.417437</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.031844</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>4</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>1.669748</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.402737</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am a new, authenticated, admin user$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.271754</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00245</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project and is done$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.026986</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.022574</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.008824</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.045148</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.018162</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view all projects$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.030079</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there should be no pending accounts$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00155</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^an unapproved account exists$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.088353</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^my account should be deleted$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00188</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I should not see the "([^"]*)" task in the backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001214</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00121</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>7.99999999999998e-06</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00242</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001206</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" project will exist$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.014723</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.007595</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.011958</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>4</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.03038</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002765</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be told that projets require a unique name$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001984</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there will be only one "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.002832</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am on the "([^"]*)" project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003658</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I approve the account$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.224123</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I log in using a password of "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.171467</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the "([^"]*)" task exists in the "([^"]*)" project and is active$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.460897</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.166580333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.442096</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.499741</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.018801</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I delete the "([^"]*)" project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.09156</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project history$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.035948</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I view the "([^"]*)" project backlog$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.032592</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the task will be created and associated with the project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.023357</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I create a task in a project$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.63809</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the edit project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.00225</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^there will be no project "([^"]*)"$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.006473</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.004116</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.004714</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>2</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.008232</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.001759</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I will be on the new project page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.0</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>1</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.003574</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^I am on the user home page$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>0.048025</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.0405643333333333</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.011906</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>3</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>0.121693</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.036119</pre></td></tr></trbody></table><hr/><table><trbody><tr><th style='text-align:right;'>step</th><td style='padding-left:0.6em;'><pre>/^the following projects:$/</pre></td></tr><tr><th style='text-align:right;'>slowest</th><td style='padding-left:0.6em;'><pre>1.02984</pre></td></tr><tr><th style='text-align:right;'>average</th><td style='padding-left:0.6em;'><pre>0.447912666666667</pre></td></tr><tr><th style='text-align:right;'>variation</th><td style='padding-left:0.6em;'><pre>0.697276</pre></td></tr><tr><th style='text-align:right;'>occurances</th><td style='padding-left:0.6em;'><pre>9</pre></td></tr><tr><th style='text-align:right;'>total</th><td style='padding-left:0.6em;'><pre>4.031214</pre></td></tr><tr><th style='text-align:right;'>fastest</th><td style='padding-left:0.6em;'><pre>0.332564</pre></td></tr></trbody></table>\n </body>\n</html>}
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,11 @@
1
+ # Requires supporting ruby files with custom matchers and macros, etc,
2
+ # in spec/support/ and its subdirectories.
3
+ Dir["support/**/*.rb"].each {|f| require f}
4
+
5
+ require 'cucumber_timing_presenter'
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_with :rspec
9
+
10
+ config.color_enabled = true
11
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'ap'
3
+
4
+ module CucumberTimingPresenter
5
+ describe UnusedSteps do
6
+ subject do
7
+ UnusedSteps.new
8
+ end
9
+
10
+ describe 'record' do
11
+ it 'should create a record' do
12
+ subject.record "my_step", "some code somewhere"
13
+
14
+ subject.all['my_step'].should == "some code somewhere"
15
+ end
16
+ end
17
+
18
+ describe 'all' do
19
+ it 'should return all records sorted alphabetically' do
20
+ subject.record "my_step 3", "some code somewhere 3"
21
+ subject.record "my_step 2", "some code somewhere 2"
22
+ subject.record "my_step 1", "some code somewhere 1"
23
+
24
+ subject.all.count.should == 3
25
+ subject.all.each_with_index do |step_name, where, index|
26
+ case index
27
+ when 1
28
+ step_name.should == "my_step 1"
29
+ where.should == "some code somewhere 1"
30
+ when 2
31
+ step_name.should == "my_step 2"
32
+ where.should == "some code somewhere 1"
33
+ when 3
34
+ step_name.should == "my_step 3"
35
+ where.should == "some code somewhere 1"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,193 @@
1
+ require 'spec_helper'
2
+
3
+ module CucumberTimingPresenter
4
+ describe UsageRecord do
5
+ subject do
6
+ UsageRecord.new
7
+ end
8
+
9
+ describe 'record' do
10
+ it 'should create a record' do
11
+ subject.record "my step", 50
12
+
13
+ subject.all.count.should == 1
14
+ subject.all['my step'][:instances].count.should == 1
15
+ subject.all['my step'][:instances].first.should == 50
16
+ end
17
+
18
+ it 'should support multiple instances of record' do
19
+ subject.record "my step", 50
20
+ subject.record "my step", 75
21
+
22
+ subject.all.count.should == 1
23
+ subject.all['my step'][:instances].count.should == 2
24
+ subject.all['my step'][:instances].first.should == 50
25
+ subject.all['my step'][:instances].last.should == 75
26
+ end
27
+ end
28
+
29
+ describe 'calculate' do
30
+ before(:each) do
31
+ subject.record "my step", 25
32
+ subject.record "my step", 50
33
+ subject.record "my step", 75
34
+
35
+ subject.calculate
36
+ end
37
+
38
+ it 'should calculate the total elapsed time' do
39
+ subject.all["my step"][:total].should == 150
40
+ end
41
+
42
+ it 'should calculate the number of occurances' do
43
+ subject.all["my step"][:occurances].should == 3
44
+ end
45
+
46
+ it 'should calculate the average time' do
47
+ subject.all["my step"][:average].should == 50
48
+ end
49
+
50
+ it 'should calculate the fastest step' do
51
+ subject.all["my step"][:fastest].should == 25
52
+ end
53
+
54
+ it 'should calculate the slowest step' do
55
+ subject.all["my step"][:slowest].should == 75
56
+ end
57
+
58
+ it 'should calculate the variation' do
59
+ subject.all["my step"][:variation].should == 50
60
+ end
61
+
62
+ it 'should calculate the standard deviation' do
63
+ subject.all["my step"][:standard_deviation].should == 25
64
+ end
65
+
66
+ it 'should calculate the variance' do
67
+ subject.all["my step"][:variance].should == 625
68
+ end
69
+ end
70
+
71
+ describe 'all' do
72
+ before(:each) do
73
+ subject.record "my step 1", 24
74
+ subject.record "my step 1", 50
75
+ subject.record "my step 2", 75
76
+ end
77
+
78
+ it 'should return all records' do
79
+ subject.all.count.should == 2
80
+ subject.all.each_with_index do |step_name, data, index|
81
+ case index
82
+ when 1
83
+ step_name.should == "my_step 2"
84
+ when 2
85
+ step_name.should == "my_step 1"
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ describe 'set operations' do
92
+ before(:each) do
93
+ subject.record "my step 1", 25
94
+ subject.record "my step 1", 50
95
+ subject.record "my step 2", 49
96
+ subject.record "my step 2", 51
97
+ subject.record "my step 3", 75
98
+ subject.record "my step 3", 10
99
+
100
+ subject.calculate
101
+ end
102
+
103
+ describe 'sort_by_property' do
104
+ it 'should sort all records by any property' do
105
+ subject.sort_by_property(:total).first.first.should == "my step 1"
106
+ subject.sort_by_property(:total).last.first.should == "my step 2"
107
+
108
+ subject.sort_by_property(:fastest).first.first.should == "my step 3"
109
+ subject.sort_by_property(:fastest).last.first.should == "my step 2"
110
+ end
111
+ end
112
+
113
+ describe 'highest_average' do
114
+ it 'should return the record with the highest average' do
115
+ subject.highest_average.first.should == "my step 2"
116
+ end
117
+ end
118
+
119
+ describe 'highest_elapsed_time' do
120
+ it 'should return the record with the highest elapsed time' do
121
+ subject.highest_elapsed_time.first.should == "my step 2"
122
+ end
123
+ end
124
+
125
+ describe 'greatest_variation' do
126
+ it 'should return the record with the greatest variation between slow and fast' do
127
+ subject.greatest_variation.first.should == "my step 3"
128
+ end
129
+ end
130
+
131
+ describe 'step_part_of_total' do
132
+ it 'should return the total times of each step from largest to smallest' do
133
+ subject.step_part_of_total.should == [100.0, 85.0, 75.0]
134
+ end
135
+ end
136
+
137
+ describe 'total_elapsed_time' do
138
+ it 'should return the count of all steps' do
139
+ subject.total_elapsed_time.should == 260
140
+ end
141
+ end
142
+
143
+ describe 'average_times_plot_data' do
144
+ it 'should return all the averages sorted by average amount descending' do
145
+ subject.record "my step 1", 25
146
+ subject.record "my step 1", 50
147
+ subject.record "my step 2", 49
148
+ subject.record "my step 2", 51
149
+ subject.record "my step 3", 75
150
+ subject.record "my step 3", 10
151
+
152
+ subject.calculate
153
+
154
+ subject.average_times_plot_data.should == [50.0, 42.5, 37.5]
155
+ end
156
+ end
157
+
158
+ describe 'total_times_plot_data' do
159
+ it 'should return the total times of each step sorted by average amount descending' do
160
+ subject.record "my step 1", 25
161
+ subject.record "my step 1", 50
162
+ subject.record "my step 3", 75
163
+ subject.record "my step 3", 10
164
+
165
+ subject.calculate
166
+
167
+ subject.total_times_plot_data.should == [100.0, 170, 150.0]
168
+ end
169
+ end
170
+ end
171
+
172
+ describe 'sample_variance' do
173
+ it 'should calculate the variance' do
174
+ subject.sample_variance([1,2,3,4,5,6]).should be_within(0.1).of(3.5)
175
+ subject.sample_variance([2,4,4,4,5,5,7,9]).should be_within(0.1).of(4.57)
176
+ subject.sample_variance([25,50,75]).should be_within(0.1).of(625)
177
+ end
178
+ end
179
+
180
+ describe 'standard_deviation' do
181
+ it 'should calculate the standard deviation' do
182
+ sample_variance = subject.sample_variance([1,2,3,4,5,6])
183
+ subject.standard_deviation(sample_variance).should be_within(0.1).of(1.87)
184
+
185
+ sample_variance = subject.sample_variance([2,4,4,4,5,5,7,9])
186
+ subject.standard_deviation(sample_variance).should be_within(0.1).of(2.13)
187
+
188
+ sample_variance = subject.sample_variance([25,50,75])
189
+ subject.standard_deviation(sample_variance).should be_within(0.1).of(25)
190
+ end
191
+ end
192
+ end
193
+ end