ruby-jmeter 2.13.10 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -1
  5. data/Gemfile +2 -2
  6. data/LICENSE.txt +2 -2
  7. data/README.md +4 -5
  8. data/Rakefile +3 -3
  9. data/examples/{basic_os_process_sampler.rb → OS_process_sampler.rb} +1 -1
  10. data/examples/{basic_assertion_results.rb → assertion_results.rb} +1 -3
  11. data/examples/basic_auth.rb +1 -1
  12. data/examples/{basic_browser_headers.rb → browser_headers.rb} +1 -1
  13. data/examples/{basic_composite_graph.rb → composite_graph.rb} +1 -1
  14. data/examples/{basic_gc_dummy_sampler.rb → dummy_sampler.rb} +1 -3
  15. data/examples/{basic_duration_assertion.rb → duration_assertion.rb} +1 -1
  16. data/examples/etsy_login_browse.rb +1 -4
  17. data/examples/{basic_extract.rb → extract.rb} +1 -1
  18. data/examples/{basic_foreach.rb → foreach_controller.rb} +1 -4
  19. data/examples/{basic_header.rb → header_manager.rb} +2 -3
  20. data/examples/{basic_cache.rb → http_cache_manager.rb} +1 -1
  21. data/examples/{basic_cookies.rb → http_cookie_manager.rb} +1 -1
  22. data/examples/{basic_http_request_defaults.rb → http_request_defaults.rb} +3 -2
  23. data/examples/{basic_post.rb → http_request_post.rb} +1 -5
  24. data/examples/{basic_http_request_with_files.rb → http_request_with_files.rb} +1 -1
  25. data/examples/{basic_query_params.rb → http_request_with_query_params.rb} +1 -1
  26. data/examples/{basic_gc_results.rb → jmeter_plugins_graphs.rb} +1 -2
  27. data/examples/{basic_json_path_assertion.rb → json_path_assertions.rb} +1 -1
  28. data/examples/{basic_json_path_extractor.rb → json_path_extractor.rb} +1 -3
  29. data/examples/{basic_ldap_ext.rb → ldap_sampler.rb} +1 -1
  30. data/examples/{basic_loadosophia.rb → loadosophia.rb} +1 -1
  31. data/examples/{basic_loops.rb → loop_controller.rb} +2 -2
  32. data/examples/{basic_counter.rb → loops_with_counter.rb} +2 -2
  33. data/examples/{basic_perfmon.rb → perfmon.rb} +1 -1
  34. data/examples/real_page_objects.rb +1 -1
  35. data/examples/real_user_objects_github.rb +1 -1
  36. data/examples/regular_expression_extractor.rb +11 -0
  37. data/examples/{basic_assertion.rb → response_assertion.rb} +2 -1
  38. data/examples/{basic_response_time_percentiles_graph.rb → response_time_percentiles_graph.rb} +1 -2
  39. data/examples/{basic_simple_data_writer.rb → simple_data_writer_listener.rb} +1 -1
  40. data/examples/{basic_stepping_thread_group.rb → stepping_thread_group.rb} +1 -3
  41. data/examples/{basic_test_fragment.rb → test_fragment.rb} +1 -1
  42. data/examples/{basic_think_time.rb → think_time.rb} +2 -2
  43. data/examples/{basic_thread_groups.rb → thread_groups.rb} +1 -1
  44. data/examples/{basic_throughput_controller.rb → throughput_controller.rb} +1 -1
  45. data/examples/{basic_throughput_shaping_timer.rb → throughput_shaping_timer.rb} +1 -2
  46. data/examples/{basic_ultimate_thread_group.rb → ultimate_thread_group.rb} +1 -2
  47. data/examples/{basic_user_defined_variables.rb → user_defined_variables.rb} +1 -1
  48. data/examples/{basic_preprocessor_user_parameters.rb → user_parameters.rb} +7 -7
  49. data/lib/ruby-jmeter.rb +13 -8
  50. data/lib/ruby-jmeter/DSL.md +3 -1
  51. data/lib/ruby-jmeter/dsl.rb +11 -615
  52. data/lib/ruby-jmeter/dsl/foreach_controller.rb +0 -2
  53. data/lib/ruby-jmeter/dsl/html_parameter_mask.rb +3 -3
  54. data/lib/ruby-jmeter/dsl/http_request.rb +0 -2
  55. data/lib/ruby-jmeter/dsl/http_request_defaults.rb +0 -1
  56. data/lib/ruby-jmeter/dsl/jms_publisher.rb +2 -0
  57. data/lib/ruby-jmeter/dsl/regular_expression_extractor.rb +1 -3
  58. data/lib/ruby-jmeter/dsl/response_assertion.rb +0 -1
  59. data/lib/ruby-jmeter/dsl/test_fragment.rb +1 -1
  60. data/lib/ruby-jmeter/dsl/user_parameters.rb +3 -1
  61. data/lib/ruby-jmeter/extend/assertions/response_assertion.rb +36 -0
  62. data/lib/ruby-jmeter/extend/config_elements/header_manager.rb +13 -0
  63. data/lib/ruby-jmeter/extend/config_elements/http_cache_manager.rb +11 -0
  64. data/lib/ruby-jmeter/extend/config_elements/http_cookie_manager.rb +11 -0
  65. data/lib/ruby-jmeter/extend/config_elements/http_request_defaults.rb +28 -0
  66. data/lib/ruby-jmeter/extend/config_elements/user_defined_variables.rb +13 -0
  67. data/lib/ruby-jmeter/extend/config_elements/user_parameters.rb +31 -0
  68. data/lib/ruby-jmeter/extend/controllers/foreach_controller.rb +25 -0
  69. data/lib/ruby-jmeter/extend/controllers/loop_controller.rb +11 -0
  70. data/lib/ruby-jmeter/extend/controllers/module_controller.rb +23 -0
  71. data/lib/ruby-jmeter/extend/controllers/throughput_controller.rb +15 -0
  72. data/lib/ruby-jmeter/extend/controllers/transaction_controller.rb +14 -0
  73. data/lib/ruby-jmeter/extend/misc/aliases.rb +21 -0
  74. data/lib/ruby-jmeter/extend/misc/exists.rb +13 -0
  75. data/lib/ruby-jmeter/extend/misc/flood.rb +48 -0
  76. data/lib/ruby-jmeter/extend/misc/with_helpers.rb +27 -0
  77. data/lib/ruby-jmeter/extend/plugins/jmeter_plugins.rb +115 -0
  78. data/lib/ruby-jmeter/extend/processors/extract.rb +28 -0
  79. data/lib/ruby-jmeter/extend/processors/regular_expression_extractor.rb +25 -0
  80. data/lib/ruby-jmeter/extend/samplers/http_request.rb +47 -0
  81. data/lib/ruby-jmeter/extend/samplers/soapxmlrpc_request.rb +9 -0
  82. data/lib/ruby-jmeter/extend/threads/setup_thread_group.rb +18 -0
  83. data/lib/ruby-jmeter/extend/threads/thread_group.rb +19 -0
  84. data/lib/ruby-jmeter/extend/timers/constant_throughput_timer.rb +12 -0
  85. data/lib/ruby-jmeter/extend/timers/random_timer.rb +14 -0
  86. data/lib/ruby-jmeter/helpers/helper.rb +1 -2
  87. data/lib/ruby-jmeter/idl.xml +6 -4
  88. data/lib/ruby-jmeter/version.rb +1 -1
  89. data/ruby-jmeter.gemspec +7 -7
  90. data/spec/constant_throughput_timer_spec.rb +22 -0
  91. data/spec/header_manager_spec.rb +37 -0
  92. data/spec/http_cache_manager_spec.rb +17 -0
  93. data/spec/http_cookie_manager_spec.rb +17 -0
  94. data/spec/http_request_defaults_spec.rb +47 -0
  95. data/spec/http_request_spec.rb +305 -0
  96. data/spec/jmeter_plugins_spec.rb +155 -0
  97. data/spec/json_extractor_spec.rb +19 -0
  98. data/spec/json_path_assertion_spec.rb +28 -0
  99. data/spec/logic_controller_spec.rb +148 -0
  100. data/spec/loop_controller_spec.rb +19 -0
  101. data/spec/module_controller_spec.rb +56 -0
  102. data/spec/regular_expression_extractor_spec.rb +63 -0
  103. data/spec/response_assertion_spec.rb +69 -0
  104. data/spec/setup_thread_group_spec.rb +31 -0
  105. data/spec/thread_group_spec.rb +57 -0
  106. data/spec/throughput_controller_spec.rb +24 -0
  107. data/spec/transaction_controller_spec.rb +30 -0
  108. data/spec/user_defined_variables_spec.rb +22 -0
  109. data/spec/user_parameters_spec.rb +45 -0
  110. data/spec/with_helpers_spec.rb +57 -0
  111. data/spec/xpath_extractor_spec.rb +15 -0
  112. metadata +87 -59
  113. data/examples/basic_flood.rb +0 -12
  114. data/examples/basic_flood_real.rb +0 -7
  115. data/examples/basic_flood_with_csv.rb +0 -16
  116. data/examples/basic_google.rb +0 -8
  117. data/examples/basic_har.json +0 -4252
  118. data/examples/basic_har.rb +0 -34
  119. data/examples/basic_meta_fu.rb +0 -63
  120. data/examples/basic_response_assertion.rb +0 -13
  121. data/examples/basic_run.rb +0 -12
  122. data/examples/basic_testdata.rb +0 -60
  123. data/examples/demo.csv +0 -3
  124. data/examples/real_flood_test.rb +0 -14
  125. data/examples/real_flood_test_data.rb +0 -15
  126. data/examples/real_immi.gov.au_visa.rb +0 -78
  127. data/lib/ruby-jmeter/helpers/jmeter.properties +0 -28
  128. data/spec/dsl_spec.rb +0 -1157
  129. data/spec/stub.rb +0 -31
