jmeter_perf 1.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.
Files changed (275) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +19 -0
  4. data/.standard.yml +4 -0
  5. data/CHANGELOG.md +18 -0
  6. data/DSL.md +235 -0
  7. data/README.md +24 -0
  8. data/Rakefile +12 -0
  9. data/example/Gemfile +39 -0
  10. data/example/Gemfile.lock +232 -0
  11. data/example/README.md +3 -0
  12. data/example/Rakefile +6 -0
  13. data/example/app/controllers/application_controller.rb +2 -0
  14. data/example/app/controllers/test_controller.rb +15 -0
  15. data/example/bin/bundle +109 -0
  16. data/example/bin/docker-entrypoint +8 -0
  17. data/example/bin/rails +4 -0
  18. data/example/bin/rake +4 -0
  19. data/example/bin/setup +33 -0
  20. data/example/config/application.rb +44 -0
  21. data/example/config/boot.rb +3 -0
  22. data/example/config/credentials.yml.enc +1 -0
  23. data/example/config/database.yml +25 -0
  24. data/example/config/environment.rb +5 -0
  25. data/example/config/environments/development.rb +64 -0
  26. data/example/config/environments/production.rb +82 -0
  27. data/example/config/environments/test.rb +61 -0
  28. data/example/config/initializers/cors.rb +16 -0
  29. data/example/config/initializers/filter_parameter_logging.rb +8 -0
  30. data/example/config/initializers/inflections.rb +16 -0
  31. data/example/config/locales/en.yml +31 -0
  32. data/example/config/puma.rb +35 -0
  33. data/example/config/routes.rb +5 -0
  34. data/example/config.ru +7 -0
  35. data/example/fast.log +49 -0
  36. data/example/jmeter.log +28 -0
  37. data/example/lib/tasks/test.rake +40 -0
  38. data/example/log/.keep +0 -0
  39. data/example/public/robots.txt +1 -0
  40. data/example/random.log +49 -0
  41. data/example/slow.log +49 -0
  42. data/example/vendor/.keep +0 -0
  43. data/lib/Rakefile +4 -0
  44. data/lib/jmeter_perf/dsl/access_log_sampler.rb +38 -0
  45. data/lib/jmeter_perf/dsl/aggregate_graph.rb +61 -0
  46. data/lib/jmeter_perf/dsl/aggregate_report.rb +61 -0
  47. data/lib/jmeter_perf/dsl/ajp13_sampler.rb +47 -0
  48. data/lib/jmeter_perf/dsl/assertion_results.rb +61 -0
  49. data/lib/jmeter_perf/dsl/bean_shell_assertion.rb +34 -0
  50. data/lib/jmeter_perf/dsl/bean_shell_listener.rb +34 -0
  51. data/lib/jmeter_perf/dsl/bean_shell_postprocessor.rb +34 -0
  52. data/lib/jmeter_perf/dsl/bean_shell_preprocessor.rb +34 -0
  53. data/lib/jmeter_perf/dsl/bean_shell_sampler.rb +34 -0
  54. data/lib/jmeter_perf/dsl/bean_shell_timer.rb +34 -0
  55. data/lib/jmeter_perf/dsl/bsf_assertion.rb +34 -0
  56. data/lib/jmeter_perf/dsl/bsf_listener.rb +34 -0
  57. data/lib/jmeter_perf/dsl/bsf_postprocessor.rb +34 -0
  58. data/lib/jmeter_perf/dsl/bsf_preprocessor.rb +34 -0
  59. data/lib/jmeter_perf/dsl/bsf_sampler.rb +34 -0
  60. data/lib/jmeter_perf/dsl/bsf_timer.rb +34 -0
  61. data/lib/jmeter_perf/dsl/compare_assertion.rb +33 -0
  62. data/lib/jmeter_perf/dsl/comparison_assertion_visualizer.rb +61 -0
  63. data/lib/jmeter_perf/dsl/constant_throughput_timer.rb +32 -0
  64. data/lib/jmeter_perf/dsl/constant_timer.rb +31 -0
  65. data/lib/jmeter_perf/dsl/counter.rb +37 -0
  66. data/lib/jmeter_perf/dsl/css_jquery_extractor.rb +37 -0
  67. data/lib/jmeter_perf/dsl/csv_data_set_config.rb +39 -0
  68. data/lib/jmeter_perf/dsl/debug_postprocessor.rb +34 -0
  69. data/lib/jmeter_perf/dsl/debug_sampler.rb +33 -0
  70. data/lib/jmeter_perf/dsl/distribution_graphalpha.rb +61 -0
  71. data/lib/jmeter_perf/dsl/duration_assertion.rb +31 -0
  72. data/lib/jmeter_perf/dsl/for_each_controller.rb +33 -0
  73. data/lib/jmeter_perf/dsl/ftp_request.rb +40 -0
  74. data/lib/jmeter_perf/dsl/ftp_request_defaults.rb +38 -0
  75. data/lib/jmeter_perf/dsl/gaussian_random_timer.rb +32 -0
  76. data/lib/jmeter_perf/dsl/generate_summary_results.rb +29 -0
  77. data/lib/jmeter_perf/dsl/graph_results.rb +61 -0
  78. data/lib/jmeter_perf/dsl/html_assertion.rb +36 -0
  79. data/lib/jmeter_perf/dsl/html_link_parser.rb +29 -0
  80. data/lib/jmeter_perf/dsl/html_parameter_mask.rb +38 -0
  81. data/lib/jmeter_perf/dsl/http_authorization_manager.rb +39 -0
  82. data/lib/jmeter_perf/dsl/http_cache_manager.rb +32 -0
  83. data/lib/jmeter_perf/dsl/http_cookie_manager.rb +34 -0
  84. data/lib/jmeter_perf/dsl/http_header_manager.rb +36 -0
  85. data/lib/jmeter_perf/dsl/http_request.rb +47 -0
  86. data/lib/jmeter_perf/dsl/http_request_defaults.rb +53 -0
  87. data/lib/jmeter_perf/dsl/http_url_rewriting_modifier.rb +36 -0
  88. data/lib/jmeter_perf/dsl/if_controller.rb +33 -0
  89. data/lib/jmeter_perf/dsl/include_controller.rb +31 -0
  90. data/lib/jmeter_perf/dsl/j_unit_request.rb +43 -0
  91. data/lib/jmeter_perf/dsl/java_request.rb +75 -0
  92. data/lib/jmeter_perf/dsl/java_request_defaults.rb +75 -0
  93. data/lib/jmeter_perf/dsl/jdbc_connection_configuration.rb +43 -0
  94. data/lib/jmeter_perf/dsl/jdbc_postprocessor.rb +39 -0
  95. data/lib/jmeter_perf/dsl/jdbc_preprocessor.rb +39 -0
  96. data/lib/jmeter_perf/dsl/jdbc_request.rb +39 -0
  97. data/lib/jmeter_perf/dsl/jms_pointto_point.rb +47 -0
  98. data/lib/jmeter_perf/dsl/jms_publisher.rb +49 -0
  99. data/lib/jmeter_perf/dsl/jms_subscriber.rb +41 -0
  100. data/lib/jmeter_perf/dsl/json_path_postprocessor.rb +33 -0
  101. data/lib/jmeter_perf/dsl/jsr223_assertion.rb +35 -0
  102. data/lib/jmeter_perf/dsl/jsr223_listener.rb +35 -0
  103. data/lib/jmeter_perf/dsl/jsr223_postprocessor.rb +35 -0
  104. data/lib/jmeter_perf/dsl/jsr223_preprocessor.rb +35 -0
  105. data/lib/jmeter_perf/dsl/jsr223_sampler.rb +35 -0
  106. data/lib/jmeter_perf/dsl/jsr223_timer.rb +35 -0
  107. data/lib/jmeter_perf/dsl/keystore_configuration.rb +34 -0
  108. data/lib/jmeter_perf/dsl/ldap_extended_request.rb +48 -0
  109. data/lib/jmeter_perf/dsl/ldap_extended_request_defaults.rb +48 -0
  110. data/lib/jmeter_perf/dsl/ldap_request.rb +41 -0
  111. data/lib/jmeter_perf/dsl/ldap_request_defaults.rb +45 -0
  112. data/lib/jmeter_perf/dsl/login_config_element.rb +32 -0
  113. data/lib/jmeter_perf/dsl/loop_controller.rb +32 -0
  114. data/lib/jmeter_perf/dsl/mail_reader_sampler.rb +43 -0
  115. data/lib/jmeter_perf/dsl/mailer_visualizer.rb +70 -0
  116. data/lib/jmeter_perf/dsl/md5_hex_assertion.rb +31 -0
  117. data/lib/jmeter_perf/dsl/module_controller.rb +31 -0
  118. data/lib/jmeter_perf/dsl/monitor_results.rb +61 -0
  119. data/lib/jmeter_perf/dsl/once_only_controller.rb +29 -0
  120. data/lib/jmeter_perf/dsl/os_process_sampler.rb +40 -0
  121. data/lib/jmeter_perf/dsl/poisson_random_timer.rb +32 -0
  122. data/lib/jmeter_perf/dsl/random_controller.rb +31 -0
  123. data/lib/jmeter_perf/dsl/random_order_controller.rb +29 -0
  124. data/lib/jmeter_perf/dsl/random_variable.rb +36 -0
  125. data/lib/jmeter_perf/dsl/recording_controller.rb +29 -0
  126. data/lib/jmeter_perf/dsl/reg_ex_user_parameters.rb +33 -0
  127. data/lib/jmeter_perf/dsl/regular_expression_extractor.rb +38 -0
  128. data/lib/jmeter_perf/dsl/response_assertion.rb +37 -0
  129. data/lib/jmeter_perf/dsl/response_time_graph.rb +61 -0
  130. data/lib/jmeter_perf/dsl/result_status_action_handler.rb +31 -0
  131. data/lib/jmeter_perf/dsl/runtime_controller.rb +31 -0
  132. data/lib/jmeter_perf/dsl/save_responses_to_a_file.rb +35 -0
  133. data/lib/jmeter_perf/dsl/simple_config_element.rb +29 -0
  134. data/lib/jmeter_perf/dsl/simple_controller.rb +29 -0
  135. data/lib/jmeter_perf/dsl/simple_data_writer.rb +61 -0
  136. data/lib/jmeter_perf/dsl/smime_assertion.rb +41 -0
  137. data/lib/jmeter_perf/dsl/smtp_sampler.rb +57 -0
  138. data/lib/jmeter_perf/dsl/soap_xml_rpc_request.rb +39 -0
  139. data/lib/jmeter_perf/dsl/spline_visualizer.rb +61 -0
  140. data/lib/jmeter_perf/dsl/summary_report.rb +61 -0
  141. data/lib/jmeter_perf/dsl/switch_controller.rb +31 -0
  142. data/lib/jmeter_perf/dsl/synchronizing_timer.rb +32 -0
  143. data/lib/jmeter_perf/dsl/tcp_sampler.rb +39 -0
  144. data/lib/jmeter_perf/dsl/tcp_sampler_config.rb +37 -0
  145. data/lib/jmeter_perf/dsl/test_action.rb +33 -0
  146. data/lib/jmeter_perf/dsl/test_fragment.rb +29 -0
  147. data/lib/jmeter_perf/dsl/test_plan.rb +37 -0
  148. data/lib/jmeter_perf/dsl/thread_group.rb +43 -0
  149. data/lib/jmeter_perf/dsl/throughput_controller.rb +38 -0
  150. data/lib/jmeter_perf/dsl/transaction_controller.rb +32 -0
  151. data/lib/jmeter_perf/dsl/uniform_random_timer.rb +32 -0
  152. data/lib/jmeter_perf/dsl/user_defined_variables.rb +39 -0
  153. data/lib/jmeter_perf/dsl/user_parameters.rb +36 -0
  154. data/lib/jmeter_perf/dsl/view_results_in_table.rb +61 -0
  155. data/lib/jmeter_perf/dsl/view_results_tree.rb +61 -0
  156. data/lib/jmeter_perf/dsl/while_controller.rb +31 -0
  157. data/lib/jmeter_perf/dsl/x_path_assertion.rb +37 -0
  158. data/lib/jmeter_perf/dsl/x_path_extractor.rb +37 -0
  159. data/lib/jmeter_perf/dsl/xml_assertion.rb +29 -0
  160. data/lib/jmeter_perf/dsl/xml_schema_assertion.rb +31 -0
  161. data/lib/jmeter_perf/extend/assertions/response_assertion.rb +38 -0
  162. data/lib/jmeter_perf/extend/config_elements/header_manager.rb +13 -0
  163. data/lib/jmeter_perf/extend/config_elements/http_cache_manager.rb +12 -0
  164. data/lib/jmeter_perf/extend/config_elements/http_cookie_manager.rb +39 -0
  165. data/lib/jmeter_perf/extend/config_elements/http_request_defaults.rb +55 -0
  166. data/lib/jmeter_perf/extend/config_elements/user_defined_variables.rb +13 -0
  167. data/lib/jmeter_perf/extend/config_elements/user_parameters.rb +31 -0
  168. data/lib/jmeter_perf/extend/controllers/foreach_controller.rb +31 -0
  169. data/lib/jmeter_perf/extend/controllers/loop_controller.rb +11 -0
  170. data/lib/jmeter_perf/extend/controllers/module_controller.rb +26 -0
  171. data/lib/jmeter_perf/extend/controllers/throughput_controller.rb +15 -0
  172. data/lib/jmeter_perf/extend/controllers/transaction_controller.rb +14 -0
  173. data/lib/jmeter_perf/extend/misc/exists.rb +13 -0
  174. data/lib/jmeter_perf/extend/misc/rsync.rb +24 -0
  175. data/lib/jmeter_perf/extend/misc/uuid.rb +12 -0
  176. data/lib/jmeter_perf/extend/misc/with_helpers.rb +27 -0
  177. data/lib/jmeter_perf/extend/plugins/jmeter_plugins.rb +124 -0
  178. data/lib/jmeter_perf/extend/processors/extract.rb +27 -0
  179. data/lib/jmeter_perf/extend/processors/regular_expression_extractor.rb +27 -0
  180. data/lib/jmeter_perf/extend/samplers/http_request.rb +66 -0
  181. data/lib/jmeter_perf/extend/samplers/jms_pointtopoint.rb +23 -0
  182. data/lib/jmeter_perf/extend/samplers/soapxmlrpc_request.rb +10 -0
  183. data/lib/jmeter_perf/extend/threads/thread_group.rb +19 -0
  184. data/lib/jmeter_perf/extend/timers/constant_throughput_timer.rb +11 -0
  185. data/lib/jmeter_perf/extend/timers/random_timer.rb +14 -0
  186. data/lib/jmeter_perf/helpers/dsl_generator.rb +157 -0
  187. data/lib/jmeter_perf/helpers/fallback_content_proxy.rb +96 -0
  188. data/lib/jmeter_perf/helpers/helper.rb +63 -0
  189. data/lib/jmeter_perf/helpers/parser.rb +143 -0
  190. data/lib/jmeter_perf/helpers/running_statistics.rb +62 -0
  191. data/lib/jmeter_perf/helpers/string.rb +60 -0
  192. data/lib/jmeter_perf/helpers/user-agents.rb +42 -0
  193. data/lib/jmeter_perf/plugins/active_threads_over_time.rb +59 -0
  194. data/lib/jmeter_perf/plugins/composite_graph.rb +77 -0
  195. data/lib/jmeter_perf/plugins/console_status_logger.rb +19 -0
  196. data/lib/jmeter_perf/plugins/dummy_sampler.rb +30 -0
  197. data/lib/jmeter_perf/plugins/jmx_collector.rb +74 -0
  198. data/lib/jmeter_perf/plugins/json_path_assertion.rb +23 -0
  199. data/lib/jmeter_perf/plugins/json_path_extractor.rb +22 -0
  200. data/lib/jmeter_perf/plugins/latencies_over_time.rb +53 -0
  201. data/lib/jmeter_perf/plugins/loadosophia_uploader.rb +66 -0
  202. data/lib/jmeter_perf/plugins/perfmon_collector.rb +87 -0
  203. data/lib/jmeter_perf/plugins/redis_data_set.rb +43 -0
  204. data/lib/jmeter_perf/plugins/response_codes_per_second.rb +53 -0
  205. data/lib/jmeter_perf/plugins/response_times_distribution.rb +53 -0
  206. data/lib/jmeter_perf/plugins/response_times_over_time.rb +53 -0
  207. data/lib/jmeter_perf/plugins/response_times_percentiles.rb +54 -0
  208. data/lib/jmeter_perf/plugins/stepping_thread_group.rb +34 -0
  209. data/lib/jmeter_perf/plugins/transactions_per_second.rb +53 -0
  210. data/lib/jmeter_perf/plugins/ultimate_thread_group.rb +28 -0
  211. data/lib/jmeter_perf/plugins/variable_throughput_timer.rb +35 -0
  212. data/lib/jmeter_perf/report/comparator.rb +258 -0
  213. data/lib/jmeter_perf/report/summary.rb +268 -0
  214. data/lib/jmeter_perf/tasks/dsl.rake +19 -0
  215. data/lib/jmeter_perf/version.rb +5 -0
  216. data/lib/jmeter_perf/views/report_template.html.erb +114 -0
  217. data/lib/jmeter_perf.rb +183 -0
  218. data/lib/specifications/idl.xml +1494 -0
  219. data/sig/jmeter_perf.rbs +195 -0
  220. data/sorbet/config +5 -0
  221. data/sorbet/rbi/annotations/.gitattributes +1 -0
  222. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  223. data/sorbet/rbi/gems/.gitattributes +1 -0
  224. data/sorbet/rbi/gems/ast@2.4.2.rbi +585 -0
  225. data/sorbet/rbi/gems/bump@0.10.0.rbi +169 -0
  226. data/sorbet/rbi/gems/byebug@11.1.3.rbi +3607 -0
  227. data/sorbet/rbi/gems/coderay@1.1.3.rbi +3427 -0
  228. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +1131 -0
  229. data/sorbet/rbi/gems/docile@1.4.1.rbi +377 -0
  230. data/sorbet/rbi/gems/erubi@1.13.0.rbi +150 -0
  231. data/sorbet/rbi/gems/json@2.7.2.rbi +1562 -0
  232. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14238 -0
  233. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +240 -0
  234. data/sorbet/rbi/gems/method_source@1.1.0.rbi +304 -0
  235. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  236. data/sorbet/rbi/gems/nokogiri@1.16.7.rbi +7311 -0
  237. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  238. data/sorbet/rbi/gems/parser@3.3.5.0.rbi +5519 -0
  239. data/sorbet/rbi/gems/prism@1.2.0.rbi +39085 -0
  240. data/sorbet/rbi/gems/pry-byebug@3.10.1.rbi +1151 -0
  241. data/sorbet/rbi/gems/pry@0.14.2.rbi +10076 -0
  242. data/sorbet/rbi/gems/racc@1.8.1.rbi +162 -0
  243. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +403 -0
  244. data/sorbet/rbi/gems/rake@13.2.1.rbi +3074 -0
  245. data/sorbet/rbi/gems/rbi@0.2.1.rbi +4535 -0
  246. data/sorbet/rbi/gems/rbtree3@0.7.1.rbi +9 -0
  247. data/sorbet/rbi/gems/regexp_parser@2.9.2.rbi +3772 -0
  248. data/sorbet/rbi/gems/rexml@3.3.8.rbi +4858 -0
  249. data/sorbet/rbi/gems/rspec-core@3.13.1.rbi +11132 -0
  250. data/sorbet/rbi/gems/rspec-expectations@3.13.3.rbi +8183 -0
  251. data/sorbet/rbi/gems/rspec-mocks@3.13.1.rbi +5341 -0
  252. data/sorbet/rbi/gems/rspec-support@3.13.1.rbi +1630 -0
  253. data/sorbet/rbi/gems/rspec@3.13.0.rbi +83 -0
  254. data/sorbet/rbi/gems/rubocop-ast@1.32.3.rbi +7054 -0
  255. data/sorbet/rbi/gems/rubocop-performance@1.21.1.rbi +9 -0
  256. data/sorbet/rbi/gems/rubocop@1.65.1.rbi +58182 -0
  257. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1318 -0
  258. data/sorbet/rbi/gems/simplecov-html@0.13.1.rbi +225 -0
  259. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +2149 -0
  260. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +9 -0
  261. data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
  262. data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +9 -0
  263. data/sorbet/rbi/gems/standard-performance@1.4.0.rbi +9 -0
  264. data/sorbet/rbi/gems/standard@1.40.0.rbi +926 -0
  265. data/sorbet/rbi/gems/tapioca@0.16.3.rbi +3596 -0
  266. data/sorbet/rbi/gems/tdigest@0.2.1.rbi +170 -0
  267. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  268. data/sorbet/rbi/gems/unicode-display_width@2.6.0.rbi +66 -0
  269. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  270. data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
  271. data/sorbet/rbi/todo.rbi +31 -0
  272. data/sorbet/tapioca/config.yml +13 -0
  273. data/sorbet/tapioca/require.rb +15 -0
  274. data/tasks/dsl.rake +22 -0
  275. metadata +355 -0
