cucumber-performance 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba06a3e18beb59f3a6b1b9d0e242b40d50d9d751
4
- data.tar.gz: 53ddf52fb46f525cfac3a1308908ea42ddd6bd95
3
+ metadata.gz: f0598030735a9b4165aa7f6d1b1e47375e2b7f49
4
+ data.tar.gz: ca3838b3e324dc34f9260387302845d14b00543d
5
5
  SHA512:
6
- metadata.gz: d6a611e8760ac883a8d43937492fd26ea838d57664bb798ce3eaa803ed2b38321872acc5c147f8244a789533d6b2ac73216c3ad04d231f9fc03ebc729ae3df07
7
- data.tar.gz: 159d97b2cbe7413c22ed05c67cb971d158491a8c6a83e26836465b38a47ac6ac960fb777c7e5a1d40471d49ba7b3a35c4c24371067a82ef222d8e21e3772aa30
6
+ metadata.gz: 45a2a4f0e8fe82e89d0c8efac1ae697a66bf599c38f3791a92e55c41a7f78f9b414d174697f585a15dd06ac7937056cc4c278b219f5805ee3a03ce4aad925b27
7
+ data.tar.gz: 398a0c7d45416fe62056f957887ad58fe61aa26ba5154272cbd9ada58b3cb506cb2907f574e52090139978f80713073787689450293d8ea2c6b97a409440a1c3
@@ -35,69 +35,61 @@ Given(/^I want to run a performance$/) do
35
35
 
36
36
  # Start the graph x axes
37
37
  $max_x = 3
38
+ $trans_max_x = 3
39
+
40
+ # The running scenarios
41
+ $running_scenarios_hash = {}
42
+
43
+ # The amount of V users
44
+ $amount_of_users = 0
45
+
46
+ # Running v user scenario
47
+ $vuser_scenarios = []
48
+
49
+ # How many errors per a scenario
50
+ $scenario_errors = {}
51
+
52
+ $scenario_iterations = {}
53
+
54
+ $transactions_iterations= {}
38
55
 
39
56
  # Start a controller, this is a GUI to allow you to monitor the test.
40
57
  # This uses sinatra and is accessable by: http://localhost:4567
41
58
  controller_thread = Thread.new{controller}
42
59
 
43
- # Runs Cucumber to get a list of tests. This will be reworked in the future
44
- args = []
45
- args << '--dry-run'
46
- args << '--format'
47
- args << 'json'
48
-
49
60
  @in = StringIO.new
50
61
  @out = StringIO.new
51
62
  @err = StringIO.new
52
63
 
53
- begin
54
- cuke = Cucumber::Cli::Main.new(args, @in, @out, @err).execute!
55
- rescue Exception=>e
56
- # Do nothing!
57
- end
58
-
59
- $features_hash = {}
60
-
61
- $scenario_steps = {}
62
-
63
- JSON.parse(@out.string).each do |features|
64
- features['elements'].each do |scenarios|
65
- $features_hash[scenarios['name'].to_s] = features['uri'].to_s + ':' + scenarios['line'].to_s
66
- $scenario_steps[features['uri'].to_s + ':' + scenarios['line'].to_s] = []
67
- end
68
- end
69
-
70
64
  end
71
65
 
72
66
  Given(/^I have the following scenarios$/) do |table|
73
67
 
74
68
  # This will use the cucumber call above to work out if the scenario you've enter
75
69
  # is valid and can be run.
76
- $running_scenarios_hash = {}
77
-
78
- $running_scenarios_hash_name = {}
79
-
80
- $amount_of_users = 0
81
-
82
- $vuser_scenarios = []
83
70
 
84
71
  table.raw.each do |value|
85
- if (!$features_hash[value[0]].nil?)
86
- $amount_of_users = $amount_of_users + value[1].to_i
87
- $running_scenarios_hash[$features_hash[value[0]]] = value[1].to_i
88
- $running_scenarios_hash_name[$features_hash[value[0]]] = value[0]
89
72
 
73
+ if value[0] != 'SCENARIO' then
90
74
  for i in 0..value[1].to_i - 1
91
- $vuser_scenarios << $features_hash[value[0]]
75
+ $vuser_scenarios << value[0]
92
76
  end
93
77
 
78
+ $scenario_errors[value[0]] = 0
79
+ $scenario_iterations[value[0]] = 0
80
+
81
+ $results_scenarios_graph[value[0]] = []
82
+
83
+ $amount_of_users = $amount_of_users + value[1].to_i
84
+ $running_scenarios_hash[value[0]] = value[1].to_i
85
+
94
86
  begin