@@ -17,8 +17,6 @@ module RubyJmeter
17
17
  <stringProp name="ForeachController.inputVal"/>
18
18
  <stringProp name="ForeachController.returnVal"/>
19
19
  <boolProp name="ForeachController.useSeparator">true</boolProp>
20
- #{'<stringProp name="ForeachController.startIndex"/>' if params[:startIndex]}
21
- #{'<stringProp name="ForeachController.endIndex"/>' if params[:endIndex]}
22
20
  </ForeachController>)
23
21
  EOS
24
22
  update params
@@ -13,8 +13,8 @@ module RubyJmeter
13
13
  def initialize(params={})
14
14
  testname = params.kind_of?(Array) ? 'HtmlParameterMask' : (params[:name] || 'HtmlParameterMask')
15
15
  @doc = Nokogiri::XML(<<-EOS.strip_heredoc)
16
- <ParamModifier guiclass="ParamModifierGui" testclass="ParamModifier" testname="#{testname}" enabled="true">
17
- <elementProp name="ParamModifier.mask" elementType="ParamMask">
16
+ <ConfigTestElement guiclass="ObsoleteGui" testclass="ConfigTestElement" testname="#{testname}" enabled="true">
17
+ <elementProp name="ParamModifier.mask" elementType="ConfigTestElement">
18
18
  <stringProp name="ParamModifier.field_name"/>
