jmeter-ruby 3.0.0

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.
Files changed (266) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +22 -0
  3. data/.github/workflows/ci.yml +54 -0
  4. data/.gitignore +24 -0
  5. data/.rspec +1 -0
  6. data/.ruby-version +1 -0
  7. data/CHANGES.md +77 -0
  8. data/Gemfile +23 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +434 -0
  11. data/Rakefile +18 -0
  12. data/examples/OS_process_sampler.rb +24 -0
  13. data/examples/assertion_results.rb +18 -0
  14. data/examples/basic_auth.rb +11 -0
  15. data/examples/browser_headers.rb +7 -0
  16. data/examples/composite_graph.rb +29 -0
  17. data/examples/constant_throughput_timer.rb +11 -0
  18. data/examples/csv_data_set.rb +11 -0
  19. data/examples/dummy_sampler.rb +9 -0
  20. data/examples/duration_assertion.rb +10 -0
  21. data/examples/etsy_login_browse.rb +61 -0
  22. data/examples/extract.rb +12 -0
  23. data/examples/foreach_controller.rb +29 -0
  24. data/examples/header_manager.rb +29 -0
  25. data/examples/http_cache_manager.rb +11 -0
  26. data/examples/http_cookie_manager.rb +11 -0
  27. data/examples/http_request_defaults.rb +11 -0
  28. data/examples/http_request_post.rb +11 -0
  29. data/examples/http_request_with_files.rb +13 -0
  30. data/examples/http_request_with_query_params.rb +8 -0
  31. data/examples/jmeter_plugins_graphs.rb +22 -0
  32. data/examples/json_path_assertions.rb +11 -0
  33. data/examples/json_path_extractor.rb +10 -0
  34. data/examples/json_path_postprocessor.rb +10 -0
  35. data/examples/jsr223_assertion.rb +13 -0
  36. data/examples/ldap_sampler.rb +16 -0
  37. data/examples/loadosophia.rb +18 -0
  38. data/examples/loop_controller.rb +10 -0
  39. data/examples/loops_with_counter.rb +15 -0
  40. data/examples/once_only_controller.rb +15 -0
  41. data/examples/perfmon.rb +46 -0
  42. data/examples/real_custom_methods.rb +19 -0
  43. data/examples/real_page_objects.rb +41 -0
  44. data/examples/real_redis_data_set_with_setup.rb +123 -0
  45. data/examples/real_user_objects_github.rb +112 -0
  46. data/examples/regular_expression_extractor.rb +12 -0
  47. data/examples/response_assertion.rb +15 -0
  48. data/examples/response_time_percentiles_graph.rb +11 -0
  49. data/examples/rsync.rb +16 -0
  50. data/examples/sample_transaction.rb +18 -0
  51. data/examples/simple_data_writer_listener.rb +11 -0
  52. data/examples/stepping_thread_group.rb +30 -0
  53. data/examples/test_fragment.rb +14 -0
  54. data/examples/think_time.rb +15 -0
  55. data/examples/thread_groups.rb +7 -0
  56. data/examples/throughput_controller.rb +14 -0
  57. data/examples/throughput_shaping_timer.rb +20 -0
  58. data/examples/ultimate_thread_group.rb +39 -0
  59. data/examples/unicode.rb +8 -0
  60. data/examples/user_defined_variables.rb +10 -0
  61. data/examples/user_parameters.rb +28 -0
  62. data/examples/uuid_per_iteration.rb +15 -0
  63. data/jmeter-ruby.gemspec +28 -0
  64. data/lib/jmeter-ruby/DSL.md +235 -0
  65. data/lib/jmeter-ruby/dsl/access_log_sampler.rb +32 -0
  66. data/lib/jmeter-ruby/dsl/aggregate_graph.rb +55 -0
  67. data/lib/jmeter-ruby/dsl/aggregate_report.rb +55 -0
  68. data/lib/jmeter-ruby/dsl/ajp13_sampler.rb +41 -0
  69. data/lib/jmeter-ruby/dsl/assertion_results.rb +55 -0
  70. data/lib/jmeter-ruby/dsl/beanshell_assertion.rb +28 -0
  71. data/lib/jmeter-ruby/dsl/beanshell_listener.rb +28 -0
  72. data/lib/jmeter-ruby/dsl/beanshell_postprocessor.rb +28 -0
  73. data/lib/jmeter-ruby/dsl/beanshell_preprocessor.rb +28 -0
  74. data/lib/jmeter-ruby/dsl/beanshell_sampler.rb +28 -0
  75. data/lib/jmeter-ruby/dsl/beanshell_timer.rb +28 -0
  76. data/lib/jmeter-ruby/dsl/bsf_assertion.rb +28 -0
  77. data/lib/jmeter-ruby/dsl/bsf_listener.rb +28 -0
  78. data/lib/jmeter-ruby/dsl/bsf_postprocessor.rb +28 -0
  79. data/lib/jmeter-ruby/dsl/bsf_preprocessor.rb +28 -0
  80. data/lib/jmeter-ruby/dsl/bsf_sampler.rb +28 -0
  81. data/lib/jmeter-ruby/dsl/bsf_timer.rb +28 -0
  82. data/lib/jmeter-ruby/dsl/compare_assertion.rb +27 -0
  83. data/lib/jmeter-ruby/dsl/comparison_assertion_visualizer.rb +55 -0
  84. data/lib/jmeter-ruby/dsl/constant_throughput_timer.rb +26 -0
  85. data/lib/jmeter-ruby/dsl/constant_timer.rb +25 -0
  86. data/lib/jmeter-ruby/dsl/counter.rb +31 -0
  87. data/lib/jmeter-ruby/dsl/cssjquery_extractor.rb +31 -0
  88. data/lib/jmeter-ruby/dsl/csv_data_set_config.rb +33 -0
  89. data/lib/jmeter-ruby/dsl/debug_postprocessor.rb +28 -0
  90. data/lib/jmeter-ruby/dsl/debug_sampler.rb +27 -0
  91. data/lib/jmeter-ruby/dsl/distribution_graphalpha.rb +55 -0
  92. data/lib/jmeter-ruby/dsl/duration_assertion.rb +25 -0
  93. data/lib/jmeter-ruby/dsl/foreach_controller.rb +27 -0
  94. data/lib/jmeter-ruby/dsl/ftp_request.rb +34 -0
  95. data/lib/jmeter-ruby/dsl/ftp_request_defaults.rb +32 -0
  96. data/lib/jmeter-ruby/dsl/gaussian_random_timer.rb +26 -0
  97. data/lib/jmeter-ruby/dsl/generate_summary_results.rb +23 -0
  98. data/lib/jmeter-ruby/dsl/graph_results.rb +55 -0
  99. data/lib/jmeter-ruby/dsl/html_assertion.rb +30 -0
  100. data/lib/jmeter-ruby/dsl/html_link_parser.rb +23 -0
  101. data/lib/jmeter-ruby/dsl/html_parameter_mask.rb +32 -0
  102. data/lib/jmeter-ruby/dsl/http_authorization_manager.rb +33 -0
  103. data/lib/jmeter-ruby/dsl/http_cache_manager.rb +26 -0
  104. data/lib/jmeter-ruby/dsl/http_cookie_manager.rb +28 -0
  105. data/lib/jmeter-ruby/dsl/http_header_manager.rb +30 -0
  106. data/lib/jmeter-ruby/dsl/http_request.rb +41 -0
  107. data/lib/jmeter-ruby/dsl/http_request_defaults.rb +41 -0
  108. data/lib/jmeter-ruby/dsl/http_url_rewriting_modifier.rb +30 -0
  109. data/lib/jmeter-ruby/dsl/if_controller.rb +27 -0
  110. data/lib/jmeter-ruby/dsl/include_controller.rb +25 -0
  111. data/lib/jmeter-ruby/dsl/java_request.rb +69 -0
  112. data/lib/jmeter-ruby/dsl/java_request_defaults.rb +69 -0
  113. data/lib/jmeter-ruby/dsl/jdbc_connection_configuration.rb +37 -0
  114. data/lib/jmeter-ruby/dsl/jdbc_postprocessor.rb +33 -0
  115. data/lib/jmeter-ruby/dsl/jdbc_preprocessor.rb +33 -0
  116. data/lib/jmeter-ruby/dsl/jdbc_request.rb +33 -0
  117. data/lib/jmeter-ruby/dsl/jms_pointtopoint.rb +41 -0
  118. data/lib/jmeter-ruby/dsl/jms_publisher.rb +43 -0
  119. data/lib/jmeter-ruby/dsl/jms_subscriber.rb +35 -0
  120. data/lib/jmeter-ruby/dsl/json_path_postprocessor.rb +27 -0
  121. data/lib/jmeter-ruby/dsl/jsr223_assertion.rb +29 -0
  122. data/lib/jmeter-ruby/dsl/jsr223_listener.rb +29 -0
  123. data/lib/jmeter-ruby/dsl/jsr223_postprocessor.rb +29 -0
  124. data/lib/jmeter-ruby/dsl/jsr223_preprocessor.rb +29 -0
  125. data/lib/jmeter-ruby/dsl/jsr223_sampler.rb +29 -0
  126. data/lib/jmeter-ruby/dsl/jsr223_timer.rb +29 -0
  127. data/lib/jmeter-ruby/dsl/junit_request.rb +37 -0
  128. data/lib/jmeter-ruby/dsl/keystore_configuration.rb +28 -0
  129. data/lib/jmeter-ruby/dsl/ldap_extended_request.rb +42 -0
  130. data/lib/jmeter-ruby/dsl/ldap_extended_request_defaults.rb +42 -0
  131. data/lib/jmeter-ruby/dsl/ldap_request.rb +35 -0
  132. data/lib/jmeter-ruby/dsl/ldap_request_defaults.rb +39 -0
  133. data/lib/jmeter-ruby/dsl/login_config_element.rb +26 -0
  134. data/lib/jmeter-ruby/dsl/loop_controller.rb +26 -0
  135. data/lib/jmeter-ruby/dsl/mail_reader_sampler.rb +37 -0
  136. data/lib/jmeter-ruby/dsl/mailer_visualizer.rb +64 -0
  137. data/lib/jmeter-ruby/dsl/md5hex_assertion.rb +25 -0
  138. data/lib/jmeter-ruby/dsl/module_controller.rb +25 -0
  139. data/lib/jmeter-ruby/dsl/monitor_results.rb +55 -0
  140. data/lib/jmeter-ruby/dsl/once_only_controller.rb +23 -0
  141. data/lib/jmeter-ruby/dsl/os_process_sampler.rb +34 -0
  142. data/lib/jmeter-ruby/dsl/poisson_random_timer.rb +26 -0
  143. data/lib/jmeter-ruby/dsl/random_controller.rb +25 -0
  144. data/lib/jmeter-ruby/dsl/random_order_controller.rb +23 -0
  145. data/lib/jmeter-ruby/dsl/random_variable.rb +30 -0
  146. data/lib/jmeter-ruby/dsl/recording_controller.rb +23 -0
  147. data/lib/jmeter-ruby/dsl/regex_user_parameters.rb +27 -0
  148. data/lib/jmeter-ruby/dsl/regular_expression_extractor.rb +32 -0
  149. data/lib/jmeter-ruby/dsl/response_assertion.rb +31 -0
  150. data/lib/jmeter-ruby/dsl/response_time_graph.rb +55 -0
  151. data/lib/jmeter-ruby/dsl/result_status_action_handler.rb +25 -0
  152. data/lib/jmeter-ruby/dsl/runtime_controller.rb +25 -0
  153. data/lib/jmeter-ruby/dsl/save_responses_to_a_file.rb +29 -0
  154. data/lib/jmeter-ruby/dsl/setup_thread_group.rb +36 -0
  155. data/lib/jmeter-ruby/dsl/simple_config_element.rb +23 -0
  156. data/lib/jmeter-ruby/dsl/simple_controller.rb +23 -0
  157. data/lib/jmeter-ruby/dsl/simple_data_writer.rb +55 -0
  158. data/lib/jmeter-ruby/dsl/smime_assertion.rb +35 -0
  159. data/lib/jmeter-ruby/dsl/smtp_sampler.rb +51 -0
  160. data/lib/jmeter-ruby/dsl/soapxmlrpc_request.rb +33 -0
  161. data/lib/jmeter-ruby/dsl/spline_visualizer.rb +55 -0
  162. data/lib/jmeter-ruby/dsl/summary_report.rb +55 -0
  163. data/lib/jmeter-ruby/dsl/switch_controller.rb +25 -0
  164. data/lib/jmeter-ruby/dsl/synchronizing_timer.rb +26 -0
  165. data/lib/jmeter-ruby/dsl/tcp_sampler.rb +33 -0
  166. data/lib/jmeter-ruby/dsl/tcp_sampler_config.rb +31 -0
  167. data/lib/jmeter-ruby/dsl/test_action.rb +27 -0
  168. data/lib/jmeter-ruby/dsl/test_fragment.rb +23 -0
  169. data/lib/jmeter-ruby/dsl/test_plan.rb +31 -0
  170. data/lib/jmeter-ruby/dsl/thread_group.rb +37 -0
  171. data/lib/jmeter-ruby/dsl/throughput_controller.rb +32 -0
  172. data/lib/jmeter-ruby/dsl/transaction_controller.rb +26 -0
  173. data/lib/jmeter-ruby/dsl/uniform_random_timer.rb +26 -0
  174. data/lib/jmeter-ruby/dsl/user_defined_variables.rb +33 -0
  175. data/lib/jmeter-ruby/dsl/user_parameters.rb +30 -0
  176. data/lib/jmeter-ruby/dsl/view_results_in_table.rb +55 -0
  177. data/lib/jmeter-ruby/dsl/view_results_tree.rb +55 -0
  178. data/lib/jmeter-ruby/dsl/while_controller.rb +25 -0
  179. data/lib/jmeter-ruby/dsl/xml_assertion.rb +23 -0
  180. data/lib/jmeter-ruby/dsl/xml_schema_assertion.rb +25 -0
  181. data/lib/jmeter-ruby/dsl/xpath_assertion.rb +31 -0
  182. data/lib/jmeter-ruby/dsl/xpath_extractor.rb +31 -0
  183. data/lib/jmeter-ruby/dsl.rb +102 -0
  184. data/lib/jmeter-ruby/extend/assertions/response_assertion.rb +36 -0
  185. data/lib/jmeter-ruby/extend/config_elements/header_manager.rb +13 -0
  186. data/lib/jmeter-ruby/extend/config_elements/http_cache_manager.rb +12 -0
  187. data/lib/jmeter-ruby/extend/config_elements/http_cookie_manager.rb +36 -0
  188. data/lib/jmeter-ruby/extend/config_elements/http_request_defaults.rb +39 -0
  189. data/lib/jmeter-ruby/extend/config_elements/user_defined_variables.rb +13 -0
  190. data/lib/jmeter-ruby/extend/config_elements/user_parameters.rb +31 -0
  191. data/lib/jmeter-ruby/extend/controllers/foreach_controller.rb +27 -0
  192. data/lib/jmeter-ruby/extend/controllers/loop_controller.rb +11 -0
  193. data/lib/jmeter-ruby/extend/controllers/module_controller.rb +23 -0
  194. data/lib/jmeter-ruby/extend/controllers/throughput_controller.rb +15 -0
  195. data/lib/jmeter-ruby/extend/controllers/transaction_controller.rb +14 -0
  196. data/lib/jmeter-ruby/extend/misc/aliases.rb +21 -0
  197. data/lib/jmeter-ruby/extend/misc/exists.rb +13 -0
  198. data/lib/jmeter-ruby/extend/misc/rsync.rb +24 -0
  199. data/lib/jmeter-ruby/extend/misc/uuid.rb +12 -0
  200. data/lib/jmeter-ruby/extend/misc/with_helpers.rb +27 -0
  201. data/lib/jmeter-ruby/extend/plugins/jmeter_plugins.rb +120 -0
  202. data/lib/jmeter-ruby/extend/processors/extract.rb +28 -0
  203. data/lib/jmeter-ruby/extend/processors/regular_expression_extractor.rb +25 -0
  204. data/lib/jmeter-ruby/extend/samplers/http_request.rb +58 -0
  205. data/lib/jmeter-ruby/extend/samplers/jms_pointtopoint.rb +26 -0
  206. data/lib/jmeter-ruby/extend/samplers/soapxmlrpc_request.rb +9 -0
  207. data/lib/jmeter-ruby/extend/threads/setup_thread_group.rb +18 -0
  208. data/lib/jmeter-ruby/extend/threads/thread_group.rb +19 -0
  209. data/lib/jmeter-ruby/extend/timers/constant_throughput_timer.rb +11 -0
  210. data/lib/jmeter-ruby/extend/timers/random_timer.rb +14 -0
  211. data/lib/jmeter-ruby/helpers/fallback_content_proxy.rb +54 -0
  212. data/lib/jmeter-ruby/helpers/helper.rb +75 -0
  213. data/lib/jmeter-ruby/helpers/logger-colors.rb +48 -0
  214. data/lib/jmeter-ruby/helpers/parser.rb +135 -0
  215. data/lib/jmeter-ruby/helpers/strip-heredoc.rb +5 -0
  216. data/lib/jmeter-ruby/helpers/user-agents.rb +27 -0
  217. data/lib/jmeter-ruby/idl.rb +70 -0
  218. data/lib/jmeter-ruby/idl.xml +1488 -0
  219. data/lib/jmeter-ruby/plugins/active_threads_over_time.rb +57 -0
  220. data/lib/jmeter-ruby/plugins/composite_graph.rb +71 -0
  221. data/lib/jmeter-ruby/plugins/console_status_logger.rb +15 -0
  222. data/lib/jmeter-ruby/plugins/dummy_sampler.rb +26 -0
  223. data/lib/jmeter-ruby/plugins/jmx_collector.rb +73 -0
  224. data/lib/jmeter-ruby/plugins/json_path_assertion.rb +19 -0
  225. data/lib/jmeter-ruby/plugins/json_path_extractor.rb +20 -0
  226. data/lib/jmeter-ruby/plugins/latencies_over_time.rb +49 -0
  227. data/lib/jmeter-ruby/plugins/loadosophia_uploader.rb +63 -0
  228. data/lib/jmeter-ruby/plugins/perfmon_collector.rb +80 -0
  229. data/lib/jmeter-ruby/plugins/redis_data_set.rb +39 -0
  230. data/lib/jmeter-ruby/plugins/response_codes_per_second.rb +49 -0
  231. data/lib/jmeter-ruby/plugins/response_times_distribution.rb +49 -0
  232. data/lib/jmeter-ruby/plugins/response_times_over_time.rb +50 -0
  233. data/lib/jmeter-ruby/plugins/response_times_percentiles.rb +51 -0
  234. data/lib/jmeter-ruby/plugins/stepping_thread_group.rb +30 -0
  235. data/lib/jmeter-ruby/plugins/transactions_per_second.rb +50 -0
  236. data/lib/jmeter-ruby/plugins/ultimate_thread_group.rb +23 -0
  237. data/lib/jmeter-ruby/plugins/variable_throughput_timer.rb +27 -0
  238. data/lib/jmeter-ruby/version.rb +12 -0
  239. data/lib/jmeter-ruby.rb +27 -0
  240. data/mise.toml +2 -0
  241. data/script/release +162 -0
  242. data/spec/constant_throughput_timer_spec.rb +20 -0
  243. data/spec/csv_data_set_config_spec.rb +33 -0
  244. data/spec/header_manager_spec.rb +37 -0
  245. data/spec/http_cache_manager_spec.rb +29 -0
  246. data/spec/http_cookie_manager_spec.rb +169 -0
  247. data/spec/http_request_defaults_spec.rb +57 -0
  248. data/spec/http_request_spec.rb +305 -0
  249. data/spec/jmeter_plugins_spec.rb +245 -0
  250. data/spec/json_extractor_spec.rb +19 -0
  251. data/spec/json_path_assertion_spec.rb +28 -0
  252. data/spec/logic_controller_spec.rb +148 -0
  253. data/spec/loop_controller_spec.rb +19 -0
  254. data/spec/module_controller_spec.rb +56 -0
  255. data/spec/regular_expression_extractor_spec.rb +63 -0
  256. data/spec/response_assertion_spec.rb +69 -0
  257. data/spec/setup_thread_group_spec.rb +31 -0
  258. data/spec/spec_helper.rb +19 -0
  259. data/spec/thread_group_spec.rb +57 -0
  260. data/spec/throughput_controller_spec.rb +24 -0
  261. data/spec/transaction_controller_spec.rb +30 -0
  262. data/spec/user_defined_variables_spec.rb +22 -0
  263. data/spec/user_parameters_spec.rb +45 -0
  264. data/spec/with_helpers_spec.rb +57 -0
  265. data/spec/xpath_extractor_spec.rb +15 -0
  266. metadata +360 -0
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ build_args = ->(args) do
5
+ args.collect do |arg|
6
+ {
7
+ xpath: "//collectionProp[@name='Arguments.arguments']",
8
+ value: Nokogiri::XML(<<-EOF.strip_heredoc).children
9
+ <elementProp name="" elementType="Argument">
10
+ <stringProp name="Argument.name"></stringProp>
11
+ <stringProp name="Argument.value">#{arg}</stringProp>
12
+ <stringProp name="Argument.metadata">=</stringProp>
13
+ </elementProp>
14
+ EOF
15
+ }
16
+ end
17
+ end
18
+
19
+
20
+ test do
21
+ os_process_sampler 'SystemSampler.command' => 'git',
22
+ update_at_xpath: build_args.call(['push', 'origin', 'master'])
23
+
24
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ visit name: 'Home Page', url: 'http://altentee.com/' do
7
+ duration_assertion duration: 10
8
+ end
9
+
10
+ # write to an assertion results listener, errors only
11
+ assertion_results filename: '/var/log/flood/custom/assertion.log',
12
+ error_logging: true,
13
+ update_at_xpath: [
14
+ { '//xml' => 'true' },
15
+ { '//assertions' => 'true' }
16
+ ]
17
+ end
18
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ auth url: '/', username: 'tim', password: 'secret', domain: 'altentee.com'
6
+ threads count: 1 do
7
+ transaction name: 'Home' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ # Simulate user agent, accept and accept-encodings of typical browsers
6
+ with_browser :ie9
7
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ cookies clear_each_iteration: false
6
+ threads count: 5, rampup: 10 do
7
+ transaction name: 'Home' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+
12
+ #
13
+ # You need jmeter-plugins at Google code
14
+ # http://code.google.com/p/jmeter-plugins
15
+ #
16
+ latencies_over_time 'Response Latencies Over Time'
17
+ active_threads 'Active Threads'
18
+
19
+ composite 'Composite Graph', [
20
+ {
21
+ graph: 'Response Latencies Over Time',
22
+ metric: 'Home Page'
23
+ },
24
+ {
25
+ graph: 'Active Threads',
26
+ metric: 'Overall Active Threads'
27
+ }
28
+ ]
29
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads do
6
+ # in samples per minute
7
+ constant_throughput_timer value: 60.0
8
+
9
+ visit name: 'Home Page', url: 'https://flooded.io/'
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ csv_data_set_config filename: 'postcodes.csv',
6
+ variableNames: 'postcode'
7
+
8
+ threads count: 1 do
9
+ visit name: 'Home', url: 'https://flooded.io?query=${postcode}'
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ dummy_sampler name: '__grid_data_api',
7
+ response_data: 'ACIR0001, ACIR0002, ACIR0003, ACIR0004, ACIR0005, ACIR0006, ABS0003, MBS0001, MBS0004, MBS0005, ABS0004, ABS0005, ABS0010, ABS0011, ABS0012, ABS0013, ABS0014, ABS0016, ABS0017, ABS0018, ABS0021, ABS0022, MBS0006, MBS0009, MBS0010'
8
+ end
9
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 10 do
6
+ visit name: 'Google Search', url: 'http://google.com/?hl=en&tbo=d&sclient=psy-ab&q=flood.io&oq=flood.io' do
7
+ duration_assertion duration: 1000
8
+ end
9
+ end
10
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,61 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+
6
+ defaults :domain => 'www.etsy.com'
7
+
8
+ cache :clear_each_iteration => true
9
+
10
+ cookies
11
+
12
+ threads :count => 1, :loops => 10 do
13
+
14
+ random_timer 1000, 3000
15
+
16
+ transaction '01_etsy_home' do
17
+ visit :name => 'home', :url => 'http://www.etsy.com/' do
18
+ assert 'contains' => 'Etsy - Your place to buy and sell all things handmade, vintage, and supplies'
19
+ end
20
+ end
21
+
22
+ Once do
23
+ transaction '02_etsy_signin' do
24
+ submit :name => 'signin', :url => 'https://www.etsy.com/signin',
25
+ :fill_in => {
26
+ :username => 'tim.koops@gmail.com',
27
+ :password => ARGV[0],
28
+ :persistent => 1,
29
+ :from_page => 'http://www.etsy.com/',
30
+ :from_action => '',
31
+ :from_name => '',
32
+ :overlay => 1
33
+ } do
34
+ assert 'contains' => 'Tim'
35
+ extract :regex => 'a href="(/browse.+?)"', :name => 'random_category'
36
+ end
37
+ end
38
+ end
39
+
40
+ exists 'random_category' do
41
+
42
+ transaction '03_etsy_browse_random_category' do
43
+ visit :name => 'browse', :url => '${random_category}' do
44
+ extract :regex => 'a href="(http.+?subcat.+?)"', :name => 'random_sub_category'
45
+ end
46
+ end
47
+
48
+ transaction '04_etsy_browse_random_sub_category' do
49
+ visit :name => 'browse', :url => '${random_sub_category}' do
50
+ extract :regex => 'a href="(/listing.+?)"', :name => 'random_listing'
51
+ end
52
+ end
53
+
54
+ transaction '05_etsy_view_random_listing' do
55
+ visit :name => 'view', :url => '${random_listing}'
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 100 do
6
+ visit name: 'Home', url: 'http://altentee.com' do
7
+ extract regex: "content='(.+?)' name='csrf-token'", name: 'csrf-token', match_number: 1
8
+ extract regex: 'pattern', name: 'jmeter_variable_regex', variable: 'test'
9
+ extract css: 'span#blog', name: 'blog'
10
+ end
11
+ end
12
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads 1, {
6
+ rampup: 1,
7
+ scheduler: true,
8
+ duration: 60,
9
+ continue_forever: true
10
+ } do
11
+
12
+ defaults domain: 'altentee.com'
13
+
14
+ random_timer 1000, 2000
15
+
16
+ transaction '01_GET_home' do
17
+ visit '/' do
18
+ extract regex: 'href="(.+?)"', name: 'links', match_number: -1
19
+ end
20
+ end
21
+
22
+ foreach_controller inputVal: 'links', returnVal: 'link' do
23
+ transaction '02_GET_random_link' do
24
+ visit '${link}'
25
+ end
26
+ end
27
+ end
28
+
29
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ # header with multiple values
6
+ header [
7
+ { name: 'Accept', value: '*' },
8
+ { name: 'User-Agent', value: 'Test' }
9
+ ]
10
+
11
+ with_user_agent :iphone
12
+
13
+ threads count: 1 do
14
+ visit name: 'Home Page', url: 'https://flooded.io/'
15
+ end
16
+
17
+ transaction name: 'Home via XHR' do
18
+ visit name: 'Home Page', url: 'https://flooded.io/' do
19
+ with_xhr
20
+ end
21
+ end
22
+
23
+ post name: 'with_headers', ur: '/',
24
+ fill_in: {
25
+ js: true
26
+ } do
27
+ header [{ name: 'Cache-Control', value: 'no-cache'}]
28
+ end
29
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ cache clear_each_iteration: true
6
+ threads count: 1 do
7
+ transaction name: 'Home' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ cookies clear_each_iteration: false
6
+ threads count: 1 do
7
+ transaction name: 'Home' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ defaults domain: 'example.com',
6
+ protocol: 'https',
7
+ download_resources: true,
8
+ use_concurrent_pool: 5,
9
+ urls_must_match: 'http.+?example.com',
10
+ md5: true
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ transaction name: 'Post with a Raw Body', parent: false do
7
+ post name: 'Home Page', url: 'http://google.com',
8
+ raw_body: '{"name":"Big Poncho","price":10,"vendor_attendance_id":24,"product_id":1}'
9
+ end
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads do
6
+ transaction name: "TC_03", parent: true, include_timers: true do
7
+ submit url: "/", fill_in: { username: 'tim', password: 'password' },
8
+ files: [{path: '/tmp/foo', paramname: 'fileup', mimetype: 'text/plain'},
9
+ {path: '/tmp/bar', paramname: 'otherfileup'}],
10
+ 'DO_MULTIPART_POST' => true
11
+ end
12
+ end
13
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 10 do
6
+ post name: 'Oauth Token', url: 'https://flooded.io/api/oauth?username=Michael&authType=token'
7
+ end
8
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ cookies clear_each_iteration: false
6
+ threads count: 1 do
7
+ transaction name: 'Home' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+
12
+ #
13
+ # You need jmeter-plugins at Google code
14
+ # http://code.google.com/p/jmeter-plugins
15
+ #
16
+ latencies_over_time 'Response Latencies Over Time'
17
+ response_codes_per_second 'Response Codes per Second'
18
+ response_times_distribution 'Response Times Distribution'
19
+ response_times_over_time 'Response Times Over Time'
20
+ response_times_percentiles 'Response Times Percentiles'
21
+ transactions_per_second 'Transactions per Second'
22
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1, loop: 1 do
6
+ visit 'https://api.github.com/orgs/flood-io/repos' do
7
+ assert json: '.name', value: '.*'
8
+ assert json: '.id', value: '\d+'
9
+ end
10
+ end
11
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ visit 'https://flood.io/d384673f64e3a3/result.json' do
7
+ extract json: '.apdex.score', name: 'apdex'
8
+ end
9
+ end
10
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1, loop: 1 do
6
+ visit 'https://api.github.com/orgs/flood-io/repos' do
7
+ json_path_postprocessor referenceNames: 'name', jsonPathExprs: '.name', match_numbers: 1
8
+ end
9
+ end
10
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ visit 'https://flood.io/d384673f64e3a3/result.json' do
7
+ jsr223_assertion update_at_xpath: [
8
+ { "//stringProp[@name='script']" => 'var foo = "cat";' },
9
+ { "//stringProp[@name='scriptLanguage']" => 'javascript' }
10
+ ]
11
+ end
12
+ end
13
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ ldap_ext name: 'ldap_ext sample',
7
+ test: 'sbind',
8
+ user_dn: 'user_dn',
9
+ user_pw: 'user_password',
10
+ servername: 'your_ldap_server',
11
+ secure: true,
12
+ port: 636
13
+
14
+ end
15
+ view_results name: 'debug'
16
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+
6
+ # You need to either add the project name and upload token from Loadosophia.org here,
7
+ # or use a property file (-q flag when running jmeter).
8
+ loadosophia('Loadosophia Uploader', {
9
+ project: "${__P(loadosophia.project,DEFAULT)}",
10
+ uploadToken: "${__P(loadosophia.uploadToken,No Token specified)}",
11
+ useOnline: "true",
12
+ title: "HLS Load test ${__time(yyyy-MM-dd HH:mm)}"
13
+ })
14
+
15
+ threads count: 1 do
16
+ visit name: 'Home Page', url: 'https://flooded.io/'
17
+ end
18
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ loops count:10 do
7
+ visit name: 'Home Page', url: 'https://flooded.io/'
8
+ end
9
+ end
10
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 1 do
6
+ loops count:10 do
7
+ counter 'CounterConfig.name' => 'visit',
8
+ 'CounterConfig.start' => 1,
9
+ 'CounterConfig.incr' => 1,
10
+ 'CounterConfig.end' => 100
11
+
12
+ visit name: 'Home Page', url: 'https://flooded.io/'
13
+ end
14
+ end
15
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ threads count: 100 do
6
+ think_time 5000, 5000
7
+
8
+ Once do
9
+ post name: 'Home Page', url: 'https://flooded.io/api/oauth'
10
+ end
11
+
12
+ visit name: 'Home Page', url: 'https://flooded.io/'
13
+
14
+ end
15
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,46 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ test do
5
+ cookies clear_each_iteration: false
6
+ threads count: 5, rampup: 10 do
7
+ transaction name: 'Google Search' do
8
+ visit name: 'Home Page', url: 'https://flooded.io/'
9
+ end
10
+ end
11
+
12
+ #
13
+ # You need jmeter-plugins at Google code
14
+ # http://code.google.com/p/jmeter-plugins
15
+ #
16
+ latencies_over_time 'Response Latencies Over Time'
17
+ active_threads 'Active Threads'
18
+
19
+ #
20
+ # You need perfmon agent running
21
+ # http://jmeter-plugins.org/wiki/PerfMonAgent/
22
+ #
23
+ perfmon_collector name: 'Perfmon Metrics Collector',
24
+ nodes: [
25
+ {
26
+ server: 'localhost',
27
+ port: 4444,
28
+ metric: 'Memory',
29
+ parameters: 'name=node#1:label=memory-node'
30
+ }]
31
+
32
+ composite 'Composite Graph', [
33
+ {
34
+ graph: 'Response Latencies Over Time',
35
+ metric: 'Home Page'
36
+ },
37
+ {
38
+ graph: 'Active Threads',
39
+ metric: 'Overall Active Threads'
40
+ },
41
+ {
42
+ graph: 'Perfmon Metrics Collector',
43
+ metric: 'localhost Memory memory-node'
44
+ }
45
+ ]
46
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)
@@ -0,0 +1,19 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ module JmeterRuby
5
+ class ExtendedDSL < DSL
6
+ def test_method_here
7
+ puts "here be dragons"
8
+ end
9
+ end
10
+ end
11
+
12
+
13
+ test do
14
+ threads count: 1 do
15
+ test_fragment name: 'RegisterResponseToSentMail', enabled: 'false' do
16
+ test_method_here
17
+ end
18
+ end
19
+ end.run(path: '/usr/local/share/jmeter-3.1/bin/', gui: true)
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'jmeter-ruby'
3
+
4
+ module JmeterRuby
5
+ class ExtendedDSL < DSL
6
+ def test_method_here
7
+ puts "here be dragons"
8
+ end
9
+ end
10
+ end
11
+
12
+ # Define your page objects
13
+ class HomePage
14
+ def initialize(dsl)
15
+ @dsl = dsl
16
+ end
17
+
18
+ def test_method_unreachable
19
+ puts "I can never be reached from ExtendedDSL"
20
+ end
21
+
22
+ def visit
23
+ get name: 'home', url: '/' do
24
+ test_method_here
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def method_missing method, *args, &block
31
+ @dsl.__send__ method, *args, &block
32
+ end
33
+ end
34
+
35
+ test do
36
+ threads count: 1 do
37
+ # then re-use your page objects in your test plan
38
+ home = HomePage.new(self)
39
+ home.visit
40
+ end
41
+ end.run(path: '/usr/share/jmeter/bin/', gui: true)