gridinit-jmeter 0.0.8 → 0.0.9
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/examples/basic_header.rb +17 -0
- data/examples/basic_post.rb +16 -0
- data/lib/gridinit-jmeter.rb +2 -0
- data/lib/gridinit-jmeter/dsl.rb +19 -3
- data/lib/gridinit-jmeter/graph_visualizer.rb +1 -1
- data/lib/gridinit-jmeter/header_manager.rb +25 -0
- data/lib/gridinit-jmeter/http_sampler.rb +26 -8
- data/lib/gridinit-jmeter/request_defaults.rb +3 -0
- data/lib/gridinit-jmeter/summary_report.rb +1 -1
- data/lib/gridinit-jmeter/table_visualizer.rb +1 -1
- data/lib/gridinit-jmeter/version.rb +1 -1
- data/lib/gridinit-jmeter/view_results_full_visualizer.rb +51 -0
- metadata +6 -2
@@ -0,0 +1,17 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'gridinit-jmeter'
|
3
|
+
|
4
|
+
test do
|
5
|
+
header 'User-Agent' => 'Firefox'
|
6
|
+
threads 1 do
|
7
|
+
transaction 'Google Search' do
|
8
|
+
visit 'Home Page', 'http://google.com/'
|
9
|
+
end
|
10
|
+
|
11
|
+
transaction 'Google Search via XHR' do
|
12
|
+
visit 'Home Page', 'http://google.com/' do
|
13
|
+
header 'X-Requested-With' => 'XMLHttpRequest'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end.jmx
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'gridinit-jmeter'
|
3
|
+
|
4
|
+
test do
|
5
|
+
|
6
|
+
threads 1 do
|
7
|
+
|
8
|
+
transaction 'Post with a Raw Body', {parent: true} do
|
9
|
+
post 'Home Page', 'http://google.com', {
|
10
|
+
raw_body: '{"name":"Big Poncho","price":10,"vendor_attendance_id":24,"product_id":1}'
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end.jmx
|
data/lib/gridinit-jmeter.rb
CHANGED
@@ -13,6 +13,7 @@ require 'gridinit-jmeter/request_defaults'
|
|
13
13
|
require 'gridinit-jmeter/auth_manager'
|
14
14
|
require 'gridinit-jmeter/cookie_manager'
|
15
15
|
require 'gridinit-jmeter/cache_manager'
|
16
|
+
require 'gridinit-jmeter/header_manager'
|
16
17
|
require 'gridinit-jmeter/thread_group'
|
17
18
|
require 'gridinit-jmeter/transaction'
|
18
19
|
require 'gridinit-jmeter/once_only'
|
@@ -23,6 +24,7 @@ require 'gridinit-jmeter/xpath_extractor'
|
|
23
24
|
require 'gridinit-jmeter/user_defined_variable'
|
24
25
|
require 'gridinit-jmeter/gaussian_random_timer'
|
25
26
|
require 'gridinit-jmeter/response_assertion'
|
27
|
+
require 'gridinit-jmeter/view_results_full_visualizer'
|
26
28
|
require 'gridinit-jmeter/table_visualizer'
|
27
29
|
require 'gridinit-jmeter/graph_visualizer'
|
28
30
|
require 'gridinit-jmeter/summary_report'
|
data/lib/gridinit-jmeter/dsl.rb
CHANGED
@@ -60,6 +60,12 @@ module Gridinit
|
|
60
60
|
self.instance_exec(&block) if block
|
61
61
|
end
|
62
62
|
|
63
|
+
def header(params={}, &block)
|
64
|
+
node = Gridinit::Jmeter::HeaderManager.new(params)
|
65
|
+
last_node_from(caller) << node.doc.children << hash_tree
|
66
|
+
self.instance_exec(&block) if block
|
67
|
+
end
|
68
|
+
|
63
69
|
def auth(params={}, &block)
|
64
70
|
node = Gridinit::Jmeter::AuthManager.new(params)
|
65
71
|
last_node_from(caller) << node.doc.children << hash_tree
|
@@ -175,19 +181,27 @@ module Gridinit
|
|
175
181
|
end
|
176
182
|
end
|
177
183
|
|
178
|
-
def
|
184
|
+
def view_results_full_visualizer(name="View Results Tree", params={}, &block)
|
185
|
+
node = Gridinit::Jmeter::ViewResultsFullVisualizer.new(name, params)
|
186
|
+
last_node_from(caller) << node.doc.children << hash_tree
|
187
|
+
self.instance_exec(&block) if block
|
188
|
+
end
|
189
|
+
|
190
|
+
alias_method :view_results, :view_results_full_visualizer
|
191
|
+
|
192
|
+
def table_visualizer(name="View Results in Table", params={}, &block)
|
179
193
|
node = Gridinit::Jmeter::TableVisualizer.new(name, params)
|
180
194
|
last_node_from(caller) << node.doc.children << hash_tree
|
181
195
|
self.instance_exec(&block) if block
|
182
196
|
end
|
183
197
|
|
184
|
-
def graph_visualizer(name="", params={}, &block)
|
198
|
+
def graph_visualizer(name="Graph Results", params={}, &block)
|
185
199
|
node = Gridinit::Jmeter::GraphVisualizer.new(name, params)
|
186
200
|
last_node_from(caller) << node.doc.children << hash_tree
|
187
201
|
self.instance_exec(&block) if block
|
188
202
|
end
|
189
203
|
|
190
|
-
def summary_report(name="", params={}, &block)
|
204
|
+
def summary_report(name="Summary Report", params={}, &block)
|
191
205
|
node = Gridinit::Jmeter::SummaryReport.new(name, params)
|
192
206
|
last_node_from(caller) << node.doc.children << hash_tree
|
193
207
|
self.instance_exec(&block) if block
|
@@ -219,6 +233,8 @@ module Gridinit
|
|
219
233
|
'//HTTPSamplerProxy/following-sibling::hashTree'
|
220
234
|
when 'submit'
|
221
235
|
'//HTTPSamplerProxy/following-sibling::hashTree'
|
236
|
+
when 'post'
|
237
|
+
'//HTTPSamplerProxy/following-sibling::hashTree'
|
222
238
|
when 'extract'
|
223
239
|
'//RegexExtractor/following-sibling::hashTree'
|
224
240
|
when 'random_timer'
|
@@ -3,7 +3,7 @@ module Gridinit
|
|
3
3
|
|
4
4
|
class GraphVisualizer
|
5
5
|
attr_accessor :doc
|
6
|
-
def initialize(name
|
6
|
+
def initialize(name, params={})
|
7
7
|
@doc = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
8
|
<ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="#{name}" enabled="true">
|
9
9
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Gridinit
|
2
|
+
module Jmeter
|
3
|
+
|
4
|
+
class HeaderManager
|
5
|
+
attr_accessor :doc
|
6
|
+
def initialize(params={})
|
7
|
+
@doc = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
|
+
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
9
|
+
<collectionProp name="HeaderManager.headers"/>
|
10
|
+
</HeaderManager>
|
11
|
+
EOF
|
12
|
+
params.each do |name, value|
|
13
|
+
@doc.at_xpath('//collectionProp') <<
|
14
|
+
Nokogiri::XML(<<-EOF.strip_heredoc).children
|
15
|
+
<elementProp name="" elementType="Header">
|
16
|
+
<stringProp name="Header.name">#{name}</stringProp>
|
17
|
+
<stringProp name="Header.value">#{value}</stringProp>
|
18
|
+
</elementProp>
|
19
|
+
EOF
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -22,13 +22,15 @@ module Gridinit
|
|
22
22
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
23
23
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
24
24
|
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
25
|
-
<boolProp name="HTTPSampler.image_parser">
|
26
|
-
<boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
|
25
|
+
<boolProp name="HTTPSampler.image_parser">false</boolProp>
|
27
26
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
27
|
+
<boolProp name="HTTPSampler.concurrentDwn">false</boolProp>
|
28
|
+
<stringProp name="HTTPSampler.concurrentPool">4</stringProp>
|
28
29
|
</HTTPSamplerProxy>
|
29
30
|
EOF
|
30
31
|
parse_url(url, params) unless url.empty?
|
31
|
-
fill_in(params)
|
32
|
+
fill_in(params) if params[:fill_in]
|
33
|
+
raw_body(params) if params[:raw_body]
|
32
34
|
params[:query] && params[:query].split('&').each do |param|
|
33
35
|
name,value = param.split('=')
|
34
36
|
fill_in({ fill_in: { "#{name}" => value }, always_encode: params[:always_encode] })
|
@@ -40,7 +42,7 @@ module Gridinit
|
|
40
42
|
end
|
41
43
|
|
42
44
|
def parse_uri(url)
|
43
|
-
URI.parse(url).scheme.nil? ? URI.parse("http://#{url}") : URI.parse(url)
|
45
|
+
URI.parse(URI::encode(url)).scheme.nil? ? URI.parse(URI::encode("http://#{url}")) : URI.parse(URI::encode(url))
|
44
46
|
end
|
45
47
|
|
46
48
|
def parse_url(url, params)
|
@@ -48,11 +50,11 @@ module Gridinit
|
|
48
50
|
params[:path] = url # special case for named expressions
|
49
51
|
else
|
50
52
|
uri = parse_uri(url)
|
51
|
-
params[:
|
53
|
+
params[:port] ||= uri.port unless URI.parse(URI::encode(url)).scheme.nil?
|
54
|
+
params[:protocol] ||= uri.scheme unless URI.parse(URI::encode(url)).scheme.nil?
|
52
55
|
params[:domain] ||= uri.host
|
53
|
-
params[:
|
54
|
-
params[:
|
55
|
-
params[:query] ||= uri.query
|
56
|
+
params[:path] ||= uri.path && URI::decode(uri.path)
|
57
|
+
params[:query] ||= uri.query && URI::decode(uri.query)
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -72,6 +74,22 @@ module Gridinit
|
|
72
74
|
params.delete :fill_in
|
73
75
|
end
|
74
76
|
|
77
|
+
def raw_body(params)
|
78
|
+
@doc.at_xpath('//HTTPSamplerProxy') <<
|
79
|
+
Nokogiri::XML(<<-EOF.strip_heredoc).children
|
80
|
+
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
81
|
+
EOF
|
82
|
+
@doc.at_xpath('//collectionProp') <<
|
83
|
+
Nokogiri::XML(<<-EOF.strip_heredoc).children
|
84
|
+
<elementProp name="" elementType="HTTPArgument">
|
85
|
+
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
86
|
+
<stringProp name="Argument.value">#{params[:raw_body]}</stringProp>
|
87
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
88
|
+
</elementProp>
|
89
|
+
EOF
|
90
|
+
params.delete :raw_body
|
91
|
+
end
|
92
|
+
|
75
93
|
end
|
76
94
|
|
77
95
|
end
|
@@ -16,6 +16,9 @@ module Gridinit
|
|
16
16
|
<stringProp name="HTTPSampler.protocol"></stringProp>
|
17
17
|
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
18
18
|
<stringProp name="HTTPSampler.path"></stringProp>
|
19
|
+
<boolProp name="HTTPSampler.image_parser">false</boolProp>
|
20
|
+
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
21
|
+
<boolProp name="HTTPSampler.concurrentDwn">false</boolProp>
|
19
22
|
<stringProp name="HTTPSampler.concurrentPool">4</stringProp>
|
20
23
|
</ConfigTestElement>
|
21
24
|
EOF
|
@@ -3,7 +3,7 @@ module Gridinit
|
|
3
3
|
|
4
4
|
class SummaryReport
|
5
5
|
attr_accessor :doc
|
6
|
-
def initialize(name
|
6
|
+
def initialize(name, params={})
|
7
7
|
@doc = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
8
|
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="#{name}" enabled="true">
|
9
9
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
@@ -3,7 +3,7 @@ module Gridinit
|
|
3
3
|
|
4
4
|
class TableVisualizer
|
5
5
|
attr_accessor :doc
|
6
|
-
def initialize(name
|
6
|
+
def initialize(name, params={})
|
7
7
|
@doc = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
8
|
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="#{name}" enabled="true">
|
9
9
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Gridinit
|
2
|
+
module Jmeter
|
3
|
+
|
4
|
+
class ViewResultsFullVisualizer
|
5
|
+
attr_accessor :doc
|
6
|
+
def initialize(name, params={})
|
7
|
+
@doc = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
|
+
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="#{name}" enabled="true">
|
9
|
+
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
10
|
+
<objProp>
|
11
|
+
<name>saveConfig</name>
|
12
|
+
<value class="SampleSaveConfiguration">
|
13
|
+
<time>true</time>
|
14
|
+
<latency>true</latency>
|
15
|
+
<timestamp>true</timestamp>
|
16
|
+
<success>true</success>
|
17
|
+
<label>true</label>
|
18
|
+
<code>true</code>
|
19
|
+
<message>true</message>
|
20
|
+
<threadName>true</threadName>
|
21
|
+
<dataType>true</dataType>
|
22
|
+
<encoding>false</encoding>
|
23
|
+
<assertions>true</assertions>
|
24
|
+
<subresults>true</subresults>
|
25
|
+
<responseData>false</responseData>
|
26
|
+
<samplerData>false</samplerData>
|
27
|
+
<xml>true</xml>
|
28
|
+
<fieldNames>false</fieldNames>
|
29
|
+
<responseHeaders>false</responseHeaders>
|
30
|
+
<requestHeaders>false</requestHeaders>
|
31
|
+
<responseDataOnError>false</responseDataOnError>
|
32
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
33
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
34
|
+
<bytes>true</bytes>
|
35
|
+
</value>
|
36
|
+
</objProp>
|
37
|
+
<stringProp name="filename"></stringProp>
|
38
|
+
</ResultCollector>
|
39
|
+
EOF
|
40
|
+
params.each do |name, value|
|
41
|
+
node = @doc.children.xpath("//*[contains(@name,\"#{name.to_s}\")]")
|
42
|
+
node.first.content = value unless node.empty?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gridinit-jmeter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -68,6 +68,8 @@ files:
|
|
68
68
|
- examples/basic_extract.rb
|
69
69
|
- examples/basic_google.rb
|
70
70
|
- examples/basic_grid.rb
|
71
|
+
- examples/basic_header.rb
|
72
|
+
- examples/basic_post.rb
|
71
73
|
- examples/basic_proxy.rb
|
72
74
|
- examples/basic_query_params.rb
|
73
75
|
- examples/basic_run.rb
|
@@ -85,6 +87,7 @@ files:
|
|
85
87
|
- lib/gridinit-jmeter/fallback_content_proxy.rb
|
86
88
|
- lib/gridinit-jmeter/gaussian_random_timer.rb
|
87
89
|
- lib/gridinit-jmeter/graph_visualizer.rb
|
90
|
+
- lib/gridinit-jmeter/header_manager.rb
|
88
91
|
- lib/gridinit-jmeter/http_sampler.rb
|
89
92
|
- lib/gridinit-jmeter/if_controller.rb
|
90
93
|
- lib/gridinit-jmeter/logger-colors.rb
|
@@ -100,6 +103,7 @@ files:
|
|
100
103
|
- lib/gridinit-jmeter/transaction.rb
|
101
104
|
- lib/gridinit-jmeter/user_defined_variable.rb
|
102
105
|
- lib/gridinit-jmeter/version.rb
|
106
|
+
- lib/gridinit-jmeter/view_results_full_visualizer.rb
|
103
107
|
- lib/gridinit-jmeter/xpath_extractor.rb
|
104
108
|
- spec/dsl_spec.rb
|
105
109
|
- spec/spec_helper.rb
|