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,48 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
class Logger
|
4
|
+
module Colors
|
5
|
+
VERSION = '1.0.0'
|
6
|
+
|
7
|
+
NOTHING = '0;0'
|
8
|
+
BLACK = '0;30'
|
9
|
+
RED = '0;31'
|
10
|
+
GREEN = '0;32'
|
11
|
+
BROWN = '0;33'
|
12
|
+
BLUE = '0;34'
|
13
|
+
PURPLE = '0;35'
|
14
|
+
CYAN = '0;36'
|
15
|
+
LIGHT_GRAY = '0;37'
|
16
|
+
DARK_GRAY = '1;30'
|
17
|
+
LIGHT_RED = '1;31'
|
18
|
+
LIGHT_GREEN = '1;32'
|
19
|
+
YELLOW = '1;33'
|
20
|
+
LIGHT_BLUE = '1;34'
|
21
|
+
LIGHT_PURPLE = '1;35'
|
22
|
+
LIGHT_CYAN = '1;36'
|
23
|
+
WHITE = '1;37'
|
24
|
+
|
25
|
+
SCHEMA = {
|
26
|
+
STDOUT => %w[nothing green brown red purple cyan],
|
27
|
+
STDERR => %w[nothing green yellow light_red light_purple light_cyan],
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Logger
|
33
|
+
alias format_message_colorless format_message
|
34
|
+
|
35
|
+
def format_message(level, *args)
|
36
|
+
if Logger::Colors::SCHEMA[@logdev.dev]
|
37
|
+
color = begin
|
38
|
+
Logger::Colors.const_get \
|
39
|
+
Logger::Colors::SCHEMA[@logdev.dev][Logger.const_get(level.sub "ANY","UNKNOWN")].to_s.upcase
|
40
|
+
rescue NameError
|
41
|
+
"0;0"
|
42
|
+
end
|
43
|
+
"\e[#{ color }m#{ format_message_colorless(level, *args) }\e[0;0m"
|
44
|
+
else
|
45
|
+
format_message_colorless(level, *args)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
module Parser
|
3
|
+
|
4
|
+
def parse_http_request(params)
|
5
|
+
if params[:raw_path]
|
6
|
+
params[:path] = params[:url]
|
7
|
+
parse_url(params)
|
8
|
+
else
|
9
|
+
parse_url(params)
|
10
|
+
params[:fill_in] ||= {}
|
11
|
+
params[:params] && params[:params].split('&').each do |param|
|
12
|
+
name,value = param.split('=')
|
13
|
+
params[:fill_in][name] ||= []
|
14
|
+
params[:fill_in][name] << value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
fill_in(params) if params.has_key?(:fill_in)
|
19
|
+
raw_body(params) if params.has_key?(:raw_body)
|
20
|
+
files(params) if params.has_key?(:files)
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_url(params)
|
24
|
+
return if params[:url].empty?
|
25
|
+
if params[:url] =~ /https?:\/\/\$/ || params[:url][0] == '$'
|
26
|
+
params[:path] = params[:url] # special case for named expressions
|
27
|
+
else
|
28
|
+
uri = parse_uri(params[:url])
|
29
|
+
params[:port] ||= uri.port unless URI.parse(URI::Parser.new.escape(params[:url])).scheme.nil?
|
30
|
+
params[:protocol] ||= uri.scheme unless URI.parse(URI::Parser.new.escape(params[:url])).scheme.nil?
|
31
|
+
params[:domain] ||= uri.host
|
32
|
+
params[:path] ||= uri.path && URI::Parser.new.unescape(uri.path)
|
33
|
+
params[:params] ||= uri.query && URI::Parser.new.unescape(uri.query)
|
34
|
+
end
|
35
|
+
params.delete(:url)
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse_uri(uri)
|
39
|
+
URI.parse(URI::Parser.new.escape(uri)).scheme.nil? ?
|
40
|
+
URI.parse(URI::Parser.new.escape("http://#{uri}")) :
|
41
|
+
URI.parse(URI::Parser.new.escape(uri))
|
42
|
+
end
|
43
|
+
|
44
|
+
def fill_in(params)
|
45
|
+
params[:update_at_xpath] ||= []
|
46
|
+
params[:update_at_xpath] = params[:fill_in].
|
47
|
+
each_with_object(params[:update_at_xpath]) do |(name, values), memo|
|
48
|
+
Array(values).each do |value|
|
49
|
+
memo << {
|
50
|
+
:xpath => '//collectionProp',
|
51
|
+
:value => Nokogiri::XML(<<-EOF.strip_heredoc).children
|
52
|
+
<elementProp name="#{name}" elementType="HTTPArgument">
|
53
|
+
<boolProp name="HTTPArgument.always_encode">#{params[:always_encode] ? 'true' : false}</boolProp>
|
54
|
+
<stringProp name="Argument.value">#{value}</stringProp>
|
55
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
56
|
+
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
57
|
+
<stringProp name="Argument.name">#{name}</stringProp>
|
58
|
+
</elementProp>
|
59
|
+
EOF
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
params.delete(:fill_in)
|
64
|
+
end
|
65
|
+
|
66
|
+
def raw_body(params)
|
67
|
+
params[:update_at_xpath] ||= []
|
68
|
+
params[:update_at_xpath] << {
|
69
|
+
:xpath => '//HTTPSamplerProxy',
|
70
|
+
:value => Nokogiri::XML(<<-EOF.strip_heredoc).children
|
71
|
+
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
72
|
+
EOF
|
73
|
+
}
|
74
|
+
|
75
|
+
params[:update_at_xpath] << {
|
76
|
+
:xpath => '//collectionProp',
|
77
|
+
:value => Nokogiri::XML(<<-EOF.strip_heredoc).children
|
78
|
+
<elementProp name="" elementType="HTTPArgument">
|
79
|
+
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
80
|
+
<stringProp name="Argument.value">#{params[:raw_body].encode(:xml => :text)}</stringProp>
|
81
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
82
|
+
</elementProp>
|
83
|
+
EOF
|
84
|
+
}
|
85
|
+
params.delete(:raw_body)
|
86
|
+
end
|
87
|
+
|
88
|
+
def files(params)
|
89
|
+
files = params.delete(:files)
|
90
|
+
return if files.empty?
|
91
|
+
x = Nokogiri::XML::Builder.new do |b|
|
92
|
+
b.elementProp(name: "HTTPsampler.Files", elementType: "HTTPFileArgs") {
|
93
|
+
b.collectionProp(name: "HTTPFileArgs.files") {
|
94
|
+
files.each do |f|
|
95
|
+
b.elementProp(name: f[:path], elementType: "HTTPFileArg") {
|
96
|
+
b.stringProp f[:path] || '' , name: "File.path"
|
97
|
+
b.stringProp f[:paramname] || '' , name: "File.paramname"
|
98
|
+
b.stringProp f[:mimetype] || '' , name: "File.mimetype"
|
99
|
+
}
|
100
|
+
end
|
101
|
+
}
|
102
|
+
}
|
103
|
+
end
|
104
|
+
params[:update_at_xpath] ||= []
|
105
|
+
params[:update_at_xpath] << {
|
106
|
+
:xpath => '//HTTPSamplerProxy',
|
107
|
+
:value => x.doc.root
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
def parse_test_type(params)
|
112
|
+
case params.keys.first.to_s
|
113
|
+
when 'contains'
|
114
|
+
2
|
115
|
+
when 'not-contains'
|
116
|
+
6
|
117
|
+
when 'matches'
|
118
|
+
1
|
119
|
+
when 'not-matches'
|
120
|
+
5
|
121
|
+
when 'equals'
|
122
|
+
8
|
123
|
+
when 'not-equals'
|
124
|
+
12
|
125
|
+
when 'substring'
|
126
|
+
16
|
127
|
+
when 'not-substring'
|
128
|
+
20
|
129
|
+
else
|
130
|
+
2
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module JmeterRuby
|
2
|
+
class UserAgent
|
3
|
+
def initialize(device)
|
4
|
+
@common_devices = {
|
5
|
+
:iphone => 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3',
|
6
|
+
:ipod => 'Mozilla/5.0 (iPod; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3',
|
7
|
+
:ipad => 'Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3',
|
8
|
+
:safari_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25',
|
9
|
+
:safari_win => 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
|
10
|
+
:ie7 => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
|
11
|
+
:ie8 => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
|
12
|
+
:ie9 => 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
13
|
+
:chrome_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',
|
14
|
+
:chrome_win => 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',
|
15
|
+
:ff_osx => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0',
|
16
|
+
:ff_win => 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0',
|
17
|
+
:opera_osx => 'Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.62',
|
18
|
+
:opera_win => 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.62'
|
19
|
+
}
|
20
|
+
@device = device
|
21
|
+
end
|
22
|
+
|
23
|
+
def string
|
24
|
+
@common_devices[@device] || @common_devices[:chrome_osx]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This is an IDL script to translate a JMeter testplan into Ruby DSL objects
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
home = Pathname("..").expand_path(__FILE__)
|
7
|
+
dsl = File.join(home, "/dsl")
|
8
|
+
|
9
|
+
file = File.open File.join(home, "idl.xml")
|
10
|
+
doc = Nokogiri::XML file.read.gsub! /\n\s+/, ''
|
11
|
+
nodes = doc.xpath '//jmeterTestPlan/hashTree'
|
12
|
+
|
13
|
+
class String
|
14
|
+
def classify
|
15
|
+
return self if self !~ / / && self =~ /[A-Z]+.*/
|
16
|
+
split(' ').map{|e| e.capitalize}.join.gsub /[\(\)-\/\.]/, ''
|
17
|
+
end
|
18
|
+
|
19
|
+
def underscore
|
20
|
+
self.gsub(/::/, '/').
|
21
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
22
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
23
|
+
tr("-", "_").
|
24
|
+
downcase
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
results = []
|
29
|
+
doc.traverse do |node|
|
30
|
+
results << node if node.class !=
|
31
|
+
Nokogiri::XML::Document &&
|
32
|
+
node.attributes['testclass'] &&
|
33
|
+
node.name != 'elementProp'
|
34
|
+
end
|
35
|
+
|
36
|
+
methods = []
|
37
|
+
methods << "# JmeterRuby::DSL methods"
|
38
|
+
results.each do |element|
|
39
|
+
klass = element.attributes['testname'].to_s.classify
|
40
|
+
methods << "- #{element.attributes['testname'].to_s}\n `#{klass.underscore}`"
|
41
|
+
Dir.mkdir(dsl, 0700) unless Dir.exist? dsl
|
42
|
+
File.open("#{dsl}/#{klass.underscore}.rb", 'w') { |file| file.write(<<EOC)
|
43
|
+
module JmeterRuby
|
44
|
+
class DSL
|
45
|
+
def #{klass.underscore}(params={}, &block)
|
46
|
+
node = JmeterRuby::#{klass}.new(params)
|
47
|
+
attach_node(node, &block)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class #{klass}
|
52
|
+
attr_accessor :doc
|
53
|
+
include Helper
|
54
|
+
|
55
|
+
def initialize(params={})
|
56
|
+
testname = params.kind_of?(Array) ? '#{klass}' : (params[:name] || '#{klass}')
|
57
|
+
@doc = Nokogiri::XML(<<-EOS.strip_heredoc)
|
58
|
+
#{element.to_xml.gsub /testname=".+?"/, 'testname="#{testname}"'})
|
59
|
+
EOS
|
60
|
+
update params
|
61
|
+
update_at_xpath params if params.is_a?(Hash) && params[:update_at_xpath]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
EOC
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
File.open("#{home}/DSL.md", 'w') { |file| file.write methods.join("\n") }
|