95
87
  load File.expand_path('performanceTests/' + value[0].gsub('(','').gsub(')', '').gsub(/ /, '_').capitalize.downcase + '.rb')
96
88
  rescue Exception=>e
97
- raise "Unable to load: " + File.expand_path('performanceTests/' + value[0].gsub('(','').gsub(')', '').gsub(/ /, '_').capitalize.downcase + '.rb').to_s + '.rb'
89
+ raise "Unable to load: " + File.expand_path('performanceTests/' + value[0].gsub('(','').gsub(')', '').gsub(/ /, '_').capitalize.downcase + '.rb')
98
90
  end
99
-
100
91
  end
92
+
101
93
  end
102
94
 
103
95
  $vuser_scenarios.shuffle
@@ -202,6 +194,7 @@ When(/^I run the performance test$/) do
202
194
  # Once the performance test has finished the sinatra app stops,
203
195
  # this gets around that by visiting the page and producing a pdf output
204
196
  visit('http://localhost:4567')
197
+ sleep(1)
205
198
  save_screenshot("performance-#{Time.new.to_i}.pdf")
206
199
 
207
200
  end
@@ -216,7 +209,7 @@ Then(/^the scenarios response times were below:$/) do |table|
216
209
  table.raw.each do |value|
217
210
  if (value[0] != 'SCENARIO')
218
211
  # We need to get the average of the scenarios and then devide that by 1000 because they are in miliseconds
219
- response_time = ($results_scenarios[$features_hash[value[0]]].inject{ |sum, el| sum + el }.to_f / $results_scenarios[$features_hash[value[0]]].size) / 1000
212
+ response_time = ($results_scenarios[value[0]].inject{ |sum, el| sum + el }.to_f / $results_scenarios[value[0]].size) / 1000
220
213
  # Assert to see if the response time is below the threshold
221
214
  assert_operator response_time, :<, value[1].to_i, 'The average response time wasn\'t below the threshold (' + value[0] + ')'
222
215
  end
@@ -22,7 +22,7 @@ def loadtest()
22
22
  $vuser_inc = $vuser_inc + 1
23
23
 
24
24
  # convervate the cucumber scenario name, into the class name
25
- scenario_name = $running_scenarios_hash_name[cucumber_scenario].gsub('(','').gsub(')', '').gsub(/ /, '_').capitalize
25
+ scenario_name = cucumber_scenario.gsub('(','').gsub(')', '').gsub(/ /, '_').capitalize
26
26
 
27
27
  # create an instance of the class from the (step_defitions/performance) file
28
28
  script = Module.const_get(scenario_name).new
@@ -45,49 +45,58 @@ def loadtest()
45
45
  # Call the threads action step
46
46
  script.v_action()
47
47
 
48
+ # As the test has finished, work out the duration
49
+ script_duration = (Time.now - scriptstart_time) * 1000
50
+
51
+ # If the duration is above the x axis current value, let's increase it
52
+ if ((script_duration / 1000) > $max_x) then
53
+ $max_x = (script_duration / 1000).ceil + 1
54
+ end
55
+
56
+ # If the current cucumber scenario have no results, lets define their arrays
57
+ if ($results_scenarios[cucumber_scenario].nil?) then
58
+ $results_scenarios[cucumber_scenario] = []
59
+ $results_scenarios_graph[cucumber_scenario] = {}
60
+ end
61
+
62
+ # Add the duration of the test to an array so we can work our max/min/avg etc...
63
+ $results_scenarios[cucumber_scenario] << script_duration
64
+
65
+ # For each second we need to build up an average, so need to build up another array
66
+ # based on the current time
67
+ current_time_id = $duration - (($starttime + $duration) - Time.new.to_i) + 1
68
+
69
+ # If the array doesn't exist for the current time, then lets define it
70
+ if($results_scenarios_graph[cucumber_scenario][current_time_id].nil? == true) then
71
+ $results_scenarios_graph[cucumber_scenario][current_time_id] = Array.new()
72
+ end
73
+
74
+ # Add the value to the array
75
+ $results_scenarios_graph[cucumber_scenario][current_time_id].push(script_duration)
76
+
48
77
  rescue Exception=>e
49
78
  # If it fails, keep a log of why, then carry on
50
79
 
51
80
  error = {}
52
- error['error_message'] = e
81
+ error['error_message'] = e.to_s + '<br>' + e.backtrace.to_s
53
82
  error['error_iteration'] = iteration
54
83
  error['error_script'] = cucumber_scenario
55
84
 
85
+ # $stdout.puts 'Error: ' + e + "\n" + backtrace.map {|l| " #{l}\n"}.join
56
86
 
57
- $error_log << error
58
87
 
