jmeter-reports 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/Gemfile +4 -1
- data/Gemfile.lock +12 -0
- data/bin/jmeter-reports +17 -7
- data/jmeter-reports.gemspec +10 -1
- data/lib/jmeter/reports.rb +1 -0
- data/lib/jmeter/reports/version.rb +5 -0
- data/lib/jmeter/summary_report/report.rb +15 -3
- data/lib/jmeter/summary_report/report_item.rb +33 -7
- data/lib/jmeter/summary_report/result_line.rb +4 -1
- data/test/helper.rb +2 -0
- data/test/test_jmeter_reports_version.rb +12 -0
- data/test/{test_summary_report.rb → test_report.rb} +8 -0
- data/test/test_result_line.rb +7 -4
- metadata +88 -5
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,27 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
coderay (1.0.8)
|
5
|
+
descriptive_statistics (1.1.1)
|
6
|
+
formatador (0.2.4)
|
7
|
+
method_source (0.8.1)
|
4
8
|
minitest (2.12.1)
|
5
9
|
minitest-colorize (0.0.4)
|
6
10
|
minitest (~> 2.0)
|
11
|
+
pry (0.9.10)
|
12
|
+
coderay (~> 1.0.5)
|
13
|
+
method_source (~> 0.8)
|
14
|
+
slop (~> 3.3.1)
|
7
15
|
rake (10.0.2)
|
16
|
+
slop (3.3.3)
|
8
17
|
|
9
18
|
PLATFORMS
|
10
19
|
ruby
|
11
20
|
|
12
21
|
DEPENDENCIES
|
22
|
+
descriptive_statistics
|
23
|
+
formatador
|
13
24
|
minitest
|
14
25
|
minitest-colorize
|
26
|
+
pry
|
15
27
|
rake
|
data/bin/jmeter-reports
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
$:.push File.join(File.dirname(__FILE__), '..'), File.join(File.dirname(__FILE__), '..','lib')
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler/setup'
|
7
|
+
Bundler.require(:default)
|
8
|
+
rescue LoadError
|
9
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
10
|
+
end
|
11
|
+
|
4
12
|
require 'jmeter/reports'
|
5
13
|
|
6
14
|
if ARGV.empty?
|
@@ -17,15 +25,17 @@ begin
|
|
17
25
|
end
|
18
26
|
else
|
19
27
|
report = Jmeter::SummaryReport::Report.create(ARGV.first)
|
20
|
-
puts "
|
21
|
-
puts "
|
28
|
+
puts ""
|
29
|
+
puts " Start: #{report.start_date}"
|
30
|
+
puts " End: #{report.end_date}"
|
31
|
+
puts " Duration: #{report.elapsed} secs"
|
32
|
+
puts " Total requests: #{report.total_requests}"
|
22
33
|
puts "Average throughput: #{report.avg_throughput} RPS"
|
23
|
-
puts "
|
24
|
-
report.
|
25
|
-
|
26
|
-
end
|
34
|
+
puts ""
|
35
|
+
Formatador.display_table(report.table_data, [:label,:reqs,:errors,:err_pct,:min,:avg,:max,:sd,:avg_thrput])
|
36
|
+
puts ""
|
27
37
|
end
|
28
38
|
rescue Exception => e
|
29
39
|
puts e.message
|
30
|
-
exit
|
40
|
+
exit 2
|
31
41
|
end
|
data/jmeter-reports.gemspec
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'jmeter/reports'
|
4
5
|
|
5
6
|
Gem::Specification.new do |gem|
|
6
7
|
gem.name = "jmeter-reports"
|
7
|
-
gem.version =
|
8
|
+
gem.version = Jmeter::Reports::VERSION
|
8
9
|
gem.authors = ["Marcos Hack"]
|
9
10
|
gem.email = ["marcos.hack@gmail.com"]
|
10
11
|
gem.description = %q{JMeter Reports}
|
@@ -15,7 +16,15 @@ Gem::Specification.new do |gem|
|
|
15
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
18
|
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.required_ruby_version = '>= 1.9'
|
18
21
|
|
22
|
+
gem.add_runtime_dependency "bundler"
|
23
|
+
gem.add_runtime_dependency "descriptive_statistics"
|
24
|
+
gem.add_runtime_dependency "formatador"
|
25
|
+
|
19
26
|
gem.add_development_dependency "rake"
|
20
27
|
gem.add_development_dependency "minitest", "~> 3"
|
28
|
+
gem.add_development_dependency "minitest-colorize"
|
29
|
+
gem.add_development_dependency "pry"
|
21
30
|
end
|
data/lib/jmeter/reports.rb
CHANGED
@@ -28,12 +28,12 @@ module Jmeter
|
|
28
28
|
@items[line.label] = ReportItem.new(line.label) if @items[line.label].nil?
|
29
29
|
@items[line.label].add(line)
|
30
30
|
@req_count += 1
|
31
|
-
@
|
32
|
-
@
|
31
|
+
@start_ms = line.timestamp if @start_ms.nil? || line.timestamp < @start_ms
|
32
|
+
@end_ms = line.timestamp if @end_ms.nil? || line.timestamp > @end_ms
|
33
33
|
end
|
34
34
|
|
35
35
|
def elapsed_in_ms
|
36
|
-
@
|
36
|
+
@end_ms - @start_ms
|
37
37
|
end
|
38
38
|
|
39
39
|
def elapsed
|
@@ -51,6 +51,18 @@ module Jmeter
|
|
51
51
|
def total_requests
|
52
52
|
@req_count
|
53
53
|
end
|
54
|
+
|
55
|
+
def start_date
|
56
|
+
Time.at(@start_ms / 1000.0)
|
57
|
+
end
|
58
|
+
|
59
|
+
def end_date
|
60
|
+
Time.at(@end_ms / 1000.0)
|
61
|
+
end
|
62
|
+
|
63
|
+
def table_data
|
64
|
+
@items.values.collect { |i| i.table_data }
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'descriptive_statistics'
|
2
|
+
|
1
3
|
module Jmeter
|
2
4
|
module SummaryReport
|
3
5
|
class ReportItem
|
@@ -5,11 +7,27 @@ module Jmeter
|
|
5
7
|
@label = label
|
6
8
|
@items = []
|
7
9
|
@error_count = 0
|
10
|
+
@req_count = 0
|
8
11
|
end
|
9
12
|
|
10
13
|
def add(line)
|
11
14
|
@error_count += 1 if line.error?
|
12
|
-
@items
|
15
|
+
@items << line.elapsed
|
16
|
+
@req_count += 1
|
17
|
+
@start_ms = line.timestamp if @start_ms.nil? || line.timestamp < @start_ms
|
18
|
+
@end_ms = line.timestamp if @end_ms.nil? || line.timestamp > @end_ms
|
19
|
+
end
|
20
|
+
|
21
|
+
def elapsed_in_ms
|
22
|
+
@end_ms - @start_ms
|
23
|
+
end
|
24
|
+
|
25
|
+
def elapsed
|
26
|
+
(self.elapsed_in_ms / 1000.0).ceil
|
27
|
+
end
|
28
|
+
|
29
|
+
def avg_throughput
|
30
|
+
@req_count / self.elapsed.to_f
|
13
31
|
end
|
14
32
|
|
15
33
|
def size
|
@@ -24,13 +42,21 @@ module Jmeter
|
|
24
42
|
@error_count / self.size.to_f
|
25
43
|
end
|
26
44
|
|
27
|
-
def
|
45
|
+
def table_data
|
28
46
|
sorted_items = @items.sort
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
47
|
+
{
|
48
|
+
:label => @label,
|
49
|
+
:reqs => self.size,
|
50
|
+
:errors => self.errors,
|
51
|
+
:err_pct => round(self.error_rate * 100, 1),
|
52
|
+
:avg_thrput => "#{round(self.avg_throughput, 3)} RPS",
|
53
|
+
:min => @items.min,
|
54
|
+
:avg => @items.reduce { |n,s| s += n } / @items.size,
|
55
|
+
:max => @items.max,
|
56
|
+
:sd => "#{@items.standard_deviation.to_i}ms",
|
57
|
+
:pct_90 => "#{sorted_items[(self.size * 0.90).round]}ms",
|
58
|
+
:pct_95 => "#{sorted_items[(self.size * 0.95).round]}ms"
|
59
|
+
}
|
34
60
|
end
|
35
61
|
|
36
62
|
private
|
@@ -8,13 +8,16 @@
|
|
8
8
|
# 1355164382383,97,Tela de Login,200,"Number of samples in transaction : 1,
|
9
9
|
# number of failing samples : 0",Thread Group 1-1,,true,5168,1,1,null,0
|
10
10
|
#
|
11
|
+
|
12
|
+
require 'csv'
|
13
|
+
|
11
14
|
module Jmeter
|
12
15
|
module SummaryReport
|
13
16
|
class ResultLine
|
14
17
|
attr_accessor :timestamp, :elapsed, :label, :error, :latency
|
15
18
|
|
16
19
|
def self.parse(line)
|
17
|
-
t,e,l,rc,rm,_,_,
|
20
|
+
t,e,l,rc,rm,_,_,s,_,_,_,_,lt = CSV.parse_line(line)
|
18
21
|
res = Jmeter::SummaryReport::ResultLine.new
|
19
22
|
res.timestamp = t.to_i
|
20
23
|
res.elapsed = e.to_i
|
data/test/helper.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
require 'jmeter/reports/version'
|
3
|
+
|
4
|
+
module Jmeter
|
5
|
+
module Reports
|
6
|
+
class TestVersion < MiniTest::Unit::TestCase
|
7
|
+
def test_version
|
8
|
+
assert Jmeter::Reports::VERSION != nil
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -24,6 +24,14 @@ module Jmeter
|
|
24
24
|
def test_elapsed
|
25
25
|
assert_equal 3, @report.elapsed
|
26
26
|
end
|
27
|
+
|
28
|
+
def test_start_date
|
29
|
+
assert_equal Time.new(2012,12,11,12,47,32,"+00:00").to_i, @report.start_date.utc.to_i, 'invalid start date'
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_end_date
|
33
|
+
assert_equal Time.new(2012,12,11,12,47,34,"+00:00").to_i, @report.end_date.utc.to_i, 'invalid end date'
|
34
|
+
end
|
27
35
|
end
|
28
36
|
end
|
29
37
|
end
|
data/test/test_result_line.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
-
require 'jmeter/
|
2
|
+
require 'jmeter/summary_report/result_line'
|
3
3
|
|
4
4
|
module Jmeter
|
5
5
|
module SummaryReport
|
6
6
|
class TestResultLine < MiniTest::Unit::TestCase
|
7
|
-
def
|
8
|
-
|
9
|
-
|
7
|
+
def test_parse_simple_error_line
|
8
|
+
assert ResultLine.parse('1355332336591,4850,POST execute,500,Internal Server Error,Thread Group 1-70,text,false,15535,75,75,http://stage.id.abril.com.br/widgets/login/execute,4847').error?
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_parse_transaction_error_line
|
12
|
+
assert ResultLine.parse('1355163053904,5933,Login,,"Number of samples in transaction : 2, number of failing samples : 1",Thread Group 1-15,,false,2836,20,20,null,0').error?
|
10
13
|
end
|
11
14
|
end
|
12
15
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jmeter-reports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: descriptive_statistics
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: formatador
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
14
62
|
- !ruby/object:Gem::Dependency
|
15
63
|
name: rake
|
16
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +91,38 @@ dependencies:
|
|
43
91
|
- - ~>
|
44
92
|
- !ruby/object:Gem::Version
|
45
93
|
version: '3'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: minitest-colorize
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: pry
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
46
126
|
description: JMeter Reports
|
47
127
|
email:
|
48
128
|
- marcos.hack@gmail.com
|
@@ -61,13 +141,15 @@ files:
|
|
61
141
|
- bin/jmeter-reports
|
62
142
|
- jmeter-reports.gemspec
|
63
143
|
- lib/jmeter/reports.rb
|
144
|
+
- lib/jmeter/reports/version.rb
|
64
145
|
- lib/jmeter/summary_report/report.rb
|
65
146
|
- lib/jmeter/summary_report/report_item.rb
|
66
147
|
- lib/jmeter/summary_report/result_line.rb
|
67
148
|
- test/fixtures/summary_report.csv
|
68
149
|
- test/helper.rb
|
150
|
+
- test/test_jmeter_reports_version.rb
|
151
|
+
- test/test_report.rb
|
69
152
|
- test/test_result_line.rb
|
70
|
-
- test/test_summary_report.rb
|
71
153
|
homepage: https://github.com/marcoshack/jmeter-reports
|
72
154
|
licenses: []
|
73
155
|
post_install_message:
|
@@ -79,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
161
|
requirements:
|
80
162
|
- - ! '>='
|
81
163
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
164
|
+
version: '1.9'
|
83
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
166
|
none: false
|
85
167
|
requirements:
|
@@ -95,6 +177,7 @@ summary: Basic tools for JMeter reports processing.
|
|
95
177
|
test_files:
|
96
178
|
- test/fixtures/summary_report.csv
|
97
179
|
- test/helper.rb
|
180
|
+
- test/test_jmeter_reports_version.rb
|
181
|
+
- test/test_report.rb
|
98
182
|
- test/test_result_line.rb
|
99
|
-
- test/test_summary_report.rb
|
100
183
|
has_rdoc:
|