19
19
  <stringProp name="ParamModifier.prefix"/>
20
20
  <longProp name="ParamModifier.lower_bound">0</longProp>
@@ -22,7 +22,7 @@ module RubyJmeter
22
22
  <longProp name="ParamModifier.increment">1</longProp>
23
23
  <stringProp name="ParamModifier.suffix"/>
24
24
  </elementProp>
25
- </ParamModifier>)
25
+ </ConfigTestElement>)
26
26
  EOS
27
27
  update params
28
28
  update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
@@ -29,10 +29,8 @@ module RubyJmeter
29
29
  <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
30
30
  <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
31
31
  <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
32
- <stringProp name="HTTPSampler.implementation"/>
33
32
  <boolProp name="HTTPSampler.monitor">false</boolProp>
34
33
  <stringProp name="HTTPSampler.embedded_url_re"/>
35
- <stringProp name="TestPlan.comments"/>
36
34
  </HTTPSamplerProxy>)
37
35
  EOS
38
36
  update params
@@ -28,7 +28,6 @@ module RubyJmeter
28
28
  <boolProp name="HTTPSampler.image_parser">true</boolProp>
29
29
  <boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
30
30
  <stringProp name="HTTPSampler.concurrentPool">4</stringProp>
31
- <stringProp name="HTTPSampler.embedded_url_re"/>
32
31
  </ConfigTestElement>)