59
- $total_failures = $total_failures + 1
60
- $stdout.puts e
61
- end
88
+ $scenario_errors[cucumber_scenario] += 1
62
89
 
63
- # As the test has finished, work out the duration
64
- script_duration = (Time.now - scriptstart_time) * 1000
90
+ #$stdout.puts $scenario_errors
65
91
 
66
- # If the duration is above the x axis current value, let's increase it
67
- if ((script_duration / 1000) > $max_x) then
68
- $max_x = (script_duration / 1000).ceil + 1
69
- end
92
+ $error_log << error
70
93
 
71
- # If the current cucumber scenario have no results, lets define their arrays
72
- if ($results_scenarios[cucumber_scenario].nil?) then
73
- $results_scenarios[cucumber_scenario] = []
74
- $results_scenarios_graph[cucumber_scenario] = {}
94
+ $total_failures += 1
95
+ # $stdout.puts 'Error: ' + e + "\n" + backtrace.map {|l| " #{l}\n"}.join
75
96
  end
76
97
 
77
- # Add the duration of the test to an array so we can work our max/min/avg etc...
78
- $results_scenarios[cucumber_scenario] << script_duration
79
-
80
- # For each second we need to build up an average, so need to build up another array
81
- # based on the current time
82
- current_time_id = $duration - (($starttime + $duration) - Time.new.to_i) + 1
83
-
84
- # If the array doesn't exist for the current time, then lets define it
85
- if($results_scenarios_graph[cucumber_scenario][current_time_id].nil? == true) then
86
- $results_scenarios_graph[cucumber_scenario][current_time_id] = Array.new()
87
- end
98
+ $scenario_iterations[cucumber_scenario] += 1
88
99
 
89
- # Add the value to the array
90
- $results_scenarios_graph[cucumber_scenario][current_time_id].push(script_duration)
91
100
 
92
101
  # Sleep a second between each scenario. This will need to be parametised soon
93
102
  sleep(1)
@@ -122,6 +131,12 @@ end
122
131
  #####
123
132
  def end_traction(step_name, start_time)
124
133
 
134
+ if ($transactions_iterations[step_name].nil?) then
135
+ $transactions_iterations[step_name] = 0
136
+ end
137
+
138
+ $transactions_iterations[step_name] += 1
139
+
125
140
  # This uses the value from start_traction() and finds how long the test took.
126
141
  transaction_duration = (Time.now - start_time) * 1000
127
142
 
@@ -156,8 +171,6 @@ end
156
171
  #####
157
172
  def http_get(curl, data, url)
158
173
 
159
- #puts 'GET: ' + url
160
-
161
174
  # Define the url we want to hit
162
175
  curl.url=url
163
176
 
@@ -266,71 +279,218 @@ def controller()
266
279
  # Sets the graph data for [0] (vusers) to 0, stops an error
267
280
  data['graph_data'][0][0] = 0
268
281
 
269
- # Loops through each second to get the graph data
270
- for i in 0..((Time.new.to_i - $starttime ))
282
+ if (!$starttime.nil?) then
283
+
284
+ # Loops through each second to get the graph data
285
+ for i in 0..((Time.new.to_i - $starttime ))
271
286
 
272
- # The [0] is for v users
273
- data['graph_data'][0][i] = $results_vusers[i + 1]
287
+ # The [0] is for v users
288
+ data['graph_data'][0][i] = $results_vusers[i + 1]
274
289
 
275
- num = 0
276
- # Anthing above [0] is for the running tests
277
- $results_scenarios_graph.each do |key, results2|
278
- num = num + 1
279
- if (results2[i + 1].nil? == false) then
290
+ num = 0
291
+ # Anthing above [0] is for the running tests
292
+ $results_scenarios_graph.each do |key, results2|
293
+ num = num + 1
294
+ if (results2[i + 1].nil? == false) then
280
295
 
281
- sum = 0
282
- results2[i + 1].each { |a| sum+=a }
296
+ sum = 0
297
+ results2[i + 1].each { |a| sum+=a }
283
298
 
284
- # Add the results to the json object
285
- data['graph_data'][num][i] = ((sum / results2[i + 1].size.to_f) / 1000).round(2)
286
- data['graph_y2max'] = ($max_x * 1.1)
299
+ # Add the results to the json object
300
+ data['graph_data'][num][i] = ((sum / results2[i + 1].size.to_f) / 1000).round(2)
301
+
302
+ if (data['graph_data'][num][i] > $max_x) then
303
+ $max_x = data['graph_data'][num][i]
304
+ end
305
+
306
+ end
287
307
  end
288
308
  end
289
309
  end
290
310
 
291
-
311
+ data['graph_y2max'] = ($max_x * 1.1)
292
312
 
