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.
- checksums.yaml +7 -0
- data/.gitattributes +22 -0
- data/.github/workflows/ci.yml +54 -0
- data/.gitignore +24 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/CHANGES.md +77 -0
- data/Gemfile +23 -0
- data/LICENSE.txt +21 -0
- data/README.md +434 -0
- data/Rakefile +18 -0
- data/examples/OS_process_sampler.rb +24 -0
- data/examples/assertion_results.rb +18 -0
- data/examples/basic_auth.rb +11 -0
- data/examples/browser_headers.rb +7 -0
- data/examples/composite_graph.rb +29 -0
- data/examples/constant_throughput_timer.rb +11 -0
- data/examples/csv_data_set.rb +11 -0
- data/examples/dummy_sampler.rb +9 -0
- data/examples/duration_assertion.rb +10 -0
- data/examples/etsy_login_browse.rb +61 -0
- data/examples/extract.rb +12 -0
- data/examples/foreach_controller.rb +29 -0
- data/examples/header_manager.rb +29 -0
- data/examples/http_cache_manager.rb +11 -0
- data/examples/http_cookie_manager.rb +11 -0
- data/examples/http_request_defaults.rb +11 -0
- data/examples/http_request_post.rb +11 -0
- data/examples/http_request_with_files.rb +13 -0
- data/examples/http_request_with_query_params.rb +8 -0
- data/examples/jmeter_plugins_graphs.rb +22 -0
- data/examples/json_path_assertions.rb +11 -0
- data/examples/json_path_extractor.rb +10 -0
- data/examples/json_path_postprocessor.rb +10 -0
- data/examples/jsr223_assertion.rb +13 -0
- data/examples/ldap_sampler.rb +16 -0
- data/examples/loadosophia.rb +18 -0
- data/examples/loop_controller.rb +10 -0
- data/examples/loops_with_counter.rb +15 -0
- data/examples/once_only_controller.rb +15 -0
- data/examples/perfmon.rb +46 -0
- data/examples/real_custom_methods.rb +19 -0
- data/examples/real_page_objects.rb +41 -0
- data/examples/real_redis_data_set_with_setup.rb +123 -0
- data/examples/real_user_objects_github.rb +112 -0
- data/examples/regular_expression_extractor.rb +12 -0
- data/examples/response_assertion.rb +15 -0
- data/examples/response_time_percentiles_graph.rb +11 -0
- data/examples/rsync.rb +16 -0
- data/examples/sample_transaction.rb +18 -0
- data/examples/simple_data_writer_listener.rb +11 -0
- data/examples/stepping_thread_group.rb +30 -0
- data/examples/test_fragment.rb +14 -0
- data/examples/think_time.rb +15 -0
- data/examples/thread_groups.rb +7 -0
- data/examples/throughput_controller.rb +14 -0
- data/examples/throughput_shaping_timer.rb +20 -0
- data/examples/ultimate_thread_group.rb +39 -0
- data/examples/unicode.rb +8 -0
- data/examples/user_defined_variables.rb +10 -0
- data/examples/user_parameters.rb +28 -0
- data/examples/uuid_per_iteration.rb +15 -0
- data/jmeter-ruby.gemspec +28 -0
- data/lib/jmeter-ruby/DSL.md +235 -0
- data/lib/jmeter-ruby/dsl/access_log_sampler.rb +32 -0
- data/lib/jmeter-ruby/dsl/aggregate_graph.rb +55 -0
- data/lib/jmeter-ruby/dsl/aggregate_report.rb +55 -0
- data/lib/jmeter-ruby/dsl/ajp13_sampler.rb +41 -0
- data/lib/jmeter-ruby/dsl/assertion_results.rb +55 -0
- data/lib/jmeter-ruby/dsl/beanshell_assertion.rb +28 -0
- data/lib/jmeter-ruby/dsl/beanshell_listener.rb +28 -0
- data/lib/jmeter-ruby/dsl/beanshell_postprocessor.rb +28 -0
- data/lib/jmeter-ruby/dsl/beanshell_preprocessor.rb +28 -0
- data/lib/jmeter-ruby/dsl/beanshell_sampler.rb +28 -0
- data/lib/jmeter-ruby/dsl/beanshell_timer.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_assertion.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_listener.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_postprocessor.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_preprocessor.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_sampler.rb +28 -0
- data/lib/jmeter-ruby/dsl/bsf_timer.rb +28 -0
- data/lib/jmeter-ruby/dsl/compare_assertion.rb +27 -0
- data/lib/jmeter-ruby/dsl/comparison_assertion_visualizer.rb +55 -0
- data/lib/jmeter-ruby/dsl/constant_throughput_timer.rb +26 -0
- data/lib/jmeter-ruby/dsl/constant_timer.rb +25 -0
- data/lib/jmeter-ruby/dsl/counter.rb +31 -0
- data/lib/jmeter-ruby/dsl/cssjquery_extractor.rb +31 -0
- data/lib/jmeter-ruby/dsl/csv_data_set_config.rb +33 -0
- data/lib/jmeter-ruby/dsl/debug_postprocessor.rb +28 -0
- data/lib/jmeter-ruby/dsl/debug_sampler.rb +27 -0
- data/lib/jmeter-ruby/dsl/distribution_graphalpha.rb +55 -0
- data/lib/jmeter-ruby/dsl/duration_assertion.rb +25 -0
- data/lib/jmeter-ruby/dsl/foreach_controller.rb +27 -0
- data/lib/jmeter-ruby/dsl/ftp_request.rb +34 -0
- data/lib/jmeter-ruby/dsl/ftp_request_defaults.rb +32 -0
- data/lib/jmeter-ruby/dsl/gaussian_random_timer.rb +26 -0
- data/lib/jmeter-ruby/dsl/generate_summary_results.rb +23 -0
- data/lib/jmeter-ruby/dsl/graph_results.rb +55 -0
- data/lib/jmeter-ruby/dsl/html_assertion.rb +30 -0
- data/lib/jmeter-ruby/dsl/html_link_parser.rb +23 -0
- data/lib/jmeter-ruby/dsl/html_parameter_mask.rb +32 -0
- data/lib/jmeter-ruby/dsl/http_authorization_manager.rb +33 -0
- data/lib/jmeter-ruby/dsl/http_cache_manager.rb +26 -0
- data/lib/jmeter-ruby/dsl/http_cookie_manager.rb +28 -0
- data/lib/jmeter-ruby/dsl/http_header_manager.rb +30 -0
- data/lib/jmeter-ruby/dsl/http_request.rb +41 -0
- data/lib/jmeter-ruby/dsl/http_request_defaults.rb +41 -0
- data/lib/jmeter-ruby/dsl/http_url_rewriting_modifier.rb +30 -0
- data/lib/jmeter-ruby/dsl/if_controller.rb +27 -0
- data/lib/jmeter-ruby/dsl/include_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/java_request.rb +69 -0
- data/lib/jmeter-ruby/dsl/java_request_defaults.rb +69 -0
- data/lib/jmeter-ruby/dsl/jdbc_connection_configuration.rb +37 -0
- data/lib/jmeter-ruby/dsl/jdbc_postprocessor.rb +33 -0
- data/lib/jmeter-ruby/dsl/jdbc_preprocessor.rb +33 -0
- data/lib/jmeter-ruby/dsl/jdbc_request.rb +33 -0
- data/lib/jmeter-ruby/dsl/jms_pointtopoint.rb +41 -0
- data/lib/jmeter-ruby/dsl/jms_publisher.rb +43 -0
- data/lib/jmeter-ruby/dsl/jms_subscriber.rb +35 -0
- data/lib/jmeter-ruby/dsl/json_path_postprocessor.rb +27 -0
- data/lib/jmeter-ruby/dsl/jsr223_assertion.rb +29 -0
- data/lib/jmeter-ruby/dsl/jsr223_listener.rb +29 -0
- data/lib/jmeter-ruby/dsl/jsr223_postprocessor.rb +29 -0
- data/lib/jmeter-ruby/dsl/jsr223_preprocessor.rb +29 -0
- data/lib/jmeter-ruby/dsl/jsr223_sampler.rb +29 -0
- data/lib/jmeter-ruby/dsl/jsr223_timer.rb +29 -0
- data/lib/jmeter-ruby/dsl/junit_request.rb +37 -0
- data/lib/jmeter-ruby/dsl/keystore_configuration.rb +28 -0
- data/lib/jmeter-ruby/dsl/ldap_extended_request.rb +42 -0
- data/lib/jmeter-ruby/dsl/ldap_extended_request_defaults.rb +42 -0
- data/lib/jmeter-ruby/dsl/ldap_request.rb +35 -0
- data/lib/jmeter-ruby/dsl/ldap_request_defaults.rb +39 -0
- data/lib/jmeter-ruby/dsl/login_config_element.rb +26 -0
- data/lib/jmeter-ruby/dsl/loop_controller.rb +26 -0
- data/lib/jmeter-ruby/dsl/mail_reader_sampler.rb +37 -0
- data/lib/jmeter-ruby/dsl/mailer_visualizer.rb +64 -0
- data/lib/jmeter-ruby/dsl/md5hex_assertion.rb +25 -0
- data/lib/jmeter-ruby/dsl/module_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/monitor_results.rb +55 -0
- data/lib/jmeter-ruby/dsl/once_only_controller.rb +23 -0
- data/lib/jmeter-ruby/dsl/os_process_sampler.rb +34 -0
- data/lib/jmeter-ruby/dsl/poisson_random_timer.rb +26 -0
- data/lib/jmeter-ruby/dsl/random_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/random_order_controller.rb +23 -0
- data/lib/jmeter-ruby/dsl/random_variable.rb +30 -0
- data/lib/jmeter-ruby/dsl/recording_controller.rb +23 -0
- data/lib/jmeter-ruby/dsl/regex_user_parameters.rb +27 -0
- data/lib/jmeter-ruby/dsl/regular_expression_extractor.rb +32 -0
- data/lib/jmeter-ruby/dsl/response_assertion.rb +31 -0
- data/lib/jmeter-ruby/dsl/response_time_graph.rb +55 -0
- data/lib/jmeter-ruby/dsl/result_status_action_handler.rb +25 -0
- data/lib/jmeter-ruby/dsl/runtime_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/save_responses_to_a_file.rb +29 -0
- data/lib/jmeter-ruby/dsl/setup_thread_group.rb +36 -0
- data/lib/jmeter-ruby/dsl/simple_config_element.rb +23 -0
- data/lib/jmeter-ruby/dsl/simple_controller.rb +23 -0
- data/lib/jmeter-ruby/dsl/simple_data_writer.rb +55 -0
- data/lib/jmeter-ruby/dsl/smime_assertion.rb +35 -0
- data/lib/jmeter-ruby/dsl/smtp_sampler.rb +51 -0
- data/lib/jmeter-ruby/dsl/soapxmlrpc_request.rb +33 -0
- data/lib/jmeter-ruby/dsl/spline_visualizer.rb +55 -0
- data/lib/jmeter-ruby/dsl/summary_report.rb +55 -0
- data/lib/jmeter-ruby/dsl/switch_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/synchronizing_timer.rb +26 -0
- data/lib/jmeter-ruby/dsl/tcp_sampler.rb +33 -0
- data/lib/jmeter-ruby/dsl/tcp_sampler_config.rb +31 -0
- data/lib/jmeter-ruby/dsl/test_action.rb +27 -0
- data/lib/jmeter-ruby/dsl/test_fragment.rb +23 -0
- data/lib/jmeter-ruby/dsl/test_plan.rb +31 -0
- data/lib/jmeter-ruby/dsl/thread_group.rb +37 -0
- data/lib/jmeter-ruby/dsl/throughput_controller.rb +32 -0
- data/lib/jmeter-ruby/dsl/transaction_controller.rb +26 -0
- data/lib/jmeter-ruby/dsl/uniform_random_timer.rb +26 -0
- data/lib/jmeter-ruby/dsl/user_defined_variables.rb +33 -0
- data/lib/jmeter-ruby/dsl/user_parameters.rb +30 -0
- data/lib/jmeter-ruby/dsl/view_results_in_table.rb +55 -0
- data/lib/jmeter-ruby/dsl/view_results_tree.rb +55 -0
- data/lib/jmeter-ruby/dsl/while_controller.rb +25 -0
- data/lib/jmeter-ruby/dsl/xml_assertion.rb +23 -0
- data/lib/jmeter-ruby/dsl/xml_schema_assertion.rb +25 -0
- data/lib/jmeter-ruby/dsl/xpath_assertion.rb +31 -0
- data/lib/jmeter-ruby/dsl/xpath_extractor.rb +31 -0
- data/lib/jmeter-ruby/dsl.rb +102 -0
- data/lib/jmeter-ruby/extend/assertions/response_assertion.rb +36 -0
- data/lib/jmeter-ruby/extend/config_elements/header_manager.rb +13 -0
- data/lib/jmeter-ruby/extend/config_elements/http_cache_manager.rb +12 -0
- data/lib/jmeter-ruby/extend/config_elements/http_cookie_manager.rb +36 -0
- data/lib/jmeter-ruby/extend/config_elements/http_request_defaults.rb +39 -0
- data/lib/jmeter-ruby/extend/config_elements/user_defined_variables.rb +13 -0
- data/lib/jmeter-ruby/extend/config_elements/user_parameters.rb +31 -0
- data/lib/jmeter-ruby/extend/controllers/foreach_controller.rb +27 -0
- data/lib/jmeter-ruby/extend/controllers/loop_controller.rb +11 -0
- data/lib/jmeter-ruby/extend/controllers/module_controller.rb +23 -0
- data/lib/jmeter-ruby/extend/controllers/throughput_controller.rb +15 -0
- data/lib/jmeter-ruby/extend/controllers/transaction_controller.rb +14 -0
- data/lib/jmeter-ruby/extend/misc/aliases.rb +21 -0
- data/lib/jmeter-ruby/extend/misc/exists.rb +13 -0
- data/lib/jmeter-ruby/extend/misc/rsync.rb +24 -0
- data/lib/jmeter-ruby/extend/misc/uuid.rb +12 -0
- data/lib/jmeter-ruby/extend/misc/with_helpers.rb +27 -0
- data/lib/jmeter-ruby/extend/plugins/jmeter_plugins.rb +120 -0
- data/lib/jmeter-ruby/extend/processors/extract.rb +28 -0
- data/lib/jmeter-ruby/extend/processors/regular_expression_extractor.rb +25 -0
- data/lib/jmeter-ruby/extend/samplers/http_request.rb +58 -0
- data/lib/jmeter-ruby/extend/samplers/jms_pointtopoint.rb +26 -0
- data/lib/jmeter-ruby/extend/samplers/soapxmlrpc_request.rb +9 -0
- data/lib/jmeter-ruby/extend/threads/setup_thread_group.rb +18 -0
- data/lib/jmeter-ruby/extend/threads/thread_group.rb +19 -0
- data/lib/jmeter-ruby/extend/timers/constant_throughput_timer.rb +11 -0
- data/lib/jmeter-ruby/extend/timers/random_timer.rb +14 -0
- data/lib/jmeter-ruby/helpers/fallback_content_proxy.rb +54 -0
- data/lib/jmeter-ruby/helpers/helper.rb +75 -0
- data/lib/jmeter-ruby/helpers/logger-colors.rb +48 -0
- data/lib/jmeter-ruby/helpers/parser.rb +135 -0
- data/lib/jmeter-ruby/helpers/strip-heredoc.rb +5 -0
- data/lib/jmeter-ruby/helpers/user-agents.rb +27 -0
- data/lib/jmeter-ruby/idl.rb +70 -0
- data/lib/jmeter-ruby/idl.xml +1488 -0
- data/lib/jmeter-ruby/plugins/active_threads_over_time.rb +57 -0
- data/lib/jmeter-ruby/plugins/composite_graph.rb +71 -0
- data/lib/jmeter-ruby/plugins/console_status_logger.rb +15 -0
- data/lib/jmeter-ruby/plugins/dummy_sampler.rb +26 -0
- data/lib/jmeter-ruby/plugins/jmx_collector.rb +73 -0
- data/lib/jmeter-ruby/plugins/json_path_assertion.rb +19 -0
- data/lib/jmeter-ruby/plugins/json_path_extractor.rb +20 -0
- data/lib/jmeter-ruby/plugins/latencies_over_time.rb +49 -0
- data/lib/jmeter-ruby/plugins/loadosophia_uploader.rb +63 -0
- data/lib/jmeter-ruby/plugins/perfmon_collector.rb +80 -0
- data/lib/jmeter-ruby/plugins/redis_data_set.rb +39 -0
- data/lib/jmeter-ruby/plugins/response_codes_per_second.rb +49 -0
- data/lib/jmeter-ruby/plugins/response_times_distribution.rb +49 -0
- data/lib/jmeter-ruby/plugins/response_times_over_time.rb +50 -0
- data/lib/jmeter-ruby/plugins/response_times_percentiles.rb +51 -0
- data/lib/jmeter-ruby/plugins/stepping_thread_group.rb +30 -0
- data/lib/jmeter-ruby/plugins/transactions_per_second.rb +50 -0
- data/lib/jmeter-ruby/plugins/ultimate_thread_group.rb +23 -0
- data/lib/jmeter-ruby/plugins/variable_throughput_timer.rb +27 -0
- data/lib/jmeter-ruby/version.rb +12 -0
- data/lib/jmeter-ruby.rb +27 -0
- data/mise.toml +2 -0
- data/script/release +162 -0
- data/spec/constant_throughput_timer_spec.rb +20 -0
- data/spec/csv_data_set_config_spec.rb +33 -0
- data/spec/header_manager_spec.rb +37 -0
- data/spec/http_cache_manager_spec.rb +29 -0
- data/spec/http_cookie_manager_spec.rb +169 -0
- data/spec/http_request_defaults_spec.rb +57 -0
- data/spec/http_request_spec.rb +305 -0
- data/spec/jmeter_plugins_spec.rb +245 -0
- data/spec/json_extractor_spec.rb +19 -0
- data/spec/json_path_assertion_spec.rb +28 -0
- data/spec/logic_controller_spec.rb +148 -0
- data/spec/loop_controller_spec.rb +19 -0
- data/spec/module_controller_spec.rb +56 -0
- data/spec/regular_expression_extractor_spec.rb +63 -0
- data/spec/response_assertion_spec.rb +69 -0
- data/spec/setup_thread_group_spec.rb +31 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/thread_group_spec.rb +57 -0
- data/spec/throughput_controller_spec.rb +24 -0
- data/spec/transaction_controller_spec.rb +30 -0
- data/spec/user_defined_variables_spec.rb +22 -0
- data/spec/user_parameters_spec.rb +45 -0
- data/spec/with_helpers_spec.rb +57 -0
- data/spec/xpath_extractor_spec.rb +15 -0
- metadata +360 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def transaction_controller(params={}, &block)
|
4
|
+
node = JmeterRuby::TransactionController.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class TransactionController
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'TransactionController' : (params[:name] || 'TransactionController')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="#{testname}" enabled="true">
|
17
|
+
<boolProp name="TransactionController.parent">true</boolProp>
|
18
|
+
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
19
|
+
</TransactionController>)
|
20
|
+
EOS
|
21
|
+
update params
|
22
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def uniform_random_timer(params={}, &block)
|
4
|
+
node = JmeterRuby::UniformRandomTimer.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class UniformRandomTimer
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'UniformRandomTimer' : (params[:name] || 'UniformRandomTimer')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<UniformRandomTimer guiclass="UniformRandomTimerGui" testclass="UniformRandomTimer" testname="#{testname}" enabled="true">
|
17
|
+
<stringProp name="ConstantTimer.delay">0</stringProp>
|
18
|
+
<stringProp name="RandomTimer.range">100.0</stringProp>
|
19
|
+
</UniformRandomTimer>)
|
20
|
+
EOS
|
21
|
+
update params
|
22
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def user_defined_variables(params={}, &block)
|
4
|
+
node = JmeterRuby::UserDefinedVariables.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class UserDefinedVariables
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'UserDefinedVariables' : (params[:name] || 'UserDefinedVariables')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="#{testname}" enabled="true">
|
17
|
+
<collectionProp name="Arguments.arguments">
|
18
|
+
<elementProp name=" " elementType="Argument">
|
19
|
+
<stringProp name="Argument.name"> </stringProp>
|
20
|
+
<stringProp name="Argument.value"> </stringProp>
|
21
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
22
|
+
<stringProp name="Argument.desc"> </stringProp>
|
23
|
+
</elementProp>
|
24
|
+
</collectionProp>
|
25
|
+
<stringProp name="TestPlan.comments"> </stringProp>
|
26
|
+
</Arguments>)
|
27
|
+
EOS
|
28
|
+
update params
|
29
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def user_parameters(params={}, &block)
|
4
|
+
node = JmeterRuby::UserParameters.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class UserParameters
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'UserParameters' : (params[:name] || 'UserParameters')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="#{testname}" enabled="true">
|
17
|
+
<collectionProp name="UserParameters.names"/>
|
18
|
+
<collectionProp name="UserParameters.thread_values">
|
19
|
+
<collectionProp name="1"/>
|
20
|
+
<collectionProp name="1"/>
|
21
|
+
</collectionProp>
|
22
|
+
<boolProp name="UserParameters.per_iteration">false</boolProp>
|
23
|
+
</UserParameters>)
|
24
|
+
EOS
|
25
|
+
update params
|
26
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def view_results_in_table(params={}, &block)
|
4
|
+
node = JmeterRuby::ViewResultsInTable.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class ViewResultsInTable
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'ViewResultsInTable' : (params[:name] || 'ViewResultsInTable')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="#{testname}" enabled="true">
|
17
|
+
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
18
|
+
<objProp>
|
19
|
+
<name>saveConfig</name>
|
20
|
+
<value class="SampleSaveConfiguration">
|
21
|
+
<time>true</time>
|
22
|
+
<latency>true</latency>
|
23
|
+
<timestamp>true</timestamp>
|
24
|
+
<success>true</success>
|
25
|
+
<label>true</label>
|
26
|
+
<code>true</code>
|
27
|
+
<message>false</message>
|
28
|
+
<threadName>true</threadName>
|
29
|
+
<dataType>false</dataType>
|
30
|
+
<encoding>false</encoding>
|
31
|
+
<assertions>false</assertions>
|
32
|
+
<subresults>false</subresults>
|
33
|
+
<responseData>false</responseData>
|
34
|
+
<samplerData>false</samplerData>
|
35
|
+
<xml>false</xml>
|
36
|
+
<fieldNames>false</fieldNames>
|
37
|
+
<responseHeaders>false</responseHeaders>
|
38
|
+
<requestHeaders>false</requestHeaders>
|
39
|
+
<responseDataOnError>false</responseDataOnError>
|
40
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
41
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
42
|
+
<bytes>true</bytes>
|
43
|
+
<threadCounts>true</threadCounts>
|
44
|
+
<sampleCount>true</sampleCount>
|
45
|
+
</value>
|
46
|
+
</objProp>
|
47
|
+
<stringProp name="filename"/>
|
48
|
+
</ResultCollector>)
|
49
|
+
EOS
|
50
|
+
update params
|
51
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def view_results_tree(params={}, &block)
|
4
|
+
node = JmeterRuby::ViewResultsTree.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class ViewResultsTree
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'ViewResultsTree' : (params[:name] || 'ViewResultsTree')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="#{testname}" enabled="true">
|
17
|
+
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
18
|
+
<objProp>
|
19
|
+
<name>saveConfig</name>
|
20
|
+
<value class="SampleSaveConfiguration">
|
21
|
+
<time>true</time>
|
22
|
+
<latency>true</latency>
|
23
|
+
<timestamp>true</timestamp>
|
24
|
+
<success>true</success>
|
25
|
+
<label>true</label>
|
26
|
+
<code>true</code>
|
27
|
+
<message>false</message>
|
28
|
+
<threadName>true</threadName>
|
29
|
+
<dataType>false</dataType>
|
30
|
+
<encoding>false</encoding>
|
31
|
+
<assertions>false</assertions>
|
32
|
+
<subresults>false</subresults>
|
33
|
+
<responseData>false</responseData>
|
34
|
+
<samplerData>false</samplerData>
|
35
|
+
<xml>false</xml>
|
36
|
+
<fieldNames>false</fieldNames>
|
37
|
+
<responseHeaders>false</responseHeaders>
|
38
|
+
<requestHeaders>false</requestHeaders>
|
39
|
+
<responseDataOnError>false</responseDataOnError>
|
40
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
41
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
42
|
+
<bytes>true</bytes>
|
43
|
+
<threadCounts>true</threadCounts>
|
44
|
+
<sampleCount>true</sampleCount>
|
45
|
+
</value>
|
46
|
+
</objProp>
|
47
|
+
<stringProp name="filename"/>
|
48
|
+
</ResultCollector>)
|
49
|
+
EOS
|
50
|
+
update params
|
51
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def while_controller(params={}, &block)
|
4
|
+
node = JmeterRuby::WhileController.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class WhileController
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'WhileController' : (params[:name] || 'WhileController')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<WhileController guiclass="WhileControllerGui" testclass="WhileController" testname="#{testname}" enabled="true">
|
17
|
+
<stringProp name="WhileController.condition"/>
|
18
|
+
</WhileController>)
|
19
|
+
EOS
|
20
|
+
update params
|
21
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def xml_assertion(params={}, &block)
|
4
|
+
node = JmeterRuby::XmlAssertion.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class XmlAssertion
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'XmlAssertion' : (params[:name] || 'XmlAssertion')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="#{testname}" enabled="true"/>)
|
17
|
+
EOS
|
18
|
+
update params
|
19
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def xml_schema_assertion(params={}, &block)
|
4
|
+
node = JmeterRuby::XmlSchemaAssertion.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class XmlSchemaAssertion
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'XmlSchemaAssertion' : (params[:name] || 'XmlSchemaAssertion')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<XMLSchemaAssertion guiclass="XMLSchemaAssertionGUI" testclass="XMLSchemaAssertion" testname="#{testname}" enabled="true">
|
17
|
+
<stringProp name="xmlschema_assertion_filename"/>
|
18
|
+
</XMLSchemaAssertion>)
|
19
|
+
EOS
|
20
|
+
update params
|
21
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def xpath_assertion(params={}, &block)
|
4
|
+
node = JmeterRuby::XpathAssertion.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class XpathAssertion
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'XpathAssertion' : (params[:name] || 'XpathAssertion')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="#{testname}" enabled="true">
|
17
|
+
<boolProp name="XPath.negate">false</boolProp>
|
18
|
+
<stringProp name="XPath.xpath">/</stringProp>
|
19
|
+
<boolProp name="XPath.validate">false</boolProp>
|
20
|
+
<boolProp name="XPath.whitespace">false</boolProp>
|
21
|
+
<boolProp name="XPath.tolerant">false</boolProp>
|
22
|
+
<boolProp name="XPath.namespace">false</boolProp>
|
23
|
+
<stringProp name="Assertion.scope">all</stringProp>
|
24
|
+
</XPathAssertion>)
|
25
|
+
EOS
|
26
|
+
update params
|
27
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class DSL
|
3
|
+
def xpath_extractor(params={}, &block)
|
4
|
+
node = JmeterRuby::XpathExtractor.new(params)
|
5
|
+
attach_node(node, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class XpathExtractor
|
10
|
+
attr_accessor :doc
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
def initialize(params={})
|
14
|
+
testname = params.kind_of?(Array) ? 'XpathExtractor' : (params[:name] || 'XpathExtractor')
|
15
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
16
|
+
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="#{testname}" enabled="true">
|
17
|
+
<stringProp name="XPathExtractor.default"/>
|
18
|
+
<stringProp name="XPathExtractor.refname"/>
|
19
|
+
<stringProp name="XPathExtractor.xpathQuery"/>
|
20
|
+
<boolProp name="XPathExtractor.validate">false</boolProp>
|
21
|
+
<boolProp name="XPathExtractor.tolerant">false</boolProp>
|
22
|
+
<boolProp name="XPathExtractor.namespace">false</boolProp>
|
23
|
+
<stringProp name="Sample.scope">all</stringProp>
|
24
|
+
</XPathExtractor>)
|
25
|
+
EOS
|
26
|
+
update params
|
27
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class ExtendedDSL < DSL
|
3
|
+
include Parser
|
4
|
+
attr_accessor :root
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
@root = Nokogiri::XML(<<-EOF.strip_heredoc)
|
8
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
+
<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1" jmeter-ruby="3.0">
|
10
|
+
<hashTree>
|
11
|
+
</hashTree>
|
12
|
+
</jmeterTestPlan>
|
13
|
+
EOF
|
14
|
+
node = JmeterRuby::TestPlan.new(params)
|
15
|
+
|
16
|
+
@current_node = @root.at_xpath('//jmeterTestPlan/hashTree')
|
17
|
+
@current_node = attach_to_last(node)
|
18
|
+
end
|
19
|
+
|
20
|
+
def out(params = {})
|
21
|
+
puts doc.to_xml(indent: 2)
|
22
|
+
end
|
23
|
+
|
24
|
+
def jmx(params = {})
|
25
|
+
file(params)
|
26
|
+
logger.info "Test plan saved to: #{params[:file]}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_xml
|
30
|
+
doc.to_xml(indent: 2)
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_doc
|
34
|
+
doc.clone
|
35
|
+
end
|
36
|
+
|
37
|
+
def run(params = {})
|
38
|
+
file(params)
|
39
|
+
logger.warn 'Test executing locally ...'
|
40
|
+
|
41
|
+
cmd = "#{params[:path] ? File.join(params[:path], 'jmeter') : 'jmeter'} #{"-n" unless params[:gui] } -t #{params[:file]} -j #{params[:log] ? params[:log] : 'jmeter.log' } -l #{params[:jtl] ? params[:jtl] : 'jmeter.jtl' } #{build_properties(params[:properties]) if params[:properties]}"
|
42
|
+
logger.debug cmd if params[:debug]
|
43
|
+
Open3.popen2e("#{cmd}") do |stdin, stdout_err, wait_thr|
|
44
|
+
while line = stdout_err.gets
|
45
|
+
logger.debug line.chomp if params[:debug]
|
46
|
+
end
|
47
|
+
|
48
|
+
exit_status = wait_thr.value
|
49
|
+
abort "FAILED !!! #{cmd}" unless exit_status.success?
|
50
|
+
end
|
51
|
+
logger.info "Local Results at: #{params[:jtl] ? params[:jtl] : 'jmeter.jtl'}"
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def hash_tree
|
57
|
+
Nokogiri::XML::Node.new("hashTree", @root)
|
58
|
+
end
|
59
|
+
|
60
|
+
def attach_to_last(node)
|
61
|
+
ht = hash_tree
|
62
|
+
last_node = @current_node
|
63
|
+
last_node << node.doc.children << ht
|
64
|
+
ht
|
65
|
+
end
|
66
|
+
|
67
|
+
def attach_node(node, &block)
|
68
|
+
ht = attach_to_last(node)
|
69
|
+
previous = @current_node
|
70
|
+
@current_node = ht
|
71
|
+
instance_exec(&block) if block
|
72
|
+
@current_node = previous
|
73
|
+
end
|
74
|
+
|
75
|
+
def file(params = {})
|
76
|
+
params[:file] ||= 'jmeter-ruby.jmx'
|
77
|
+
File.open(params[:file], 'w') { |file| file.write(doc.to_xml(indent: 2)) }
|
78
|
+
end
|
79
|
+
|
80
|
+
def doc
|
81
|
+
Nokogiri::XML(@root.to_s, &:noblanks)
|
82
|
+
end
|
83
|
+
|
84
|
+
def build_properties(properties)
|
85
|
+
if properties.kind_of?(String)
|
86
|
+
"-q #{properties}"
|
87
|
+
elsif properties.kind_of?(Hash)
|
88
|
+
properties.map{ |k,v| "-J#{k}=#{v}" }.join(" ")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def logger
|
93
|
+
@log ||= Logger.new(STDOUT)
|
94
|
+
@log.level = Logger::DEBUG
|
95
|
+
@log
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test(params = {}, &block)
|
101
|
+
JmeterRuby.dsl_eval(JmeterRuby::ExtendedDSL.new(params), &block)
|
102
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module JmeterRuby
|
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 = JmeterRuby::Plugins::JsonPathAssertion.new(params)
|
11
|
+
end
|
12
|
+
|
13
|
+
node ||= JmeterRuby::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,12 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class ExtendedDSL < DSL
|
3
|
+
def http_cache_manager(params = {}, &block)
|
4
|
+
params[:clearEachIteration] = true if params.keys.include? :clear_each_iteration
|
5
|
+
params[:useExpires] = true if params.keys.include? :use_expires
|
6
|
+
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
alias cache http_cache_manager
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JmeterRuby
|
4
|
+
class ExtendedDSL < DSL
|
5
|
+
def http_cookie_manager(params = {}, &block)
|
6
|
+
params[:clearEachIteration] = true if params.keys.include? :clear_each_iteration
|
7
|
+
|
8
|
+
node = JmeterRuby::HttpCookieManager.new(params)
|
9
|
+
|
10
|
+
params[:user_defined_cookies]&.each { |cookie| add_cookie_to_collection(cookie, node) }
|
11
|
+
|
12
|
+
attach_node(node, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
alias cookies http_cookie_manager
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def add_cookie_to_collection(cookie, node)
|
20
|
+
raise 'Cookie name must be provided.' unless cookie[:name]
|
21
|
+
raise 'Cookie value must be provided.' unless cookie[:value]
|
22
|
+
node.doc.at_xpath('//collectionProp') <<
|
23
|
+
Nokogiri::XML(<<-EOS.strip_heredoc).children
|
24
|
+
<elementProp name="#{cookie[:name]}" elementType="Cookie" testname="#{cookie[:name]}">
|
25
|
+
<stringProp name="Cookie.value">#{cookie[:value]}</stringProp>
|
26
|
+
<stringProp name="Cookie.domain">#{cookie[:domain]}</stringProp>
|
27
|
+
<stringProp name="Cookie.path">#{cookie[:path]}</stringProp>
|
28
|
+
<boolProp name="Cookie.secure">#{cookie[:secure] || false}</boolProp>
|
29
|
+
<longProp name="Cookie.expires">0</longProp>
|
30
|
+
<boolProp name="Cookie.path_specified">true</boolProp>
|
31
|
+
<boolProp name="Cookie.domain_specified">true</boolProp>
|
32
|
+
</elementProp>
|
33
|
+
EOS
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module JmeterRuby
|
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 = JmeterRuby::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
|
+
node.doc.children.first.add_child (
|
22
|
+
Nokogiri::XML(<<-EOS.strip_heredoc).children
|
23
|
+
<stringProp name="HTTPSampler.proxyHost">#{params[:proxy_host]}</stringProp>
|
24
|
+
EOS
|
25
|
+
) if params[:proxy_host]
|
26
|
+
|
27
|
+
node.doc.children.first.add_child (
|
28
|
+
Nokogiri::XML(<<-EOS.strip_heredoc).children
|
29
|
+
<stringProp name="HTTPSampler.proxyPort">#{params[:proxy_port]}</stringProp>
|
30
|
+
EOS
|
31
|
+
) if params[:proxy_port]
|
32
|
+
end
|
33
|
+
|
34
|
+
attach_node(node, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
alias defaults http_request_defaults
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module JmeterRuby
|
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
|