33
32
  EOS
34
33
  update params
@@ -37,6 +37,8 @@ module RubyJmeter
37
37
  </elementProp>
38
38
  </collectionProp>
39
39
  </elementProp>
40
+ <stringProp name="jms.expiration"/>
41
+ <stringProp name="jms.priority"/>
40
42
  </PublisherSampler>)
41
43
  EOS
42
44
  update params
@@ -20,9 +20,7 @@ module RubyJmeter
20
20
  <stringProp name="RegexExtractor.template"/>
21
21
  <stringProp name="RegexExtractor.default"/>
22
22
  <stringProp name="RegexExtractor.match_number"/>
23
- #{"<stringProp name=\"Sample.scope\">params[:scope]</stringProp>" if params[:scope]}
24
- #{"<stringProp name=\"Sample.scope\">variable</stringProp>" if params[:variable]}
25
- #{"<stringProp name=\"Scope.variable\">params[:variable]</stringProp>" if params[:variable]}
23
+ <stringProp name="Sample.scope">all</stringProp>
26
24
  </RegexExtractor>)
27
25
  EOS
28
26
  update params
@@ -21,7 +21,6 @@ module RubyJmeter
21
21
  <boolProp name="Assertion.assume_success">false</boolProp>
22
22
  <intProp name="Assertion.test_type">16</intProp>
23
23
  <stringProp name="Assertion.scope">all</stringProp>
24
- <stringProp name="Scope.variable"></stringProp>
25
24
  </ResponseAssertion>)
26
25
  EOS
27
26
  update params
@@ -13,7 +13,7 @@ module RubyJmeter
13
13
  def initialize(params={})
14
14
  testname = params.kind_of?(Array) ? 'TestFragment' : (params[:name] || 'TestFragment')
15
15
  @doc = Nokogiri::XML(<<-EOS.strip_heredoc)
16
- <TestFragmentController guiclass="TestFragmentControllerGui" testclass="TestFragmentController" testname="#{testname}" enabled="false"/>)
16
+ <TestFragmentController guiclass="TestFragmentControllerGui" testclass="TestFragmentController" testname="#{testname}" enabled="true"/>)
17
17
  EOS
18
18
  update params
19
19
  update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
@@ -15,7 +15,9 @@ module RubyJmeter
15
15
  @doc = Nokogiri::XML(<<-EOS.strip_heredoc)
16
16
  <UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="#{testname}" enabled="true">
17
17
  <collectionProp name="UserParameters.names"/>
18
- <collectionProp name="UserParameters.thread_values"/>
18
+ <collectionProp name="UserParameters.thread_values">
19
+ <collectionProp name="1"/>
20
+ <collectionProp name="1"/>
19
21
  </collectionProp>
20
22
  <boolProp name="UserParameters.per_iteration">false</boolProp>
21
23
  </UserParameters>)