293
313
  # Define the objects for the overview of the cucumber scenarios (table below graph)
294
314
  data['graph_details_name'] = []
295
315
  data['graph_details_min'] = []
296
316
  data['graph_details_max'] = []
297
317
  data['graph_details_avg'] = []
318
+ data['graph_details_err'] = []
319
+ data['graph_details_ite'] = []
320
+ data['graph_details_per'] = []
298
321
 
299
322
  data['graph_details_name'][0] = 'Vusers'
300
323
 
301
324
  # If the data exists then use it, otherwise set it to 0
302
325
  if (!data['graph_data'].nil?) then
303
- data['graph_details_min'][0] = data['graph_data'][0].min.round(2)
304
- data['graph_details_max'][0] = data['graph_data'][0].max.round(2)
305
- data['graph_details_avg'][0] = (data['graph_data'][0].inject{ |sum, el| sum + el }.to_f / data['graph_data'][0].size).round(2)
326
+
327
+ if (data['graph_data'][0].nil?) then
328
+ data['graph_data'][0] = []
329
+ end
330
+
331
+ if (data['graph_data'][0].count > 1)
332
+ data['graph_details_avg'][0] = (data['graph_data'][0].inject{ |sum, el| sum + el }.to_f / data['graph_data'][0].size).round(2)
333
+ data['graph_details_min'][0] = data['graph_data'][0].min.round(2)
334
+ data['graph_details_max'][0] = data['graph_data'][0].max.round(2)
335
+ else
336
+ data['graph_details_avg'][0] = 0
337
+ data['graph_details_min'][0] = 0
338
+ data['graph_details_max'][0] = 0
339
+ end
340
+
341
+ data['graph_details_err'][0] = 0
342
+ data['graph_details_ite'][0] = 0
343
+ data['graph_details_per'][0] = 0
344
+
306
345
  else
307
346
  data['graph_details_min'][0] = 0
308
347
  data['graph_details_max'][0] = 0
309
348
  data['graph_details_avg'][0] = 0
349
+ data['graph_details_err'][0] = 0
350
+ data['graph_details_ite'][0] = 0
351
+ data['graph_details_per'][0] = 0
352
+
310
353
  end
311
354
 
355
+ i = 0
356
+ #puts $results_scenarios_graph.count
312
357
  # This is the same as above, but for tests, not the vusers
313
- for i in 0..($list_of_tests.count - 1)
358
+ $results_scenarios_graph.each do |key, results2|
359
+
360
+ i += 1
361
+ data['graph_details_name'][i] = key
362
+
363
+ if (!$results_scenarios[key].nil?) then
364
+
365
+ if ($results_scenarios[key].count > 1)
366
+ data['graph_details_avg'][i] = (($results_scenarios[key].inject{ |sum, el| sum + el }.to_f / $results_scenarios[key].size) / 1000).round(2)
367
+ data['graph_details_min'][i] = ($results_scenarios[key].min / 1000).round(2)
368
+ data['graph_details_max'][i] = ($results_scenarios[key].max / 1000).round(2)
369
+ data['graph_details_per'][i] = (percentile($results_scenarios[key], 0.9) / 1000).round(2)
370
+ else
371
+ data['graph_details_avg'][i] = 0
372
+ data['graph_details_min'][i] = 0
373
+ data['graph_details_max'][i] = 0
374
+ data['graph_details_per'][i] = 0
375
+ end
376
+ else
377
+
378
+ data['graph_details_min'][i] = 0
379
+ data['graph_details_max'][i] = 0
380
+ data['graph_details_avg'][i] = 0
381
+ data['graph_details_per'][i] = 0
382
+
383
+ end
384
+
385
+ data['graph_details_err'][i] = $scenario_errors[key]
386
+ data['graph_details_ite'][i] = $scenario_iterations[key]
387
+
388
+
389
+ end
390
+
314
391
 
315
- data['graph_details_name'][i + 1] = $list_of_tests[i]
316
392
 
317
- if (!$results_scenarios[$list_of_tests[i]].nil?) then
318
393
 
