gridinit-jmeter 0.1.3 → 0.1.4

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.
@@ -5,19 +5,16 @@ require 'open-uri'
5
5
  test do
6
6
 
7
7
  defaults(
8
- :domain => 'now.jbhifi.com.au',
9
- :protocol => 'https',
10
- :image_parser => true,
11
- :concurrentDwn => true,
8
+ :domain => 'now.jbhifi.com.au',
9
+ :protocol => 'https',
10
+ :image_parser => true,
11
+ :concurrentDwn => true,
12
12
  :embedded_url_re => '.+?now.((?!\$\{).)*$',
13
- :concurrentPool => 4
14
- )
15
-
16
- header(
17
- 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.27 (KHTML, like Gecko) Chrome/26.0.1386.0 Safari/537.27',
18
- 'Accept' => '*/*'
13
+ :concurrentPool => 4
19
14
  )
20
15
 
16
+ with_user_agent :iphone, 'Accept' => '*/*'
17
+
21
18
  cache :clear_each_iteration => true
22
19
 
23
20
  cookies
@@ -29,14 +26,13 @@ test do
29
26
  transaction 'jbhifi_home' do
30
27
  visit 'home', '/'
31
28
  visit 'choose', '/music/Home/Choose/?_=${__time(,)}', {
32
- :follow_redirects => false,
33
- :image_parser => true,
34
- :embedded_url_re => 'none',
29
+ :follow_redirects => false,
30
+ :image_parser => true,
31
+ :embedded_url_re => 'none',
35
32
  } do
36
- header('X-Requested-With' => 'XMLHttpRequest')
37
- assert 'contains', 'WELCOME TO JB HI-FI NOW'
33
+ with_xhr
34
+ assert 'contains', 'WELCOME TO JB HI-FI NOW'
38
35
  end
39
-
40
36
  end
41
37
 
42
38
  transaction 'jbhifi_search_xhr' do
@@ -48,7 +44,7 @@ test do
48
44
  vars.put("search_value", varArray[idx]);
49
45
  EOS
50
46
  get 'tgsearch', '/tgsearch/predictSearch.aspx?id=MD84-225&k=${search_value}' do
51
- header('X-Requested-With' => 'XMLHttpRequest')
47
+ with_xhr
52
48
  end
53
49
  end
54
50
  end
@@ -61,10 +57,10 @@ test do
61
57
  'numRecords' => 25
62
58
  }
63
59
  } do
64
- header('X-Requested-With' => 'XMLHttpRequest')
60
+ with_xhr
65
61
  extract 'id', '"c":"(.+?)"', {
66
62
  :match_number => 0,
67
- :template => '$1$'
63
+ :template => '$1$'
68
64
  }
69
65
  end
70
66
  end
@@ -75,7 +71,7 @@ test do
75
71
  'id' => '${id}'
76
72
  }
77
73
  } do
