gridinit-jmeter 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|