319
- data['graph_details_min'][i + 1] = ($results_scenarios[$list_of_tests[i]].min / 1000).round(2)
320
- data['graph_details_max'][i + 1] = ($results_scenarios[$list_of_tests[i]].max / 1000).round(2)
321
- data['graph_details_avg'][i + 1] = (($results_scenarios[$list_of_tests[i]].inject{ |sum, el| sum + el }.to_f / $results_scenarios[$list_of_tests[i]].size) / 1000).round(2)
322
394
 
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+ # This is the array of data for each scenario for the graph
405
+ data['trans_graph_data'] = []
406
+
407
+ # Define the graph data objects
408
+ for i in 0..30
409
+ data['trans_graph_data'][i] = []
410
+ end
411
+
412
+ # Work out the xmax and ymax
413
+ data['trans_graph_xmax'] = (($graph_time || 0) * 1.05).ceil.to_s
414
+
415
+ # Sets the graph data for [0] (vusers) to 0, stops an error
416
+
417
+ #$stdout.puts $results_transactions_graph
418
+
419
+ if (!$starttime.nil?) then
420
+
421
+ # Loops through each second to get the graph data
422
+ for i in 0..((Time.new.to_i - $starttime ))
423
+
424
+ num = 0
425
+ # Anthing above [0] is for the running tests
426
+ $results_transactions_graph.each do |key, results2|
427
+ if (results2[i + 1].nil? == false) then
428
+
429
+ sum = 0
430
+ results2[i + 1].each { |a| sum+=a }
431
+
432
+ # Add the results to the json object
433
+ data['trans_graph_data'][num][i] = ((sum / results2[i + 1].size.to_f) / 1000).round(2)
434
+ if (data['trans_graph_data'][num][i] > $trans_max_x) then
435
+ $trans_max_x = data['trans_graph_data'][num][i]
436
+ end
437
+
438
+ end
439
+ num = num + 1
440
+ end
441
+ end
442
+ end
443
+
444
+ data['trans_graph_ymax'] = ($trans_max_x * 1.1)
445
+
446
+ data['trans_graph_details_name'] = []
447
+ data['trans_graph_details_min'] = []
448
+ data['trans_graph_details_max'] = []
449
+ data['trans_graph_details_avg'] = []
450
+ data['trans_graph_details_err'] = []
451
+ data['trans_graph_details_ite'] = []
452
+ data['trans_graph_details_per'] = []
453
+
454
+ i = 0
455
+ #puts $results_transactions_graph.count
456
+ # This is the same as above, but for tests, not the vusers
457
+ $results_transactions_graph.each do |key, results2|
458
+
459
+
460
+ data['trans_graph_details_name'][i] = key
461
+
462
+ if (!$results_transactions[key].nil?) then
463
+
464
+ if ($results_transactions[key].count > 1)
465
+ data['trans_graph_details_avg'][i] = (($results_transactions[key].inject{ |sum, el| sum + el }.to_f / $results_transactions[key].size) / 1000).round(2)
466
+ data['trans_graph_details_min'][i] = ($results_transactions[key].min / 1000).round(2)
467
+ data['trans_graph_details_max'][i] = ($results_transactions[key].max / 1000).round(2)
468
+ data['trans_graph_details_per'][i] = (percentile($results_transactions[key], 0.9) / 1000).round(2)
469
+ else
470
+ data['trans_graph_details_avg'][i] = 0
471
+ data['trans_graph_details_min'][i] = 0
472
+ data['trans_graph_details_max'][i] = 0
473
+ data['trans_graph_details_per'][i] = 0
474
+ end
323
475
  else
324
476
 
325
- data['graph_details_min'][i + 1] = 0
326
- data['graph_details_max'][i + 1] = 0
327
- data['graph_details_avg'][i + 1] = 0
477
+ data['trans_graph_details_min'][i] = 0
478
+ data['trans_graph_details_max'][i] = 0
479
+ data['trans_graph_details_avg'][i] = 0
480
+ data['trans_graph_details_per'][i] = 0
328
481
 
329
482
  end
330
483
 
484
+ if (!$transactions_iterations[key].nil?)
485
+ data['trans_graph_details_ite'][i] = $transactions_iterations[key]
486
+ else
487
+ data['trans_graph_details_ite'][i] = 0
488
+ end
489
+ i += 1
331
490
  end
332
491
 
333
492
 
493
+
334
494
  # Print the output as a json string
335
495
  return data.to_json
336
496
  end
@@ -346,3 +506,11 @@ def controller()
346
506
  $sinatra_instance.run!
347
507
 
348
508
  end
509
+
510
+ def percentile(values, percentile)
511
+ values_sorted = values.sort
512
+ k = (percentile*(values_sorted.length-1)+1).floor - 1
513
+ f = (percentile*(values_sorted.length-1)+1).modulo(1)
514
+
515
+ return values_sorted[k] + (f * (values_sorted[k+1] - values_sorted[k]))
516
+ end
@@ -17,22 +17,21 @@
17
17
  </body>
18
18
 
19
19
  <script class="code" type="text/javascript">
20
- <%= @logfile %>
21
-
22
20
 
