Class: JmeterPerf::ExtendedDSL
- Inherits:
-
DSL
- Object
- DSL
- JmeterPerf::ExtendedDSL
show all
- Includes:
- Helpers::Parser
- Defined in:
- lib/jmeter_perf.rb,
lib/jmeter_perf/extend/misc/uuid.rb,
lib/jmeter_perf/extend/misc/rsync.rb,
lib/jmeter_perf/extend/misc/exists.rb,
lib/jmeter_perf/extend/misc/with_helpers.rb,
lib/jmeter_perf/extend/processors/extract.rb,
lib/jmeter_perf/extend/timers/random_timer.rb,
lib/jmeter_perf/extend/threads/thread_group.rb,
lib/jmeter_perf/extend/samplers/http_request.rb,
lib/jmeter_perf/extend/plugins/jmeter_plugins.rb,
lib/jmeter_perf/extend/samplers/jms_pointtopoint.rb,
lib/jmeter_perf/extend/controllers/loop_controller.rb,
lib/jmeter_perf/extend/samplers/soapxmlrpc_request.rb,
lib/jmeter_perf/extend/assertions/response_assertion.rb,
lib/jmeter_perf/extend/controllers/module_controller.rb,
lib/jmeter_perf/extend/config_elements/header_manager.rb,
lib/jmeter_perf/extend/controllers/foreach_controller.rb,
lib/jmeter_perf/extend/config_elements/user_parameters.rb,
lib/jmeter_perf/extend/timers/constant_throughput_timer.rb,
lib/jmeter_perf/extend/controllers/throughput_controller.rb,
lib/jmeter_perf/extend/config_elements/http_cache_manager.rb,
lib/jmeter_perf/extend/controllers/transaction_controller.rb,
lib/jmeter_perf/extend/config_elements/http_cookie_manager.rb,
lib/jmeter_perf/extend/config_elements/http_request_defaults.rb,
lib/jmeter_perf/extend/config_elements/user_defined_variables.rb,
lib/jmeter_perf/extend/processors/regular_expression_extractor.rb
Overview
DSL class for defining JMeter test plans. Provides methods to generate, save, and run JMeter tests.
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#active_threads_over_time(params = {}) ⇒ Object
(also: #active_threads)
-
#composite_graph(params = {}) ⇒ Object
(also: #composite)
-
#console_status_logger(params = {}) ⇒ Object
(also: #console)
-
#constant_throughput_timer(params) ⇒ Object
-
#dummy_sampler(params = {}) ⇒ Object
(also: #dummy)
-
#exists(variable) ⇒ Object
-
#extract(params) ⇒ Object
(also: #web_reg_save_param)
-
#foreach_controller(params = {}) ⇒ Object
-
#http_cache_manager(params = {}, &block) ⇒ Object
(also: #cache)
-
#http_cookie_manager(params = {}) ⇒ Object
(also: #cookies)
-
#http_header_manager(params, &block) ⇒ Object
(also: #header)
-
#http_request(*args) ⇒ Object
(also: #request, #get, #visit, #post, #submit, #delete, #patch, #put, #head)
-
#http_request_defaults(params = {}) ⇒ Object
(also: #defaults)
-
#http_request_node(params) ⇒ Object
-
#initialize(params = {}) ⇒ ExtendedDSL
constructor
Initializes an ExtendedDSL object with the provided parameters.
-
#jms_pointtopoint(params, &block) ⇒ Object
-
#jmx(out_jmx: "jmeter_perf.jmx") ⇒ Object
Saves the test plan as a JMX file.
-
#jmx_collector(params = {}) ⇒ Object
-
#latencies_over_time(params = {}) ⇒ Object
-
#loadosophia_uploader(params = {}) ⇒ Object
(also: #loadosophia)
-
#loop_controller(params, &block) ⇒ Object
(also: #loops)
-
#module_controller(params) ⇒ Object
-
#perfmon_collector(params = {}) ⇒ Object
(also: #perfmon)
-
#random_timer(delay = 0, range = 0) ⇒ Object
(also: #think_time)
-
#redis_data_set(params = {}) ⇒ Object
-
#regular_expression_extractor(params) ⇒ Object
(also: #regex)
-
#response_assertion(params) ⇒ Object
(also: #assert, #web_reg_find)
-
#response_codes_per_second(params = {}) ⇒ Object
-
#response_times_distribution(params = {}) ⇒ Object
-
#response_times_over_time(params = {}) ⇒ Object
-
#response_times_percentiles(params = {}) ⇒ Object
-
#rsync(params = {}) ⇒ Object
-
#run(name: "jmeter_perf", jmeter_path: "jmeter", out_jmx: "jmeter_perf.jmx", out_jtl: "jmeter.jtl", out_jmeter_log: "jmeter.log", out_cmd_log: "jmeter-cmd.log", jtl_read_timeout: 3) ⇒ JmeterPerf::Report::Summary
Runs the test plan with the specified configuration.
-
#soapxmlrpc_request(params, &block) ⇒ Object
(also: #soap)
-
#stepping_thread_group(params = {}) ⇒ Object
(also: #step)
-
#thread_group(*args) ⇒ Object
(also: #threads)
-
#throughput_controller(params = {}) ⇒ Object
(also: #throughput)
-
#throughput_shaper(params = {}) ⇒ Object
(also: #shaper)
-
#transaction_controller(*args) ⇒ Object
(also: #transaction)
-
#transactions_per_second(params = {}) ⇒ Object
-
#ultimate_thread_group(params = {}) ⇒ Object
(also: #ultimate)
-
#user_defined_variables(params, &block) ⇒ Object
(also: #variables)
-
#user_parameters(params, &block) ⇒ Object
(also: #parameters)
-
#uuid_per_iteration(params = {}, &block) ⇒ Object
-
#with_browser(device) ⇒ Object
-
#with_gzip ⇒ Object
-
#with_json ⇒ Object
-
#with_user_agent(device) ⇒ Object
-
#with_xhr ⇒ Object
Methods inherited from DSL
#access_log_sampler, #aggregate_graph, #aggregate_report, #ajp13_sampler, #assertion_results, #bean_shell_assertion, #bean_shell_listener, #bean_shell_postprocessor, #bean_shell_preprocessor, #bean_shell_sampler, #bean_shell_timer, #bsf_assertion, #bsf_listener, #bsf_postprocessor, #bsf_preprocessor, #bsf_sampler, #bsf_timer, #compare_assertion, #comparison_assertion_visualizer, #constant_timer, #counter, #css_jquery_extractor, #csv_data_set_config, #debug_postprocessor, #debug_sampler, #distribution_graphalpha, #duration_assertion, #for_each_controller, #ftp_request, #ftp_request_defaults, #gaussian_random_timer, #generate_summary_results, #graph_results, #html_assertion, #html_link_parser, #html_parameter_mask, #http_authorization_manager, #http_url_rewriting_modifier, #if_controller, #include_controller, #j_unit_request, #java_request, #java_request_defaults, #jdbc_connection_configuration, #jdbc_postprocessor, #jdbc_preprocessor, #jdbc_request, #jms_pointto_point, #jms_publisher, #jms_subscriber, #json_path_postprocessor, #jsr223_assertion, #jsr223_listener, #jsr223_postprocessor, #jsr223_preprocessor, #jsr223_sampler, #jsr223_timer, #keystore_configuration, #ldap_extended_request, #ldap_extended_request_defaults, #ldap_request, #ldap_request_defaults, #login_config_element, #mail_reader_sampler, #mailer_visualizer, #md5_hex_assertion, #monitor_results, #once_only_controller, #os_process_sampler, #poisson_random_timer, #random_controller, #random_order_controller, #random_variable, #recording_controller, #reg_ex_user_parameters, #response_time_graph, #result_status_action_handler, #runtime_controller, #save_responses_to_a_file, #simple_config_element, #simple_controller, #simple_data_writer, #smime_assertion, #smtp_sampler, #soap_xml_rpc_request, #spline_visualizer, #summary_report, #switch_controller, #synchronizing_timer, #tcp_sampler, #tcp_sampler_config, #test_action, #test_fragment, #test_plan, #uniform_random_timer, #view_results_in_table, #view_results_tree, #while_controller, #x_path_assertion, #x_path_extractor, #xml_assertion, #xml_schema_assertion
Constructor Details
#initialize(params = {}) ⇒ ExtendedDSL
Initializes an ExtendedDSL object with the provided parameters.
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/jmeter_perf.rb', line 60
def initialize(params = {})
@root = Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOF
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1" jmeterperf="#{JmeterPerf::VERSION}">
<hashTree>
</hashTree>
</jmeterTestPlan>
EOF
))
node = JmeterPerf::DSL::TestPlan.new(params)
@current_node = @root.at_xpath("//jmeterTestPlan/hashTree")
@current_node = attach_to_last(node)
end
|
Instance Attribute Details
#root ⇒ Object
Returns the value of attribute root.
56
57
58
|
# File 'lib/jmeter_perf.rb', line 56
def root
@root
end
|
Instance Method Details
#active_threads_over_time(params = {}) ⇒ Object
Also known as:
active_threads
93
94
95
96
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 93
def active_threads_over_time(params = {}, &)
node = JmeterPerf::Plugins::ActiveThreadsOverTime.new(params)
attach_node(node, &)
end
|
#composite_graph(params = {}) ⇒ Object
Also known as:
composite
86
87
88
89
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 86
def composite_graph(params = {}, &)
node = JmeterPerf::Plugins::CompositeGraph.new(params)
attach_node(node, &)
end
|
#console_status_logger(params = {}) ⇒ Object
Also known as:
console
33
34
35
36
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 33
def console_status_logger(params = {}, &)
node = JmeterPerf::Plugins::ConsoleStatusLogger.new(params)
attach_node(node, &)
end
|
#constant_throughput_timer(params) ⇒ Object
3
4
5
6
7
8
9
|
# File 'lib/jmeter_perf/extend/timers/constant_throughput_timer.rb', line 3
def constant_throughput_timer(params, &)
params[:value] ||= params[:throughput] || 0.0
node = JmeterPerf::DSL::ConstantThroughputTimer.new(params)
node.doc.xpath('//stringProp[@name="throughput"]').first.content = params[:value]
attach_node(node, &)
end
|
#dummy_sampler(params = {}) ⇒ Object
Also known as:
dummy
47
48
49
50
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 47
def dummy_sampler(params = {}, &)
node = JmeterPerf::Plugins::DummySampler.new(params)
attach_node(node, &)
end
|
#exists(variable) ⇒ Object
3
4
5
6
7
8
9
10
11
|
# File 'lib/jmeter_perf/extend/misc/exists.rb', line 3
def exists(variable, &)
params ||= {}
params[:condition] = "\"${#{variable}}\" != \"\\${#{variable}}\""
params[:useExpression] = false
params[:name] = "if ${#{variable}}"
node = JmeterPerf::DSL::IfController.new(params)
attach_node(node, &)
end
|
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/jmeter_perf/extend/processors/extract.rb', line 3
def (params, &)
node = if params[:regex]
params[:refname] = params[:name]
params[:template] = params[:template] || "$1$"
JmeterPerf::RegularExpressionExtractor.new(params)
elsif params[:xpath]
params[:refname] = params[:name]
params[:xpathQuery] = params[:xpath]
JmeterPerf::XpathExtractor.new(params)
elsif params[:json]
params[:VAR] = params[:name]
params[:JSONPATH] = params[:json]
JmeterPerf::Plugins::JsonPathExtractor.new(params)
elsif params[:css]
params[:refname] = params[:name]
params[:expr] = params[:css]
JmeterPerf::CssjqueryExtractor.new(params)
end
attach_node(node, &)
end
|
#foreach_controller(params = {}) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/jmeter_perf/extend/controllers/foreach_controller.rb', line 3
def foreach_controller(params = {}, &)
node = JmeterPerf::ForeachController.new(params).tap do |node|
if params[:start_index]
params[:startIndex] = params[:start_index]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="ForeachController.startIndex"/>
EOS
)).children
)
end
if params[:end_index]
params[:endIndex] = params[:end_index]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="ForeachController.endIndex"/>
EOS
)).children
)
end
end
attach_node(node, &)
end
|
#http_cache_manager(params = {}, &block) ⇒ Object
Also known as:
cache
3
4
5
6
7
8
|
# File 'lib/jmeter_perf/extend/config_elements/http_cache_manager.rb', line 3
def http_cache_manager(params = {}, &block)
params[:clearEachIteration] = true if params.key? :clear_each_iteration
params[:useExpires] = true if params.key? :use_expires
super
end
|
#http_cookie_manager(params = {}) ⇒ Object
Also known as:
cookies
5
6
7
8
9
10
11
12
13
|
# File 'lib/jmeter_perf/extend/config_elements/http_cookie_manager.rb', line 5
def http_cookie_manager(params = {}, &)
params[:clearEachIteration] = true if params.key? :clear_each_iteration
node = JmeterPerf::DSL::HTTPCookieManager.new(params)
params[:user_defined_cookies]&.each { |cookie| add_cookie_to_collection(cookie, node) }
attach_node(node, &)
end
|
3
4
5
6
7
8
9
|
# File 'lib/jmeter_perf/extend/config_elements/header_manager.rb', line 3
def (params, &block)
if params.is_a?(Hash)
params["Header.name"] = params[:name]
end
super
end
|
#http_request(*args) ⇒ Object
Also known as:
request, get, visit, post, submit, delete, patch, put, head
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/jmeter_perf/extend/samplers/http_request.rb', line 3
def http_request(*args, &)
params = args.shift || {}
params = {url: params}.merge(args.shift || {}) if params.is_a?(String)
params[:method] ||= case __callee__.to_s
when "visit"
"GET"
when "submit"
"POST"
else
__callee__.to_s.upcase
end
params[:name] ||= params[:url]
parse_http_request(params)
if params[:sample]
transaction name: params[:name], parent: true do
loops count: params[:sample].to_i do
params.delete(:sample)
attach_node(http_request_node(params), &block)
end
end
else
attach_node(http_request_node(params), &)
end
end
|
#http_request_defaults(params = {}) ⇒ Object
Also known as:
defaults
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/jmeter_perf/extend/config_elements/http_request_defaults.rb', line 3
def http_request_defaults(params = {}, &)
params[:image_parser] = true if params.key? :download_resources
params[:concurrentDwn] = true if params.key? :use_concurrent_pool
params[:concurrentPool] = params[:use_concurrent_pool] if params.key? :use_concurrent_pool
node = JmeterPerf::DSL::HTTPRequestDefaults.new(params).tap do |node|
if params[:urls_must_match]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="HTTPSampler.embedded_url_re">#{params[:urls_must_match]}</stringProp>
EOS
)).children
)
end
if params[:md5]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<boolProp name="HTTPSampler.md5">true</stringProp>
EOS
)).children
)
end
if params[:proxy_host]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="HTTPSampler.proxyHost">#{params[:proxy_host]}</stringProp>
EOS
)).children
)
end
if params[:proxy_port]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="HTTPSampler.proxyPort">#{params[:proxy_port]}</stringProp>
EOS
)).children
)
end
end
attach_node(node, &)
end
|
#http_request_node(params) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/jmeter_perf/extend/samplers/http_request.rb', line 32
def http_request_node(params)
JmeterPerf::DSL::HTTPRequest.new(params).tap do |node|
if params[:implementation]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="HTTPSampler.implementation">#{params[:implementation]}</stringProp>
EOS
)).children
)
end
if params[:comments]
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="TestPlan.comments">#{params[:]}</stringProp>
EOS
)).children
)
end
end
end
|
#jms_pointtopoint(params, &block) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/jmeter_perf/extend/samplers/jms_pointtopoint.rb', line 3
def jms_pointtopoint(params, &block)
JmeterPerf::JmsPointtopoint.new(params).tap do |node|
params[:jndi_properties]&.each do |property_name, property_value|
node.doc.xpath("//collectionProp").first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<elementProp name="#{property_name}" elementType="Argument">
<stringProp name="Argument.name">#{property_name}</stringProp>
<stringProp name="Argument.value">#{property_value}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
EOS
)).children
)
end
attach_node(node, &block)
end
end
|
#jmx(out_jmx: "jmeter_perf.jmx") ⇒ Object
Saves the test plan as a JMX file.
78
79
80
81
|
# File 'lib/jmeter_perf.rb', line 78
def jmx(out_jmx: "jmeter_perf.jmx")
File.write(out_jmx, doc.to_xml(indent: 2))
logger.info "JMX saved to: #{out_jmx}"
end
|
#jmx_collector(params = {}) ⇒ Object
119
120
121
122
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 119
def jmx_collector(params = {}, &)
node = JmeterPerf::Plugins::JMXCollector.new(params)
attach_node(node, &)
end
|
#latencies_over_time(params = {}) ⇒ Object
28
29
30
31
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 28
def latencies_over_time(params = {}, &)
node = JmeterPerf::Plugins::LatenciesOverTime.new(params)
attach_node(node, &)
end
|
#loadosophia_uploader(params = {}) ⇒ Object
Also known as:
loadosophia
107
108
109
110
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 107
def loadosophia_uploader(params = {}, &)
node = JmeterPerf::Plugins::LoadosophiaUploader.new(params)
attach_node(node, &)
end
|
#loop_controller(params, &block) ⇒ Object
Also known as:
loops
3
4
5
6
7
|
# File 'lib/jmeter_perf/extend/controllers/loop_controller.rb', line 3
def loop_controller(params, &block)
params[:loops] = params[:count] || 1
super
end
|
#module_controller(params) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/jmeter_perf/extend/controllers/module_controller.rb', line 3
def module_controller(params, &)
node = JmeterPerf::DSL::ModuleController.new(params)
if params[:test_fragment]
params[:test_fragment].is_a?(String) &&
params[:test_fragment].split("/")
elsif params[:node_path]
params[:node_path]
else
[]
end.each_with_index do |node_name, index|
node.doc.at_xpath("//collectionProp") << Nokogiri::XML(
JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="node_#{index}">#{node_name}</stringProp>
EOS
)
).children
end
attach_node(node, &)
end
|
#perfmon_collector(params = {}) ⇒ Object
Also known as:
perfmon
100
101
102
103
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 100
def perfmon_collector(params = {}, &)
node = JmeterPerf::Plugins::PerfmonCollector.new(params)
attach_node(node, &)
end
|
#random_timer(delay = 0, range = 0) ⇒ Object
Also known as:
think_time
3
4
5
6
7
8
9
10
|
# File 'lib/jmeter_perf/extend/timers/random_timer.rb', line 3
def random_timer(delay = 0, range = 0, &)
params = {}
params[:delay] = delay
params[:range] = range
node = JmeterPerf::GaussianRandomTimer.new(params)
attach_node(node, &)
end
|
#redis_data_set(params = {}) ⇒ Object
114
115
116
117
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 114
def redis_data_set(params = {}, &)
node = JmeterPerf::Plugins::RedisDataSet.new(params)
attach_node(node, &)
end
|
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/jmeter_perf/extend/processors/regular_expression_extractor.rb', line 3
def (params, &)
params[:refname] = params[:name]
params[:regex] = params[:pattern]
params[:template] = params[:template] || "$1$"
node = JmeterPerf::DSL::RegularExpressionExtractor.new(params).tap do |node|
if params[:variable]
node.doc.xpath("//stringProp[@name='Sample.scope']").first.content = "variable"
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="Scope.variable">#{params[:variable]}</stringProp>
EOS
)).children
)
end
end
attach_node(node, &)
end
|
#response_assertion(params) ⇒ Object
Also known as:
assert, web_reg_find
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/jmeter_perf/extend/assertions/response_assertion.rb', line 3
def response_assertion(params, &)
params[:test_type] = parse_test_type(params)
params["0"] = params.values.first
if params[:json]
params[:EXPECTED_VALUE] = params[:value]
params[:JSON_PATH] = params[:json]
node = JmeterPerf::Plugins::JsonPathAssertion.new(params)
end
node ||= JmeterPerf::DSL::ResponseAssertion.new(params).tap do |node|
if params[:variable]
params["Scope.variable"] = params[:variable]
node.doc.xpath("//stringProp[@name='Assertion.scope']").first.content = "variable"
node.doc.children.first.add_child(
Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<stringProp name="Scope.variable">#{params[:variable]}</stringProp>
EOS
)).children
)
end
if params[:scope] == "main"
node.doc.xpath("//stringProp[@name='Assertion.scope']").remove
end
end
attach_node(node, &)
end
|
#response_codes_per_second(params = {}) ⇒ Object
#response_times_distribution(params = {}) ⇒ Object
#response_times_over_time(params = {}) ⇒ Object
13
14
15
16
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 13
def response_times_over_time(params = {}, &)
node = JmeterPerf::Plugins::ResponseTimesOverTime.new(params)
attach_node(node, &)
end
|
#response_times_percentiles(params = {}) ⇒ Object
#rsync(params = {}) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/jmeter_perf/extend/misc/rsync.rb', line 3
def rsync(params = {})
logger.warn "Test file upload via rsync ..."
file(params)
cmd = "#{params[:rsync_bin_path]} #{params[:rsync_params]} #{params[:file]} #{params[:remote_user]}@#{params[:remote_host]}:#{params[:remote_path]}"
logger.debug cmd if params[:debug]
Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
while (line = stdout_err.gets)
logger.debug line.chomp if params[:debug]
end
exit_status = wait_thr.value
abort "Sorry there was an error: #{cmd}" unless exit_status.success?
end
logger.info "Upload complete at: #{params[:remote_host]}:#{params[:remote_path]}"
end
|
#run(name: "jmeter_perf", jmeter_path: "jmeter", out_jmx: "jmeter_perf.jmx", out_jtl: "jmeter.jtl", out_jmeter_log: "jmeter.log", out_cmd_log: "jmeter-cmd.log", jtl_read_timeout: 3) ⇒ JmeterPerf::Report::Summary
Runs the test plan with the specified configuration.
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/jmeter_perf.rb', line 94
def run(
name: "jmeter_perf",
jmeter_path: "jmeter",
out_jmx: "jmeter_perf.jmx",
out_jtl: "jmeter.jtl",
out_jmeter_log: "jmeter.log",
out_cmd_log: "jmeter-cmd.log",
jtl_read_timeout: 3
)
summary = nil
jmx(out_jmx:)
logger.warn "Executing #{out_jmx} test plan locally ..."
cmd = <<~CMD.strip
#{jmeter_path} -n -t #{out_jmx} -j #{out_jmeter_log} -l #{out_jtl}
CMD
summary = JmeterPerf::Report::Summary.new(file_path: out_jtl, name:, jtl_read_timeout:)
summary.stream_jtl_async
File.open(out_cmd_log, "w") do |f|
pid = Process.spawn(cmd, out: f, err: [:child, :out])
Process.waitpid(pid)
end
summary.finish!
unless $?.exitstatus.zero?
logger.error("Failed to run #{cmd}. See #{out_cmd_log} and #{out_jmeter_log} for details.")
raise "Exit status: #{$?.exitstatus}"
end
summary.summarize_data!
logger.info "[Test Plan Execution Completed Successfully] JTL saved to: #{out_jtl}\n"
summary
ensure
summary&.finish!
end
|
#soapxmlrpc_request(params, &block) ⇒ Object
Also known as:
soap
3
4
5
6
7
|
# File 'lib/jmeter_perf/extend/samplers/soapxmlrpc_request.rb', line 3
def soapxmlrpc_request(params, &block)
params[:method] ||= "POST"
super
end
|
#stepping_thread_group(params = {}) ⇒ Object
Also known as:
step
54
55
56
57
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 54
def stepping_thread_group(params = {}, &)
node = JmeterPerf::Plugins::SteppingThreadGroup.new(params)
attach_node(node, &)
end
|
#thread_group(*args) ⇒ Object
Also known as:
threads
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/jmeter_perf/extend/threads/thread_group.rb', line 3
def thread_group(*args, &)
params = args.shift || {}
params = {count: params}.merge(args.shift || {}) if params.is_a?(Integer)
params[:num_threads] = params[:count] || 1
params[:ramp_time] = params[:rampup] || (params[:num_threads] / 2.0).ceil
params[:start_time] = params[:start_time] || Time.now.to_i * 1000
params[:end_time] = params[:end_time] || Time.now.to_i * 1000
params[:duration] ||= 60
params[:continue_forever] ||= false
params[:loops] = -1 if params[:continue_forever]
node = JmeterPerf::DSL::ThreadGroup.new(params)
attach_node(node, &)
end
|
#throughput_controller(params = {}) ⇒ Object
Also known as:
throughput
3
4
5
6
7
8
9
10
11
|
# File 'lib/jmeter_perf/extend/controllers/throughput_controller.rb', line 3
def throughput_controller(params = {}, &)
params[:style] = 1 if params[:percent]
params[:maxThroughput] = params[:total] || params[:percent] || 1
node = JmeterPerf::ThroughputController.new(params)
node.doc.xpath(".//FloatProperty/value").first.content = params[:maxThroughput].to_f
attach_node(node, &)
end
|
#throughput_shaper(params = {}) ⇒ Object
Also known as:
shaper
#transaction_controller(*args) ⇒ Object
Also known as:
transaction
3
4
5
6
7
8
9
10
|
# File 'lib/jmeter_perf/extend/controllers/transaction_controller.rb', line 3
def transaction_controller(*args, &)
params = args.shift || {}
params = {name: params}.merge(args.shift || {}) if params.is_a?(String)
params[:parent] = params[:parent] || false
params[:includeTimers] = params[:include_timers] || false
node = JmeterPerf::DSL::TransactionController.new(params)
attach_node(node, &)
end
|
#transactions_per_second(params = {}) ⇒ Object
23
24
25
26
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 23
def transactions_per_second(params = {}, &)
node = JmeterPerf::Plugins::TransactionsPerSecond.new(params)
attach_node(node, &)
end
|
#ultimate_thread_group(params = {}) ⇒ Object
Also known as:
ultimate
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/jmeter_perf/extend/plugins/jmeter_plugins.rb', line 61
def ultimate_thread_group(params = {}, &)
node = JmeterPerf::Plugins::UltimateThreadGroup.new(params)
(params.is_a?(Array) ? params : params[:threads]).each_with_index do |group, index|
node.doc.at_xpath("//collectionProp").<<
Nokogiri::XML(
JmeterPerf::Helpers::String.strip_heredoc(
<<-EOS
<collectionProp name="index">
<stringProp name="#{group[:start_threads]}">#{group[:start_threads]}</stringProp>
<stringProp name="#{group[:initial_delay]}">#{group[:initial_delay]}</stringProp>
<stringProp name="#{group[:start_time]}">#{group[:start_time]}</stringProp>
<stringProp name="#{group[:hold_time]}">#{group[:hold_time]}</stringProp>
<stringProp name="#{group[:stop_time]}">#{group[:stop_time]}</stringProp>
</collectionProp>
EOS
)
).children
end
attach_node(node, &)
end
|
#user_defined_variables(params, &block) ⇒ Object
Also known as:
variables
3
4
5
6
7
8
9
|
# File 'lib/jmeter_perf/extend/config_elements/user_defined_variables.rb', line 3
def user_defined_variables(params, &block)
if params.is_a?(Hash)
params["Argument.name"] = params[:name]
end
super
end
|
#user_parameters(params, &block) ⇒ Object
Also known as:
parameters
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/jmeter_perf/extend/config_elements/user_parameters.rb', line 3
def user_parameters(params, &block)
params["Argument.name"] = params[:name] if params.is_a?(Hash)
params[:names] = Nokogiri::XML::Builder.new do |b|
b.builder do
params[:names].each do |name|
b.stringProp name, name: name
end
end
end
params[:thread_values] = Nokogiri::XML::Builder.new do |b|
b.builder do
params[:thread_values].map do |user, values|
b.collectionProp name: user do
values.each_with_index.map do |value, index|
b.stringProp value, name: index
end
end
end
end
end
super
end
|
#uuid_per_iteration(params = {}, &block) ⇒ Object
3
4
5
6
7
8
9
10
|
# File 'lib/jmeter_perf/extend/misc/uuid.rb', line 3
def uuid_per_iteration(params = {}, &block)
params[:name] ||= "__UUID"
params[:variable] ||= "UUID"
dummy_sampler name: params[:name], response_data: "${__UUID}" do
regex pattern: "(.*)", name: params[:variable], match_number: 1
end
end
|
#with_browser(device) ⇒ Object
7
8
9
10
11
12
13
|
# File 'lib/jmeter_perf/extend/misc/with_helpers.rb', line 7
def with_browser(device)
name: "User-Agent", value: JmeterPerf::Helpers::UserAgent.string(device)
[
{name: "Accept-Encoding", value: "gzip,deflate,sdch"},
{name: "Accept", value: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
]
end
|
#with_gzip ⇒ Object
19
20
21
|
# File 'lib/jmeter_perf/extend/misc/with_helpers.rb', line 19
def with_gzip
name: "Accept-Encoding", value: "gzip, deflate"
end
|
#with_json ⇒ Object
23
24
25
|
# File 'lib/jmeter_perf/extend/misc/with_helpers.rb', line 23
def with_json
name: "Accept", value: "text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8, application/json"
end
|
#with_user_agent(device) ⇒ Object
3
4
5
|
# File 'lib/jmeter_perf/extend/misc/with_helpers.rb', line 3
def with_user_agent(device)
name: "User-Agent", value: JmeterPerf::Helpers::UserAgent.string(device)
end
|
#with_xhr ⇒ Object
15
16
17
|
# File 'lib/jmeter_perf/extend/misc/with_helpers.rb', line 15
def with_xhr
name: "X-Requested-With", value: "XMLHttpRequest"
end
|