@@ -0,0 +1,36 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def response_assertion(params, &block)
4
+ params[:test_type] = parse_test_type(params)
5
+ params['0'] = params.values.first
6
+
7
+ if params[:json]
8
+ params[:EXPECTED_VALUE] = params[:value]
9
+ params[:JSON_PATH] = params[:json]
10
+ node = RubyJmeter::Plugins::JsonPathAssertion.new(params)
11
+ end
12
+
13
+ node ||= RubyJmeter::ResponseAssertion.new(params).tap do |node|
14
+ if params[:variable]
15
+ params['Scope.variable'] = params[:variable]
16
+ node.doc.xpath("//stringProp[@name='Assertion.scope']").first.content = 'variable'
17
+
18
+ node.doc.children.first.add_child (
19
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
20
+ <stringProp name="Scope.variable">#{params[:variable]}</stringProp>
21
+ EOS
22
+ )
23
+ end
24
+
25
+ if params[:scope] == 'main'
26
+ node.doc.xpath("//stringProp[@name='Assertion.scope']").remove
27
+ end
28
+ end
29
+
30
+ attach_node(node, &block)
31
+ end
32
+
33
+ alias assert response_assertion
34
+ alias web_reg_find response_assertion
35
+ end
36
+ end
@@ -0,0 +1,13 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def http_header_manager(params, &block)
4
+ if params.is_a?(Hash)
5
+ params['Header.name'] = params[:name]
6
+ end
7
+
8
+ super
9
+ end
10
+
11
+ alias header http_header_manager
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def http_cache_manager(params = {}, &block)
4
+ params[:clearEachIteration] = true if params.keys.include? :clear_each_iteration
5
+
6
+ super
7
+ end
8
+
9
+ alias cache http_cache_manager
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def http_cookie_manager(params = {}, &block)
4
+ params[:clearEachIteration] = true if params.keys.include? :clear_each_iteration
5
+
6
+ super
7
+ end
8
+
9
+ alias cookies http_cookie_manager
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def http_request_defaults(params = {}, &block)
4
+ params[:image_parser] = true if params.keys.include? :download_resources
5
+ params[:concurrentDwn] = true if params.keys.include? :use_concurrent_pool
6
+ params[:concurrentPool] = params[:use_concurrent_pool] if params.keys.include? :use_concurrent_pool
7
+
8
+ node = RubyJmeter::HttpRequestDefaults.new(params).tap do |node|
9
+ node.doc.children.first.add_child (
10
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
11
+ <stringProp name="HTTPSampler.embedded_url_re">#{params[:urls_must_match]}</stringProp>
12
+ EOS
13
+ ) if params[:urls_must_match]
14
+
15
+ node.doc.children.first.add_child (
16
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
17
+ <boolProp name="HTTPSampler.md5">true</stringProp>
18
+ EOS
19
+ ) if params[:md5]
20
+
21
+ end
22
+
23
+ attach_node(node, &block)
24
+ end
25
+
26
+ alias defaults http_request_defaults
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def user_defined_variables(params, &block)
4
+ if params.is_a?(Hash)
5
+ params['Argument.name'] = params[:name]
6
+ end
7
+
8
+ super
9
+ end
10
+
11
+ alias variables user_defined_variables
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def user_parameters(params, &block)
4
+ params['Argument.name'] = params[:name] if params.is_a?(Hash)
5
+
6
+ params[:names] = Nokogiri::XML::Builder.new do |b|
7
+ b.builder do
8
+ params[:names].each do |name|
9
+ b.stringProp name, name: name
10
+ end
11
+ end
12
+ end
13
+
14
+ params[:thread_values] = Nokogiri::XML::Builder.new do |b|
15
+ b.builder do
16
+ params[:thread_values].map do |user, values|
17
+ b.collectionProp name: user do
18
+ values.each_with_index.map do |value, index|
19
+ b.stringProp value, name: index
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ super
27
+ end
28
+
29
+ alias parameters user_parameters
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def foreach_controller(params = {}, &block)
4
+ node = RubyJmeter::ForeachController.new(params).tap do |node|
5
+ if params[:start_index]
6
+ params[:startIndex] = params[:start_index]
7
+ node.doc.children.first.add_child (
8
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
9
+ <stringProp name="ForeachController.startIndex"/>
10
+ EOS
11
+ )
12
+ end
13
+
14
+ if params[:end_index]
15
+ params[:endIndex] = params[:end_index]
16
+ node.doc.children.first.add_child (
17
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
18
+ <stringProp name="ForeachController.endIndex"/>
19
+ EOS
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def loop_controller(params, &block)
4
+ params[:loops] = params[:count] || 1
5
+
6
+ super
7
+ end
8
+
9
+ alias loops loop_controller
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def module_controller(params, &block)
4
+ node = RubyJmeter::ModuleController.new(params)
5
+
6
+ if params[:test_fragment]
7
+ params[:test_fragment].kind_of?(String) &&
8
+ params[:test_fragment].split('/')
9
+ elsif params[:node_path]
10
+ params[:node_path]
11
+ else
12
+ []
13
+ end.each_with_index do |node_name, index|
14
+ node.doc.at_xpath('//collectionProp') <<
15
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
16
+ <stringProp name="node_#{index}">#{node_name}</stringProp>
17
+ EOS
18
+ end
19
+
20
+ attach_node(node, &block)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def throughput_controller(params = {}, &block)
4
+ params[:style] = 1 if params[:percent]
5
+ params[:maxThroughput] = params[:total] || params[:percent] || 1
6
+
7
+ node = RubyJmeter::ThroughputController.new(params)
8
+ node.doc.xpath(".//FloatProperty/value").first.content = params[:maxThroughput].to_f
9
+
10
+ attach_node(node, &block)
11
+ end
12
+
13
+ alias throughput throughput_controller
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def transaction_controller(*args, &block)
4
+ params = args.shift || {}
5
+ params = { name: params }.merge(args.shift || {}) if params.class == String
6
+ params[:parent] = params[:parent] || false
7
+ params[:includeTimers] = params[:include_timers] || false
8
+ node = RubyJmeter::TransactionController.new(params)
9
+ attach_node(node, &block)
10
+ end
11
+
12
+ alias transaction transaction_controller
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ alias auth http_authorization_manager
4
+ alias soap soapxmlrpc_request
5
+ alias ldap ldap_request
6
+ alias ldap_ext ldap_extended_request
7
+ alias ldap_extended ldap_extended_request
8
+ alias If if_controller
9
+ alias Switch switch_controller
10
+ alias While while_controller
11
+ alias Interleave random_controller
12
+ alias Random_order random_order_controller
13
+ alias Simple simple_controller
14
+ alias Once once_only_controller
15
+ alias view_results view_results_tree
16
+ alias log simple_data_writer
17
+ alias response_graph response_time_graph
18
+ alias bsh_pre beanshell_preprocessor
19
+ alias bsh_post beanshell_postprocessor
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def exists(variable, &block)
4
+ params ||= {}
5
+ params[:condition] = "\"${#{variable}}\" != \"\\${#{variable}}\""
6
+ params[:useExpression] = false
7
+ params[:name] = "if ${#{variable}}"
8
+ node = RubyJmeter::IfController.new(params)
9
+
10
+ attach_node(node, &block)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def flood(token, params = {})
4
+ RestClient.proxy = params[:proxy] if params[:proxy]
5
+ begin
6
+ file = Tempfile.new(['ruby-jmeter', '.jmx'])
7
+ file.write(doc.to_xml(indent: 2))
8
+ file.rewind
9
+
10
+ flood_files = {
11
+ file: File.new("#{file.path}", 'rb')
12
+ }
13
+
14
+ if params[:files]
15
+ flood_files.merge!(Hash[params[:files].map.with_index { |value, index| [index, File.new(value, 'rb')] }])
16
+ params.delete(:files)
17
+ end
18
+
19
+ response = RestClient.post "#{params[:endpoint] ? params[:endpoint] : 'https://api.flood.io'}/floods?auth_token=#{token}",
20
+ {
21
+ flood: {
22
+ tool: 'jmeter',
23
+ name: params[:name],
24
+ notes: params[:notes],
25
+ tag_list: params[:tag_list],
26
+ threads: params[:threads],
27
+ rampup: params[:rampup],
28
+ duration: params[:duration],
29
+ override_parameters: params[:override_parameters],
30
+ started: params[:started],
31
+ stopped: params[:stopped]
32
+ },
33
+ flood_files: flood_files,
34
+ region: params[:region],
35
+ multipart: true,
36
+ content_type: 'application/octet-stream'
37
+ }.merge(params)
38
+ if response.code == 201
39
+ logger.info 'Flood results at: #{JSON.parse(response)["permalink"]}'
40
+ else
41
+ logger.fatal "Sorry there was an error: #{JSON.parse(response)["error"]}"
42
+ end
43
+ rescue => e
44
+ logger.fatal "Sorry there was an error: #{JSON.parse(e.response)["error"]}"
45
+ end
46
+ end
47
+ end
48
+ end