23
21
  seriesColorsMaster = [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
24
- "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"]
22
+ "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc",
23
+ "#00b2c5", "#00b47f", "#00A228", "#009575", "#009557", "#008c12",
24
+ "#003579", "#005de4", "#00b83f", "#005800", "000000",
25
+ "#4b00c5", "#c5007f", "#EA0028", "#570075", "#830057", "#950012",
26
+ "#950079", "#4b00e4", "#d8003f", "#ff0000", "#0000cc"
27
+ ]
25
28
 
26
29
  graph_ymax = 0
27
30
  graph_y2max = 0
28
31
  graph_xmax = 0
29
32
 
30
-
31
-
32
-
33
-
34
-
35
-
33
+ graph_trans_ymax = 0
34
+ graph_trans_ymax = 0
36
35
 
37
36
  </script>
38
37
 
@@ -44,9 +43,12 @@ graph_xmax = 0
44
43
  <tr>
45
44
  <th>Colour</th>
46
45
  <th>Name</th>
47
- <th>Min</th>
48
- <th>Avg</th>
49
- <th>Max</th>
46
+ <th>Iterations</th>
47
+ <th>Errors</th>
48
+ <th>Min Time</th>
49
+ <th>Avg Time</th>
50
+ <th>Max Time</th>
51
+ <th>90th Per</th>
50
52
  </tr>
51
53
  </thead>
52
54
  <tbody class="tablebody">
@@ -56,12 +58,39 @@ graph_xmax = 0
56
58
  <td></td>
57
59
  <td></td>
58
60
  <td></td>
61
+ <td></td>
62
+ <td></td>
59
63
  </tr>
60
64
  </tbody>
61
65
  </table>
62
66
  </div>
63
67
 
64
68
  <br>
69
+ <div id="chartdiv_trans" style="height:400px;width:800px; "></div>
70
+
71
+ </body>
72
+ <br>
73
+ <b>Information:</b>
74
+ <div class="bs-example">
75
+ <table class="table">
76
+ <thead>
77
+ <tr>
78
+ <th>Colour</th>
79
+ <th>Name</th>
80
+ <th>Iterations</th>
81
+ <th>Min Time</th>
82
+ <th>Avg Time</th>
83
+ <th>Max Time</th>
84
+ <th>90th Per</th>
85
+ </tr>
86
+ </thead>
87
+ <tbody class="tablebody_trans">
88
+ </tbody>
89
+ </table>
90
+ </div>
91
+
92
+ <br>
93
+
65
94
  <b>Errors:</b>
66
95
  <div class="bs-example">
67
96
  <table class="table">
@@ -92,7 +121,7 @@ function renderGraph() {
92
121
  plot1.destroy();
93
122
  }