78
- header('X-Requested-With' => 'XMLHttpRequest')
74
+ with_xhr
79
75
  extract 'mp3', '"mp3":"(.+?)"', {
80
76
  :match_number => 0,
81
77
  :template => '$1$'
@@ -93,6 +89,6 @@ test do
93
89
 
94
90
  end
95
91
 
96
- end.grid ENV['API_TOKEN']
97
- # end.jmx
92
+ # end.grid ENV['API_TOKEN']
93
+ end.jmx
98
94
  # end.run(path: '/usr/share/jmeter/bin/')
@@ -10,6 +10,7 @@ require 'gridinit-jmeter/helpers/fallback_content_proxy'
10
10
  require 'gridinit-jmeter/helpers/dsl_helper'
11
11
  require 'gridinit-jmeter/helpers/logger-colors'
12
12
  require 'gridinit-jmeter/helpers/strip-heredoc'
13
+ require 'gridinit-jmeter/helpers/user-agents'
13
14
 
14
15
  # TEST PLAN
15
16
  require 'gridinit-jmeter/test_plan/test_plan'
@@ -31,100 +31,116 @@ module Gridinit
31
31
  @root.at_xpath("//jmeterTestPlan/hashTree") << node.doc.children << hash_tree
32
32
 
33
33
  variables(
34
- :name => 'testguid',
35
- :value => '${__P(testguid,${__time(,)})}',
34
+ :name => 'testguid',
35
+ :value => '${__P(testguid,${__time(,)})}',
36
36
  :comments => 'The testguid variable is mandatory when running on the Grid.') {}
37
37
  end
38
38
 
39
39
  def variables(params={}, &block)
40
40
  node = Gridinit::Jmeter::UserDefinedVariable.new(params)
41
- last_node_from(caller) << node.doc.children << hash_tree
41
+ attach_to_last(node, caller)
42
42
  self.instance_exec(&block) if block
43
43
  end
44
44
 
45
45
  def defaults(params={}, &block)
46
46
  node = Gridinit::Jmeter::RequestDefaults.new(params)
47
- last_node_from(caller) << node.doc.children << hash_tree
47
+ attach_to_last(node, caller)
48
48
  self.instance_exec(&block) if block
49
49
  end
50
50
 
51
51
  def cookies(params={}, &block)
52
52
  node = Gridinit::Jmeter::CookieManager.new(params)
53
- last_node_from(caller) << node.doc.children << hash_tree
53
+ attach_to_last(node, caller)
54
54
  self.instance_exec(&block) if block
55
55
  end
56
56
 
57
57
  def cache(params={}, &block)
58
58
  node = Gridinit::Jmeter::CacheManager.new(params)
59
- last_node_from(caller) << node.doc.children << hash_tree
59
+ attach_to_last(node, caller)
60
60
  self.instance_exec(&block) if block
61
61
  end
62
62
 
63
63
  def header(params={}, &block)
64
64
  node = Gridinit::Jmeter::HeaderManager.new(params)
65
- last_node_from(caller) << node.doc.children << hash_tree
65
+ attach_to_last(node, caller)
66
+ self.instance_exec(&block) if block
67
+ end
68
+
69
+ def with_xhr(params={}, &block)
70
+ node = Gridinit::Jmeter::HeaderManager.new(
71
+ params.merge('X-Requested-With' => 'XMLHttpRequest')
72
+ )
73
+ attach_to_last(node, caller)
74
+ self.instance_exec(&block) if block
75
+ end
76
+
77
+ def with_user_agent(device, params={}, &block)
78
+ node = Gridinit::Jmeter::HeaderManager.new(
79
+ params.merge('User-Agent' => Gridinit::Jmeter::UserAgent.new(device).string)
80
+ )
81
+ attach_to_last(node, caller)
66
82
  self.instance_exec(&block) if block
67
83
  end
68
84
 
69
85
  def auth(params={}, &block)
70
86
  node = Gridinit::Jmeter::AuthManager.new(params)
71
- last_node_from(caller) << node.doc.children << hash_tree
87
+ attach_to_last(node, caller)
72
88
  self.instance_exec(&block) if block
73
89
  end
74
90
 
75
91
  def threads(num_threads=1, params={}, &block)
76
92
  node = Gridinit::Jmeter::ThreadGroup.new(num_threads, params)
77
- last_node_from(caller) << node.doc.children << hash_tree
93
+ attach_to_last(node, caller)
78
94
  self.instance_exec(&block) if block
79
95
  end
80
96
 
81
97
  def transaction(name="Transaction Contoller", params={}, &block)
82
98
  node = Gridinit::Jmeter::Transaction.new(name, params)
83
- last_node_from(caller) << node.doc.children << hash_tree
99
+ attach_to_last(node, caller)
84
100
  self.instance_exec(&block) if block
85
101
  end
86
102
 
87
103
  def exists(var, params={}, &block)
88
104
  params[:condition] = "'${#{var}}'.length > 0"
89
105
  node = Gridinit::Jmeter::IfController.new("if #{var}", params)
90
- last_node_from(caller) << node.doc.children << hash_tree
106
+ attach_to_last(node, caller)
91
107
  self.instance_exec(&block) if block
92
108
  end
93
109
 
94
110
  def once(name="do once", params={}, &block)
95
111
  node = Gridinit::Jmeter::OnceOnly.new(name, params)
96
- last_node_from(caller) << node.doc.children << hash_tree
112
+ attach_to_last(node, caller)
97
113
  self.instance_exec(&block) if block
98
114
  end
99
115
 
100
116
  def If(name="If Controller", params={}, &block)
101
117
  node = Gridinit::Jmeter::IfController.new(name, params)
102
- last_node_from(caller) << node.doc.children << hash_tree
118
+ attach_to_last(node, caller)
103
119
  self.instance_exec(&block) if block
104
120
  end
105
121
 
106
122
  def Loop(loops=1, params={}, &block)
107
123
  node = Gridinit::Jmeter::LoopController.new(loops, params)
108
- last_node_from(caller) << node.doc.children << hash_tree
124
+ attach_to_last(node, caller)
109
125
  self.instance_exec(&block) if block
110
126
  end
111
127
 
112
128
  def counter(name="counter", params={}, &block)
113
129
  node = Gridinit::Jmeter::CounterConfig.new(name, params)
114
- last_node_from(caller) << node.doc.children << hash_tree
130
+ attach_to_last(node, caller)
115
131
  self.instance_exec(&block) if block
116
132
  end
117
133
 
118
134
  def bsh_pre(script, params={}, &block)
119
135
  node = Gridinit::Jmeter::BeanShellPreProcessor.new(script, params)
120
- last_node_from(caller) << node.doc.children << hash_tree
136
+ attach_to_last(node, caller)
121
137
  self.instance_exec(&block) if block
122
138
  end
123
139
 
124
140
  def visit(name="HTTP Request", url="", params={}, &block)
125
141
  params[:method] = 'GET'
126
142
  node = Gridinit::Jmeter::HttpSampler.new(name, url, params)
127
- last_node_from(caller) << node.doc.children << hash_tree
143
+ attach_to_last(node, caller)
128
144
  self.instance_exec(&block) if block
129
145
  end
130
146
 
@@ -133,7 +149,7 @@ module Gridinit
133
149
  def submit(name="HTTP Request", url="", params={}, &block)
134
150
  params[:method] = 'POST'
135
151
  node = Gridinit::Jmeter::HttpSampler.new(name, url, params)
136
- last_node_from(caller) << node.doc.children << hash_tree
152
+ attach_to_last(node, caller)
137
153
  self.instance_exec(&block) if block
138
154
  end
139
155
 
@@ -148,7 +164,7 @@ module Gridinit
148
164
  else
149
165
  Gridinit::Jmeter::RegexExtractor.new(*args)
150
166
  end
151
- last_node_from(caller) << node.doc.children << hash_tree
167
+ attach_to_last(node, caller)
152
168
  self.instance_exec(&block) if block
153
169
  end
154
170
 
@@ -156,7 +172,7 @@ module Gridinit
156
172
 
157
173
  def random_timer(delay=0, range=0, &block)
158
174
  node = Gridinit::Jmeter::GaussianRandomTimer.new(delay, range)
159
- last_node_from(caller) << node.doc.children << hash_tree
175
+ attach_to_last(node, caller)
160
176
  self.instance_exec(&block) if block
161
177
  end
162
178
 
@@ -164,52 +180,15 @@ module Gridinit
164
180
 
165
181
  def assert(match="contains", pattern="", params={}, &block)
166
182
  node = Gridinit::Jmeter::ResponseAssertion.new(match, pattern, params)
167
- last_node_from(caller) << node.doc.children << hash_tree
183
+ attach_to_last(node, caller)
168
184
  self.instance_exec(&block) if block
169
185
  end
170
186
 
171
187
  alias_method :web_reg_find, :assert
172
188
 
173
- def out(params={})
174
- puts doc.to_xml(:indent => 2)
175
- end
176
-
177
- def jmx(params={})
178
- file(params)
179
- logger.info "JMX saved to: #{params[:file]}"
180
- end
181
-
182
- def run(params={})
183
- file(params)
184
- logger.warn "Test executing locally ..."
185
- cmd = "#{params[:path]}jmeter -n -t #{params[:file]} -j #{params[:log] ? params[:log] : 'jmeter.log' } -l #{params[:jtl] ? params[:jtl] : 'jmeter.jtl' }"
186
- logger.info cmd
187
- `#{cmd}`
188
- logger.info "Results at: #{params[:jtl] ? params[:jtl] : 'jmeter.jtl'}"
189
- end
190
-
191
- def grid(token, params={})
192
- RestClient.proxy = params[:proxy] if params[:proxy]
193
- begin
194
- file = Tempfile.new('jmeter')
195
- file.write(doc.to_xml(:indent => 2))
196
- file.rewind
197
- response = RestClient.post "http://#{params[:endpoint] ? params[:endpoint] : 'gridinit.com'}/api?token=#{token}&region=#{params[:region]}",
198
- {
199
- :name => 'attachment',
200
- :attachment => File.new("#{file.path}", 'rb'),
201
- :multipart => true,
202
- :content_type => 'application/octet-stream'
203
- }
204
- logger.info "Results at: #{JSON.parse(response)["results"]}" if response.code == 200
205
- rescue => e
206
- logger.fatal "There was an error: #{e.message}"
207
- end
208
- end
209
-
210
189
  def view_results_full_visualizer(name="View Results Tree", params={}, &block)
211
190
  node = Gridinit::Jmeter::ViewResultsFullVisualizer.new(name, params)
212
- last_node_from(caller) << node.doc.children << hash_tree
191
+ attach_to_last(node, caller)
213
192
  self.instance_exec(&block) if block
214
193
  end
215
194
 
@@ -217,25 +196,25 @@ module Gridinit
217
196
 
218
197
  def table_visualizer(name="View Results in Table", params={}, &block)
219
198
  node = Gridinit::Jmeter::TableVisualizer.new(name, params)
220
- last_node_from(caller) << node.doc.children << hash_tree
199
+ attach_to_last(node, caller)
221
200
  self.instance_exec(&block) if block
222
201
  end
223
202
 
224
203
  def graph_visualizer(name="Graph Results", params={}, &block)
225
204
  node = Gridinit::Jmeter::GraphVisualizer.new(name, params)
226
- last_node_from(caller) << node.doc.children << hash_tree
205
+ attach_to_last(node, caller)
227
206
  self.instance_exec(&block) if block
228
207
  end
229
208
 
230
209
  def stat_visualizer(name="Stat Results", params={}, &block)
231
210
  node = Gridinit::Jmeter::StatVisualizer.new(name, params)
232
- last_node_from(caller) << node.doc.children << hash_tree
211
+ attach_to_last(node, caller)
233
212
  self.instance_exec(&block) if block
234
213
  end
235
214
 
236
215
  def response_time_graph_visualizer(name="Reponse Time Graph", params={}, &block)
237
216
  node = Gridinit::Jmeter::ResponseTimeGraphVisualizer.new(name, params)
238
- last_node_from(caller) << node.doc.children << hash_tree
217
+ attach_to_last(node, caller)
239
218
  self.instance_exec(&block) if block
240
219
  end
241
220
 
@@ -243,51 +222,88 @@ module Gridinit
243
222
 
244
223
  def summary_report(name="Summary Report", params={}, &block)
245
224
  node = Gridinit::Jmeter::SummaryReport.new(name, params)
246
- last_node_from(caller) << node.doc.children << hash_tree
225
+ attach_to_last(node, caller)
247
226
  self.instance_exec(&block) if block
248
227
  end
249
228
 
250
229
  def ldap_ext(name="LDAPExtSampler", params={}, &block)
251
230
  node = Gridinit::Jmeter::LDAPExtSampler.new(name, params)
252
- last_node_from(caller) << node.doc.children << hash_tree
231
+ attach_to_last(node, caller)
253
232
  self.instance_exec(&block) if block
254
233
  end
255
234
 
256
235
  def gc_response_codes_per_second(name="jp@gc - Response Codes per Second", params={}, &block)
257
236
  node = Gridinit::Jmeter::GCResponseCodesPerSecond.new(name, params)
258
- last_node_from(caller) << node.doc.children << hash_tree
237
+ attach_to_last(node, caller)
259
238
  self.instance_exec(&block) if block
260
239
  end
261
240
 
262
241
  def gc_response_times_distribution(name="jp@gc - Response Times Distribution", params={}, &block)
263
242
  node = Gridinit::Jmeter::GCResponseTimesDistribution.new(name, params)
264
- last_node_from(caller) << node.doc.children << hash_tree
243
+ attach_to_last(node, caller)
265
244
  self.instance_exec(&block) if block
266
245
  end
267
246
 
268
247
  def gc_response_times_over_time(name="jp@gc - Response Times Over Time", params={}, &block)
269
248
  node = Gridinit::Jmeter::GCResponseTimesOverTime.new(name, params)
270
- last_node_from(caller) << node.doc.children << hash_tree
249
+ attach_to_last(node, caller)
271
250
  self.instance_exec(&block) if block
272
251
  end
273
252
 
274
253
  def gc_response_times_percentiles(name="jp@gc - Response Times Percentiles", params={}, &block)
275
254
  node = Gridinit::Jmeter::GCResponseTimesPercentiles.new(name, params)
276
- last_node_from(caller) << node.doc.children << hash_tree
255
+ attach_to_last(node, caller)
277
256
  self.instance_exec(&block) if block
278
257
  end
279
258
 
280
259
  def gc_transactions_per_second(name="jp@gc - Transactions per Second", params={}, &block)
281
260
  node = Gridinit::Jmeter::GCTransactionsPerSecond.new(name, params)
282
- last_node_from(caller) << node.doc.children << hash_tree
261
+ attach_to_last(node, caller)
283
262
  self.instance_exec(&block) if block
284
263
  end
285
264
 
286
265
  def gc_latencies_over_time(name="jp@gc - Response Latencies Over Time", params={}, &block)
287
266
  node = Gridinit::Jmeter::GCLatenciesOverTime.new(name, params)
288
- last_node_from(caller) << node.doc.children << hash_tree
267
+ attach_to_last(node, caller)
289
268
  self.instance_exec(&block) if block
290
269
  end
270
+
271
+ def out(params={})
272
+ puts doc.to_xml(:indent => 2)
273
+ end
274
+
275
+ def jmx(params={})
276
+ file(params)
277
+ logger.info "JMX saved to: #{params[:file]}"
278
+ end
279
+
280
+ def run(params={})
281
+ file(params)
282
+ logger.warn "Test executing locally ..."
283
+ cmd = "#{params[:path]}jmeter -n -t #{params[:file]} -j #{params[:log] ? params[:log] : 'jmeter.log' } -l #{params[:jtl] ? params[:jtl] : 'jmeter.jtl' }"
284
+ logger.info cmd
285
+ `#{cmd}`
286
+ logger.info "Results at: #{params[:jtl] ? params[:jtl] : 'jmeter.jtl'}"
287
+ end
288
+
289
+ def grid(token, params={})
290
+ RestClient.proxy = params[:proxy] if params[:proxy]
291
+ begin
292
+ file = Tempfile.new('jmeter')
293
+ file.write(doc.to_xml(:indent => 2))
294
+ file.rewind
295
+ response = RestClient.post "http://#{params[:endpoint] ? params[:endpoint] : 'gridinit.com'}/api?token=#{token}&region=#{params[:region]}",
296
+ {
297
+ :name => 'attachment',
298
+ :attachment => File.new("#{file.path}", 'rb'),
299
+ :multipart => true,
300
+ :content_type => 'application/octet-stream'
301
+ }
302
+ logger.info "Results at: #{JSON.parse(response)["results"]}" if response.code == 200
303
+ rescue => e
304
+ logger.fatal "There was an error: #{e.message}"
305
+ end
306
+ end
291
307
 
292
308
  private
293
309
 
@@ -295,10 +311,10 @@ module Gridinit
295
311
  Nokogiri::XML::Node.new("hashTree", @root)
296
312
  end
297
313
 
298
- def last_node_from(calling_method)
314
+ def attach_to_last(node, calling_method)
299
315
  xpath = xpath_from(calling_method)
300
- node = @root.xpath(xpath).last
301
- node
316
+ last_node = @root.xpath(xpath).last
317
+ last_node << node.doc.children << hash_tree
302
318
  end
303
319
 
304
320
  def xpath_from(calling_method)
@@ -353,7 +369,5 @@ module Gridinit
353
369
  end
354
370
 
355
371
  def test(&block)
356
- t = Gridinit.dsl_eval(Gridinit::Jmeter::DSL.new, &block)
357
- t.out
358
- t
372
+ Gridinit.dsl_eval(Gridinit::Jmeter::DSL.new, &block)
359
373
  end
@@ -0,0 +1,29 @@
1
+ module Gridinit
2
+ module Jmeter
3
+ class UserAgent
4
+ def initialize(device)
5
+ @common_devices = {
6
+ :iphone => 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3',
7
+ :ipod => 'Mozilla/5.0 (iPod; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3',
8
+ :ipad => 'Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3',
9
+ :safari_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25',
10
+ :safari_win => 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
11
+ :ie7 => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
12
+ :ie8 => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
13
+ :ie9 => 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
14
+ :chrome_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',
15
+ :chrome_win => 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',
16
+ :ff_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0',
17
+ :ff_win => 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0',
18
+ :opera_osx => 'Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.62',
19
+ :opera_win => 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.62'
20
+ }
21
+ @device = device
22
+ end
23
+
24
+ def string
25
+ @common_devices[@device] || @common_devices[:chrome_osx]
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  module Gridinit
2
2
  module Jmeter
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  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.1.3
4
+ version: 0.1.4
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-30 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -102,6 +102,7 @@ files:
102
102
  - lib/gridinit-jmeter/helpers/fallback_content_proxy.rb
103
103
  - lib/gridinit-jmeter/helpers/logger-colors.rb
104
104
  - lib/gridinit-jmeter/helpers/strip-heredoc.rb
105
+ - lib/gridinit-jmeter/helpers/user-agents.rb
105
106
  - lib/gridinit-jmeter/listeners/gc_latencies_over_time.rb
106
107
  - lib/gridinit-jmeter/listeners/gc_response_codes_per_second.rb
107
108
  - lib/gridinit-jmeter/listeners/gc_response_times_distribution.rb