@@ -0,0 +1,31 @@
1
+ module JmeterPerf
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_method :parameters, :user_parameters
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def foreach_controller(params = {}, &)
4
+ node = JmeterPerf::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(JmeterPerf::Helpers::String.strip_heredoc(
9
+ <<-EOS
10
+ <stringProp name="ForeachController.startIndex"/>
11
+ EOS
12
+ )).children
13
+ )
14
+ end
15
+
16
+ if params[:end_index]
17
+ params[:endIndex] = params[:end_index]
18
+ node.doc.children.first.add_child(
19
+ Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
20
+ <<-EOS
21
+ <stringProp name="ForeachController.endIndex"/>
22
+ EOS
23
+ )).children
24
+ )
25
+ end
26
+ end
27
+
28
+ attach_node(node, &)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def loop_controller(params, &block)
4
+ params[:loops] = params[:count] || 1
5
+
6
+ super
7
+ end
8
+
9
+ alias_method :loops, :loop_controller
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def module_controller(params, &)
4
+ node = JmeterPerf::DSL::ModuleController.new(params)
5
+
6
+ if params[:test_fragment]
7
+ params[:test_fragment].is_a?(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") << Nokogiri::XML(
15
+ JmeterPerf::Helpers::String.strip_heredoc(
16
+ <<-EOS
17
+ <stringProp name="node_#{index}">#{node_name}</stringProp>
18
+ EOS
19
+ )
20
+ ).children
21
+ end
22
+
23
+ attach_node(node, &)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def throughput_controller(params = {}, &)
4
+ params[:style] = 1 if params[:percent]
5
+ params[:maxThroughput] = params[:total] || params[:percent] || 1
6
+
7
+ node = JmeterPerf::ThroughputController.new(params)
8
+ node.doc.xpath(".//FloatProperty/value").first.content = params[:maxThroughput].to_f
9
+
10
+ attach_node(node, &)
11
+ end
12
+
13
+ alias_method :throughput, :throughput_controller
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def transaction_controller(*args, &)
4
+ params = args.shift || {}
5
+ params = {name: params}.merge(args.shift || {}) if params.is_a?(String)
6
+ params[:parent] = params[:parent] || false
7
+ params[:includeTimers] = params[:include_timers] || false
8
+ node = JmeterPerf::DSL::TransactionController.new(params)
9
+ attach_node(node, &)
10
+ end
11
+
12
+ alias_method :transaction, :transaction_controller
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def exists(variable, &)
4
+ params ||= {}
5
+ params[:condition] = "\"${#{variable}}\" != \"\\${#{variable}}\""
6
+ params[:useExpression] = false
7
+ params[:name] = "if ${#{variable}}"
8
+ node = JmeterPerf::DSL::IfController.new(params)
9
+
10
+ attach_node(node, &)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def rsync(params = {})
4
+ logger.warn "Test file upload via rsync ..."
5
+
6
+ file(params)
7
+
8
+ cmd = "#{params[:rsync_bin_path]} #{params[:rsync_params]} #{params[:file]} #{params[:remote_user]}@#{params[:remote_host]}:#{params[:remote_path]}"
9
+
10
+ logger.debug cmd if params[:debug]
11
+
12
+ Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
13
+ while (line = stdout_err.gets)
14
+ logger.debug line.chomp if params[:debug]
15
+ end
16
+
17
+ exit_status = wait_thr.value
18
+ abort "Sorry there was an error: #{cmd}" unless exit_status.success?
19
+ end
20
+
21
+ logger.info "Upload complete at: #{params[:remote_host]}:#{params[:remote_path]}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def uuid_per_iteration(params = {}, &block)
4
+ params[:name] ||= "__UUID"
5
+ params[:variable] ||= "UUID"
6
+
7
+ dummy_sampler name: params[:name], response_data: "${__UUID}" do
8
+ regex pattern: "(.*)", name: params[:variable], match_number: 1
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def with_user_agent(device)
4
+ http_header_manager name: "User-Agent", value: JmeterPerf::Helpers::UserAgent.string(device)
5
+ end
6
+
7
+ def with_browser(device)
8
+ http_header_manager name: "User-Agent", value: JmeterPerf::Helpers::UserAgent.string(device)
9
+ http_header_manager [
10
+ {name: "Accept-Encoding", value: "gzip,deflate,sdch"},
11
+ {name: "Accept", value: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
12
+ ]
13
+ end
14
+
15
+ def with_xhr
16
+ http_header_manager name: "X-Requested-With", value: "XMLHttpRequest"
17
+ end
18
+
19
+ def with_gzip
20
+ http_header_manager name: "Accept-Encoding", value: "gzip, deflate"
21
+ end
22
+
23
+ def with_json
24
+ http_header_manager name: "Accept", value: "text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8, application/json"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,124 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def response_codes_per_second(params = {}, &)
4
+ node = JmeterPerf::Plugins::ResponseCodesPerSecond.new(params)
5
+ attach_node(node, &)
6
+ end
7
+
8
+ def response_times_distribution(params = {}, &)
9
+ node = JmeterPerf::Plugins::ResponseTimesDistribution.new(params)
10
+ attach_node(node, &)
11
+ end
12
+
13
+ def response_times_over_time(params = {}, &)
14
+ node = JmeterPerf::Plugins::ResponseTimesOverTime.new(params)
15
+ attach_node(node, &)
16
+ end
17
+
18
+ def response_times_percentiles(params = {}, &)
19
+ node = JmeterPerf::Plugins::ResponseTimesPercentiles.new(params)
20
+ attach_node(node, &)
21
+ end
22
+
23
+ def transactions_per_second(params = {}, &)
24
+ node = JmeterPerf::Plugins::TransactionsPerSecond.new(params)
25
+ attach_node(node, &)
26
+ end
27
+
28
+ def latencies_over_time(params = {}, &)
29
+ node = JmeterPerf::Plugins::LatenciesOverTime.new(params)
30
+ attach_node(node, &)
31
+ end
32
+
33
+ def console_status_logger(params = {}, &)
34
+ node = JmeterPerf::Plugins::ConsoleStatusLogger.new(params)
35
+ attach_node(node, &)
36
+ end
37
+
38
+ alias_method :console, :console_status_logger
39
+
40
+ def throughput_shaper(params = {}, &)
41
+ node = JmeterPerf::Plugins::ThroughputShapingTimer.new(params)
42
+ attach_node(node, &)
43
+ end
44
+
45
+ alias_method :shaper, :throughput_shaper
46
+
47
+ def dummy_sampler(params = {}, &)
48
+ node = JmeterPerf::Plugins::DummySampler.new(params)
49
+ attach_node(node, &)
50
+ end
51
+
52
+ alias_method :dummy, :dummy_sampler
53
+
54
+ def stepping_thread_group(params = {}, &)
55
+ node = JmeterPerf::Plugins::SteppingThreadGroup.new(params)
56
+ attach_node(node, &)
57
+ end
58
+
59
+ alias_method :step, :stepping_thread_group
60
+
61
+ def ultimate_thread_group(params = {}, &)
62
+ node = JmeterPerf::Plugins::UltimateThreadGroup.new(params)
63
+
64
+ (params.is_a?(Array) ? params : params[:threads]).each_with_index do |group, index|
65
+ node.doc.at_xpath("//collectionProp").<<
66
+ Nokogiri::XML(
67
+ JmeterPerf::Helpers::String.strip_heredoc(
68
+ <<-EOS
69
+ <collectionProp name="index">
70
+ <stringProp name="#{group[:start_threads]}">#{group[:start_threads]}</stringProp>
71
+ <stringProp name="#{group[:initial_delay]}">#{group[:initial_delay]}</stringProp>
72
+ <stringProp name="#{group[:start_time]}">#{group[:start_time]}</stringProp>
73
+ <stringProp name="#{group[:hold_time]}">#{group[:hold_time]}</stringProp>
74
+ <stringProp name="#{group[:stop_time]}">#{group[:stop_time]}</stringProp>
75
+ </collectionProp>
76
+ EOS
77
+ )
78
+ ).children
79
+ end
80
+
81
+ attach_node(node, &)
82
+ end
83
+
84
+ alias_method :ultimate, :ultimate_thread_group
85
+
86
+ def composite_graph(params = {}, &)
87
+ node = JmeterPerf::Plugins::CompositeGraph.new(params)
88
+ attach_node(node, &)
89
+ end
90
+
91
+ alias_method :composite, :composite_graph
92
+
93
+ def active_threads_over_time(params = {}, &)
94
+ node = JmeterPerf::Plugins::ActiveThreadsOverTime.new(params)
95
+ attach_node(node, &)
96
+ end
97
+
98
+ alias_method :active_threads, :active_threads_over_time
99
+
100
+ def perfmon_collector(params = {}, &)
101
+ node = JmeterPerf::Plugins::PerfmonCollector.new(params)
102
+ attach_node(node, &)
103
+ end
104
+
105
+ alias_method :perfmon, :perfmon_collector
106
+
107
+ def loadosophia_uploader(params = {}, &)
108
+ node = JmeterPerf::Plugins::LoadosophiaUploader.new(params)
109
+ attach_node(node, &)
110
+ end
111
+
112
+ alias_method :loadosophia, :loadosophia_uploader
113
+
114
+ def redis_data_set(params = {}, &)
115
+ node = JmeterPerf::Plugins::RedisDataSet.new(params)
116
+ attach_node(node, &)
117
+ end
118
+
119
+ def jmx_collector(params = {}, &)
120
+ node = JmeterPerf::Plugins::JMXCollector.new(params)
121
+ attach_node(node, &)
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,27 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def extract(params, &)
4
+ node = if params[:regex]
5
+ params[:refname] = params[:name]
6
+ params[:template] = params[:template] || "$1$"
7
+ JmeterPerf::RegularExpressionExtractor.new(params)
8
+ elsif params[:xpath]
9
+ params[:refname] = params[:name]
10
+ params[:xpathQuery] = params[:xpath]
11
+ JmeterPerf::XpathExtractor.new(params)
12
+ elsif params[:json]
13
+ params[:VAR] = params[:name]
14
+ params[:JSONPATH] = params[:json]
15
+ JmeterPerf::Plugins::JsonPathExtractor.new(params)
16
+ elsif params[:css]
17
+ params[:refname] = params[:name]
18
+ params[:expr] = params[:css]
19
+ JmeterPerf::CssjqueryExtractor.new(params)
20
+ end
21
+
22
+ attach_node(node, &)
23
+ end
24
+
25
+ alias_method :web_reg_save_param, :extract
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def regular_expression_extractor(params, &)
4
+ params[:refname] = params[:name]
5
+ params[:regex] = params[:pattern]
6
+ params[:template] = params[:template] || "$1$"
7
+
8
+ node = JmeterPerf::DSL::RegularExpressionExtractor.new(params).tap do |node|
9
+ if params[:variable]
10
+ node.doc.xpath("//stringProp[@name='Sample.scope']").first.content = "variable"
11
+
12
+ node.doc.children.first.add_child(
13
+ Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
14
+ <<-EOS
15
+ <stringProp name="Scope.variable">#{params[:variable]}</stringProp>
16
+ EOS
17
+ )).children
18
+ )
19
+ end
20
+ end
21
+
22
+ attach_node(node, &)
23
+ end
24
+
25
+ alias_method :regex, :regular_expression_extractor
26
+ end
27
+ end
@@ -0,0 +1,66 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def http_request(*args, &)
4
+ params = args.shift || {}
5
+ params = {url: params}.merge(args.shift || {}) if params.is_a?(String)
6
+
7
+ params[:method] ||= case __callee__.to_s
8
+ when "visit"
9
+ "GET"
10
+ when "submit"
11
+ "POST"
12
+ else
13
+ __callee__.to_s.upcase
14
+ end
15
+
16
+ params[:name] ||= params[:url]
17
+
18
+ parse_http_request(params)
19
+
20
+ if params[:sample]
21
+ transaction name: params[:name], parent: true do
22
+ loops count: params[:sample].to_i do
23
+ params.delete(:sample)
24
+ attach_node(http_request_node(params), &block)
25
+ end
26
+ end
27
+ else
28
+ attach_node(http_request_node(params), &)
29
+ end
30
+ end
31
+
32
+ def http_request_node(params)
33
+ JmeterPerf::DSL::HTTPRequest.new(params).tap do |node|
34
+ if params[:implementation]
35
+ node.doc.children.first.add_child(
36
+ Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
37
+ <<-EOS
38
+ <stringProp name="HTTPSampler.implementation">#{params[:implementation]}</stringProp>
39
+ EOS
40
+ )).children
41
+ )
42
+ end
43
+
44
+ if params[:comments]
45
+ node.doc.children.first.add_child(
46
+ Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
47
+ <<-EOS
48
+ <stringProp name="TestPlan.comments">#{params[:comments]}</stringProp>
49
+ EOS
50
+ )).children
51
+ )
52
+ end
53
+ end
54
+ end
55
+
56
+ alias_method :request, :http_request
57
+ alias_method :get, :http_request
58
+ alias_method :visit, :http_request
59
+ alias_method :post, :http_request
60
+ alias_method :submit, :http_request
61
+ alias_method :delete, :http_request
62
+ alias_method :patch, :http_request
63
+ alias_method :put, :http_request
64
+ alias_method :head, :http_request
65
+ end
66
+ end
@@ -0,0 +1,23 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def jms_pointtopoint(params, &block)
4
+ JmeterPerf::JmsPointtopoint.new(params).tap do |node|
5
+ params[:jndi_properties]&.each do |property_name, property_value|
6
+ node.doc.xpath("//collectionProp").first.add_child(
7
+ Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
8
+ <<-EOS
9
+ <elementProp name="#{property_name}" elementType="Argument">
10
+ <stringProp name="Argument.name">#{property_name}</stringProp>
11
+ <stringProp name="Argument.value">#{property_value}</stringProp>
12
+ <stringProp name="Argument.metadata">=</stringProp>
13
+ </elementProp>
14
+ EOS
15
+ )).children
16
+ )
17
+ end
18
+
19
+ attach_node(node, &block)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def soapxmlrpc_request(params, &block)
4
+ params[:method] ||= "POST"
5
+
6
+ super
7
+ end
8
+ alias_method :soap, :soapxmlrpc_request
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def thread_group(*args, &)
4
+ params = args.shift || {}
5
+ params = {count: params}.merge(args.shift || {}) if params.is_a?(Integer)
6
+ params[:num_threads] = params[:count] || 1
7
+ params[:ramp_time] = params[:rampup] || (params[:num_threads] / 2.0).ceil
8
+ params[:start_time] = params[:start_time] || Time.now.to_i * 1000
9
+ params[:end_time] = params[:end_time] || Time.now.to_i * 1000
10
+ params[:duration] ||= 60
11
+ params[:continue_forever] ||= false
12
+ params[:loops] = -1 if params[:continue_forever]
13
+ node = JmeterPerf::DSL::ThreadGroup.new(params)
14
+ attach_node(node, &)
15
+ end
16
+
17
+ alias_method :threads, :thread_group
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def constant_throughput_timer(params, &)
4
+ params[:value] ||= params[:throughput] || 0.0
5
+
6
+ node = JmeterPerf::DSL::ConstantThroughputTimer.new(params)
7
+ node.doc.xpath('//stringProp[@name="throughput"]').first.content = params[:value]
8
+ attach_node(node, &)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module JmeterPerf
2
+ class ExtendedDSL < DSL
3
+ def random_timer(delay = 0, range = 0, &)
4
+ params = {}
5
+ params[:delay] = delay
6
+ params[:range] = range
7
+ node = JmeterPerf::GaussianRandomTimer.new(params)
8
+
9
+ attach_node(node, &)
10
+ end
11
+
12
+ alias_method :think_time, :random_timer
13
+ end
14
+ end