94
123
  plot1 = $.jqplot('chartdiv', [graph_data1, graph_data2, graph_data3, graph_data4, graph_data5, graph_data6, graph_data7, graph_data8, graph_data9, graph_data10],
95
- { title:'Performance Test',
124
+ { title:'Performance Test (Scenarios)',
96
125
  seriesColors: seriesColorsMaster,
97
126
  axes:{yaxis:{label: 'VUsers', min:0, max:graph_ymax},
98
127
  y2axis: {label: 'Response', min:0, max:graph_y2max},
@@ -108,6 +137,26 @@ function renderGraph() {
108
137
 
109
138
  }
110
139
 
140
+ function trans_renderGraph() {
141
+ if (typeof plot2 !== 'undefined') {
142
+ plot2.destroy();
143
+ }
144
+ plot2 = $.jqplot('chartdiv_trans', [graph_trans_data1, graph_trans_data2, graph_trans_data3, graph_trans_data4, graph_trans_data5, graph_trans_data6, graph_trans_data7, graph_trans_data8, graph_trans_data9, graph_trans_data10,
145
+ graph_trans_data11, graph_trans_data12, graph_trans_data13, graph_trans_data14, graph_trans_data15, graph_trans_data16, graph_trans_data17, graph_trans_data18, graph_trans_data19, graph_trans_data20,
146
+ graph_trans_data21, graph_trans_data22, graph_trans_data23, graph_trans_data24, graph_trans_data25, graph_trans_data26, graph_trans_data27, graph_trans_data28, graph_trans_data29, graph_trans_data30],
147
+ { title:'Performance Test (Transactions)',
148
+ seriesColors: seriesColorsMaster,
149
+ axes:{yaxis:{label: 'Response', min:0, max:graph_trans_ymax},
150
+ xaxis:{min:0, max:graph_trans_xmax, numberTicks: 10}
151
+ },
152
+ series: [
153
+ { yaxis: "yaxis" },
154
+ ]
155
+
156
+
157
+ });
158
+
159
+ }
111
160
 
112
161
  function get_graph_data() {
113
162
 
@@ -140,7 +189,6 @@ $.getJSON( "/data", function( json ) {
140
189
  graph_data9 = json.graph_data[8];
141
190
  graph_data10 = json.graph_data[9];
142
191
 
143
-
144
192
  graph_details_name = [];
145
193
  graph_details_min = [];
146
194
  graph_details_max = [];
@@ -150,8 +198,9 @@ $.getJSON( "/data", function( json ) {
150
198
  graph_details_min = json.graph_details_min;
151
199
  graph_details_max = json.graph_details_max;
152
200
  graph_details_avg = json.graph_details_avg;
153
-
154
- renderGraph()
201
+ graph_details_err = json.graph_details_err;
202
+ graph_details_ite = json.graph_details_ite;
203
+ graph_details_per = json.graph_details_per;
155
204
 
156
205
  $( ".tablebody" ).html('')
157
206
 
@@ -159,7 +208,7 @@ $.getJSON( "/data", function( json ) {
159
208
  //alert(graph_details[i]);
160
209
  //Do something
161
210
 
162
- $( ".tablebody" ).append( '<tr><td id="row' + (i + 1) + '"></td><td>' + graph_details_name[i] + '</td><td>' + graph_details_min[i] + '</td><td>' + graph_details_avg[i] + '</td><td>' + graph_details_max[i] + '</td></tr>');
211
+ $( ".tablebody" ).append( '<tr><td id="row' + (i + 1) + '"></td><td>' + graph_details_name[i] + '</td><td>' + graph_details_ite[i] + '</td><td>' + graph_details_err[i] + '</td><td>' + graph_details_min[i] + '</td><td>' + graph_details_avg[i] + '</td><td>' + graph_details_max[i] + '</td><td>' + graph_details_per[i] + '</td></tr>');
163
212
  }
164
213
 
165
214
  $('#row1').css('background',seriesColorsMaster[0]);
@@ -174,6 +223,124 @@ $.getJSON( "/data", function( json ) {
174
223
  $('#row10').css('background',seriesColorsMaster[9]);
175
224
 
176
225
 
226
+ renderGraph()
227
+
228
+ graph_trans_data1 = [];
229
+ graph_trans_data2 = [];
230
+ graph_trans_data3 = [];
231
+ graph_trans_data4 = [];
232
+ graph_trans_data5 = [];
233
+ graph_trans_data6 = [];
234
+ graph_trans_data7 = [];
235
+ graph_trans_data8 = [];
236
+ graph_trans_data9 = [];
237
+ graph_trans_data10 = [];
238
+ graph_trans_data11 = [];
239
+ graph_trans_data12 = [];
240
+ graph_trans_data13 = [];
241
+ graph_trans_data14 = [];
242
+ graph_trans_data15 = [];
243
+ graph_trans_data16 = [];
244
+ graph_trans_data17 = [];
245
+ graph_trans_data18 = [];
246
+ graph_trans_data19 = [];
247
+ graph_trans_data20 = [];
248
+ graph_trans_data21 = [];
249
+ graph_trans_data22 = [];
250
+ graph_trans_data23 = [];
251
+ graph_trans_data24 = [];
252
+ graph_trans_data25 = [];
253
+ graph_trans_data26 = [];
254
+ graph_trans_data27 = [];
255
+ graph_trans_data28 = [];
256
+ graph_trans_data29 = [];
257
+ graph_trans_data30 = [];
258
+
259
+ graph_trans_data1 = json.trans_graph_data[0];
260
+ graph_trans_data2 = json.trans_graph_data[1];
261
+ graph_trans_data3 = json.trans_graph_data[2];
262
+ graph_trans_data4 = json.trans_graph_data[3];
263
+ graph_trans_data5 = json.trans_graph_data[4];
264
+ graph_trans_data6 = json.trans_graph_data[5];
265
+ graph_trans_data7 = json.trans_graph_data[6];
266
+ graph_trans_data8 = json.trans_graph_data[7];
267
+ graph_trans_data9 = json.trans_graph_data[8];
268
+ graph_trans_data10 = json.trans_graph_data[9];
269
+ graph_trans_data11 = json.trans_graph_data[10];
270
+ graph_trans_data12 = json.trans_graph_data[11];
271
+ graph_trans_data13 = json.trans_graph_data[12];
272
+ graph_trans_data14 = json.trans_graph_data[13];
273
+ graph_trans_data15 = json.trans_graph_data[14];
274
+ graph_trans_data16 = json.trans_graph_data[15];
275
+ graph_trans_data17 = json.trans_graph_data[16];
276
+ graph_trans_data18 = json.trans_graph_data[17];
277
+ graph_trans_data19 = json.trans_graph_data[18];
278
+ graph_trans_data20 = json.trans_graph_data[19];
279
+ graph_trans_data21 = json.trans_graph_data[20];
280
+ graph_trans_data22 = json.trans_graph_data[21];
281
+ graph_trans_data23 = json.trans_graph_data[22];
282
+ graph_trans_data24 = json.trans_graph_data[23];
283
+ graph_trans_data25 = json.trans_graph_data[24];
284
+ graph_trans_data26 = json.trans_graph_data[25];
285
+ graph_trans_data27 = json.trans_graph_data[26];
286
+ graph_trans_data28 = json.trans_graph_data[27];
287
+ graph_trans_data29 = json.trans_graph_data[28];
288
+ graph_trans_data30 = json.trans_graph_data[29];
289
+
290
+ graph_trans_ymax = json.trans_graph_ymax;
291
+ graph_trans_xmax = json.trans_graph_xmax;
292
+
293
+ trans_renderGraph()
294
+
295
+ trans_graph_details_name = json.trans_graph_details_name;
296
+ trans_graph_details_min = json.trans_graph_details_min;
297
+ trans_graph_details_max = json.trans_graph_details_max;
298
+ trans_graph_details_avg = json.trans_graph_details_avg;
299
+ trans_graph_details_ite = json.trans_graph_details_ite;
300
+ trans_graph_details_per = json.trans_graph_details_per;
301
+
302
+ $( ".tablebody_trans" ).html('')
303
+
304
+ for (var i = 0; i < trans_graph_details_name.length; i++) {
305
+
306
+ $( ".tablebody_trans" ).append( '<tr><td id="row_trans' + (i + 1) + '"></td><td>' + trans_graph_details_name[i] + '</td><td>' + trans_graph_details_ite[i] + '</td><td>' + trans_graph_details_min[i] + '</td><td>' + trans_graph_details_avg[i] + '</td><td>' + trans_graph_details_max[i] + '</td><td>' + trans_graph_details_per[i] + '</td></tr>');
307
+ }
308
+
309
+ $('#row_trans1').css('background',seriesColorsMaster[0]);
310
+ $('#row_trans2').css('background',seriesColorsMaster[1]);
311
+ $('#row_trans3').css('background',seriesColorsMaster[2]);
312
+ $('#row_trans4').css('background',seriesColorsMaster[3]);
313
+ $('#row_trans5').css('background',seriesColorsMaster[4]);
314
+ $('#row_trans6').css('background',seriesColorsMaster[5]);
315
+ $('#row_trans7').css('background',seriesColorsMaster[6]);
316
+ $('#row_trans8').css('background',seriesColorsMaster[7]);
317
+ $('#row_trans9').css('background',seriesColorsMaster[8]);
318
+ $('#row_trans10').css('background',seriesColorsMaster[9]);
319
+ $('#row_trans11').css('background',seriesColorsMaster[10]);
320
+ $('#row_trans12').css('background',seriesColorsMaster[11]);
321
+ $('#row_trans13').css('background',seriesColorsMaster[12]);
322
+ $('#row_trans14').css('background',seriesColorsMaster[13]);
323
+ $('#row_trans15').css('background',seriesColorsMaster[14]);
324
+ $('#row_trans16').css('background',seriesColorsMaster[15]);
325
+ $('#row_trans17').css('background',seriesColorsMaster[16]);
326
+ $('#row_trans18').css('background',seriesColorsMaster[17]);
327
+ $('#row_trans19').css('background',seriesColorsMaster[18]);
328
+ $('#row_trans20').css('background',seriesColorsMaster[19]);
329
+ $('#row_trans21').css('background',seriesColorsMaster[20]);
330
+ $('#row_trans22').css('background',seriesColorsMaster[21]);
331
+ $('#row_trans23').css('background',seriesColorsMaster[22]);
332
+ $('#row_trans24').css('background',seriesColorsMaster[23]);
333
+ $('#row_trans25').css('background',seriesColorsMaster[24]);
334
+ $('#row_trans26').css('background',seriesColorsMaster[25]);
335
+ $('#row_trans27').css('background',seriesColorsMaster[26]);
336
+ $('#row_trans28').css('background',seriesColorsMaster[27]);
337
+ $('#row_trans29').css('background',seriesColorsMaster[28]);
338
+ $('#row_trans30').css('background',seriesColorsMaster[29]);
339
+
340
+
341
+
342
+ $( ".errors" ).html('')
343
+
177
344
  for (var i2 = 0; i2 < json.error_log.length; i2++) {
178
345
  //alert(graph_details[i]);
179
346
  //Do something
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-performance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-25 00:00:00.000000000 Z
11
+ date: 2014-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber