ruby-jmeter 2.13.10 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -1
  5. data/Gemfile +2 -2
  6. data/LICENSE.txt +2 -2
  7. data/README.md +4 -5
  8. data/Rakefile +3 -3
  9. data/examples/{basic_os_process_sampler.rb → OS_process_sampler.rb} +1 -1
  10. data/examples/{basic_assertion_results.rb → assertion_results.rb} +1 -3
  11. data/examples/basic_auth.rb +1 -1
  12. data/examples/{basic_browser_headers.rb → browser_headers.rb} +1 -1
  13. data/examples/{basic_composite_graph.rb → composite_graph.rb} +1 -1
  14. data/examples/{basic_gc_dummy_sampler.rb → dummy_sampler.rb} +1 -3
  15. data/examples/{basic_duration_assertion.rb → duration_assertion.rb} +1 -1
  16. data/examples/etsy_login_browse.rb +1 -4
  17. data/examples/{basic_extract.rb → extract.rb} +1 -1
  18. data/examples/{basic_foreach.rb → foreach_controller.rb} +1 -4
  19. data/examples/{basic_header.rb → header_manager.rb} +2 -3
  20. data/examples/{basic_cache.rb → http_cache_manager.rb} +1 -1
  21. data/examples/{basic_cookies.rb → http_cookie_manager.rb} +1 -1
  22. data/examples/{basic_http_request_defaults.rb → http_request_defaults.rb} +3 -2
  23. data/examples/{basic_post.rb → http_request_post.rb} +1 -5
  24. data/examples/{basic_http_request_with_files.rb → http_request_with_files.rb} +1 -1
  25. data/examples/{basic_query_params.rb → http_request_with_query_params.rb} +1 -1
  26. data/examples/{basic_gc_results.rb → jmeter_plugins_graphs.rb} +1 -2
  27. data/examples/{basic_json_path_assertion.rb → json_path_assertions.rb} +1 -1
  28. data/examples/{basic_json_path_extractor.rb → json_path_extractor.rb} +1 -3
  29. data/examples/{basic_ldap_ext.rb → ldap_sampler.rb} +1 -1
  30. data/examples/{basic_loadosophia.rb → loadosophia.rb} +1 -1
  31. data/examples/{basic_loops.rb → loop_controller.rb} +2 -2
  32. data/examples/{basic_counter.rb → loops_with_counter.rb} +2 -2
  33. data/examples/{basic_perfmon.rb → perfmon.rb} +1 -1
  34. data/examples/real_page_objects.rb +1 -1
  35. data/examples/real_user_objects_github.rb +1 -1
  36. data/examples/regular_expression_extractor.rb +11 -0
  37. data/examples/{basic_assertion.rb → response_assertion.rb} +2 -1
  38. data/examples/{basic_response_time_percentiles_graph.rb → response_time_percentiles_graph.rb} +1 -2
  39. data/examples/{basic_simple_data_writer.rb → simple_data_writer_listener.rb} +1 -1
  40. data/examples/{basic_stepping_thread_group.rb → stepping_thread_group.rb} +1 -3
  41. data/examples/{basic_test_fragment.rb → test_fragment.rb} +1 -1
  42. data/examples/{basic_think_time.rb → think_time.rb} +2 -2
  43. data/examples/{basic_thread_groups.rb → thread_groups.rb} +1 -1
  44. data/examples/{basic_throughput_controller.rb → throughput_controller.rb} +1 -1
  45. data/examples/{basic_throughput_shaping_timer.rb → throughput_shaping_timer.rb} +1 -2
  46. data/examples/{basic_ultimate_thread_group.rb → ultimate_thread_group.rb} +1 -2
  47. data/examples/{basic_user_defined_variables.rb → user_defined_variables.rb} +1 -1
  48. data/examples/{basic_preprocessor_user_parameters.rb → user_parameters.rb} +7 -7
  49. data/lib/ruby-jmeter.rb +13 -8
  50. data/lib/ruby-jmeter/DSL.md +3 -1
  51. data/lib/ruby-jmeter/dsl.rb +11 -615
  52. data/lib/ruby-jmeter/dsl/foreach_controller.rb +0 -2
  53. data/lib/ruby-jmeter/dsl/html_parameter_mask.rb +3 -3
  54. data/lib/ruby-jmeter/dsl/http_request.rb +0 -2
  55. data/lib/ruby-jmeter/dsl/http_request_defaults.rb +0 -1
  56. data/lib/ruby-jmeter/dsl/jms_publisher.rb +2 -0
  57. data/lib/ruby-jmeter/dsl/regular_expression_extractor.rb +1 -3
  58. data/lib/ruby-jmeter/dsl/response_assertion.rb +0 -1
  59. data/lib/ruby-jmeter/dsl/test_fragment.rb +1 -1
  60. data/lib/ruby-jmeter/dsl/user_parameters.rb +3 -1
  61. data/lib/ruby-jmeter/extend/assertions/response_assertion.rb +36 -0
  62. data/lib/ruby-jmeter/extend/config_elements/header_manager.rb +13 -0
  63. data/lib/ruby-jmeter/extend/config_elements/http_cache_manager.rb +11 -0
  64. data/lib/ruby-jmeter/extend/config_elements/http_cookie_manager.rb +11 -0
  65. data/lib/ruby-jmeter/extend/config_elements/http_request_defaults.rb +28 -0
  66. data/lib/ruby-jmeter/extend/config_elements/user_defined_variables.rb +13 -0
  67. data/lib/ruby-jmeter/extend/config_elements/user_parameters.rb +31 -0
  68. data/lib/ruby-jmeter/extend/controllers/foreach_controller.rb +25 -0
  69. data/lib/ruby-jmeter/extend/controllers/loop_controller.rb +11 -0
  70. data/lib/ruby-jmeter/extend/controllers/module_controller.rb +23 -0
  71. data/lib/ruby-jmeter/extend/controllers/throughput_controller.rb +15 -0
  72. data/lib/ruby-jmeter/extend/controllers/transaction_controller.rb +14 -0
  73. data/lib/ruby-jmeter/extend/misc/aliases.rb +21 -0
  74. data/lib/ruby-jmeter/extend/misc/exists.rb +13 -0
  75. data/lib/ruby-jmeter/extend/misc/flood.rb +48 -0
  76. data/lib/ruby-jmeter/extend/misc/with_helpers.rb +27 -0
  77. data/lib/ruby-jmeter/extend/plugins/jmeter_plugins.rb +115 -0
  78. data/lib/ruby-jmeter/extend/processors/extract.rb +28 -0
  79. data/lib/ruby-jmeter/extend/processors/regular_expression_extractor.rb +25 -0
  80. data/lib/ruby-jmeter/extend/samplers/http_request.rb +47 -0
  81. data/lib/ruby-jmeter/extend/samplers/soapxmlrpc_request.rb +9 -0
  82. data/lib/ruby-jmeter/extend/threads/setup_thread_group.rb +18 -0
  83. data/lib/ruby-jmeter/extend/threads/thread_group.rb +19 -0
  84. data/lib/ruby-jmeter/extend/timers/constant_throughput_timer.rb +12 -0
  85. data/lib/ruby-jmeter/extend/timers/random_timer.rb +14 -0
  86. data/lib/ruby-jmeter/helpers/helper.rb +1 -2
  87. data/lib/ruby-jmeter/idl.xml +6 -4
  88. data/lib/ruby-jmeter/version.rb +1 -1
  89. data/ruby-jmeter.gemspec +7 -7
  90. data/spec/constant_throughput_timer_spec.rb +22 -0
  91. data/spec/header_manager_spec.rb +37 -0
  92. data/spec/http_cache_manager_spec.rb +17 -0
  93. data/spec/http_cookie_manager_spec.rb +17 -0
  94. data/spec/http_request_defaults_spec.rb +47 -0
  95. data/spec/http_request_spec.rb +305 -0
  96. data/spec/jmeter_plugins_spec.rb +155 -0
  97. data/spec/json_extractor_spec.rb +19 -0
  98. data/spec/json_path_assertion_spec.rb +28 -0
  99. data/spec/logic_controller_spec.rb +148 -0
  100. data/spec/loop_controller_spec.rb +19 -0
  101. data/spec/module_controller_spec.rb +56 -0
  102. data/spec/regular_expression_extractor_spec.rb +63 -0
  103. data/spec/response_assertion_spec.rb +69 -0
  104. data/spec/setup_thread_group_spec.rb +31 -0
  105. data/spec/thread_group_spec.rb +57 -0
  106. data/spec/throughput_controller_spec.rb +24 -0
  107. data/spec/transaction_controller_spec.rb +30 -0
  108. data/spec/user_defined_variables_spec.rb +22 -0
  109. data/spec/user_parameters_spec.rb +45 -0
  110. data/spec/with_helpers_spec.rb +57 -0
  111. data/spec/xpath_extractor_spec.rb +15 -0
  112. metadata +87 -59
  113. data/examples/basic_flood.rb +0 -12
  114. data/examples/basic_flood_real.rb +0 -7
  115. data/examples/basic_flood_with_csv.rb +0 -16
  116. data/examples/basic_google.rb +0 -8
  117. data/examples/basic_har.json +0 -4252
  118. data/examples/basic_har.rb +0 -34
  119. data/examples/basic_meta_fu.rb +0 -63
  120. data/examples/basic_response_assertion.rb +0 -13
  121. data/examples/basic_run.rb +0 -12
  122. data/examples/basic_testdata.rb +0 -60
  123. data/examples/demo.csv +0 -3
  124. data/examples/real_flood_test.rb +0 -14
  125. data/examples/real_flood_test_data.rb +0 -15
  126. data/examples/real_immi.gov.au_visa.rb +0 -78
  127. data/lib/ruby-jmeter/helpers/jmeter.properties +0 -28
  128. data/spec/dsl_spec.rb +0 -1157
  129. data/spec/stub.rb +0 -31
@@ -0,0 +1,27 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def with_user_agent(device)
4
+ http_header_manager name: 'User-Agent', value: RubyJmeter::UserAgent.new(device).string
5
+ end
6
+
7
+ def with_browser(device)
8
+ http_header_manager name: 'User-Agent', value: RubyJmeter::UserAgent.new(device).string
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,115 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def response_codes_per_second(name = 'Response Codes per Second', params = {}, &block)
4
+ node = RubyJmeter::Plugins::ResponseCodesPerSecond.new(name, params)
5
+ attach_node(node, &block)
6
+ end
7
+
8
+ def response_times_distribution(name = 'Response Times Distribution', params = {}, &block)
9
+ node = RubyJmeter::Plugins::ResponseTimesDistribution.new(name, params)
10
+ attach_node(node, &block)
11
+ end
12
+
13
+ def response_times_over_time(name = 'Response Times Over Time', params = {}, &block)
14
+ node = RubyJmeter::Plugins::ResponseTimesOverTime.new(name, params)
15
+ attach_node(node, &block)
16
+ end
17
+
18
+ def response_times_percentiles(name = 'Response Times Percentiles', params = {}, &block)
19
+ node = RubyJmeter::Plugins::ResponseTimesPercentiles.new(name, params)
20
+ attach_node(node, &block)
21
+ end
22
+
23
+ def transactions_per_second(name = 'Transactions per Second', params = {}, &block)
24
+ node = RubyJmeter::Plugins::TransactionsPerSecond.new(name, params)
25
+ attach_node(node, &block)
26
+ end
27
+
28
+ def latencies_over_time(name = 'Response Latencies Over Time', params = {}, &block)
29
+ node = RubyJmeter::Plugins::LatenciesOverTime.new(name, params)
30
+ attach_node(node, &block)
31
+ end
32
+
33
+ def console_status_logger(name = 'Console Status Logger', params = {}, &block)
34
+ node = RubyJmeter::Plugins::ConsoleStatusLogger.new(name, params)
35
+ attach_node(node, &block)
36
+ end
37
+
38
+ alias console console_status_logger
39
+
40
+ def throughput_shaper(name = 'Throughput Shaping Timer', steps=[], params = {}, &block)
41
+ node = RubyJmeter::Plugins::ThroughputShapingTimer.new(name, steps)
42
+ attach_node(node, &block)
43
+ end
44
+
45
+ alias shaper throughput_shaper
46
+
47
+ def dummy_sampler(name = 'Dummy Sampler', params = {}, &block)
48
+ node = RubyJmeter::Plugins::DummySampler.new(name, params)
49
+ attach_node(node, &block)
50
+ end
51
+
52
+ alias dummy dummy_sampler
53
+
54
+ def stepping_thread_group(params = {}, &block)
55
+ node = RubyJmeter::Plugins::SteppingThreadGroup.new(params)
56
+ attach_node(node, &block)
57
+ end
58
+
59
+ alias step stepping_thread_group
60
+
61
+ def ultimate_thread_group(threads = [], params = {}, &block)
62
+ node = RubyJmeter::Plugins::UltimateThreadGroup.new(params)
63
+
64
+ threads.each_with_index do |group, index|
65
+ node.doc.at_xpath('//collectionProp') <<
66
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
67
+ <collectionProp name="index">
68
+ <stringProp name="#{group[:start_threads]}">#{group[:start_threads]}</stringProp>
69
+ <stringProp name="#{group[:initial_delay]}">#{group[:initial_delay]}</stringProp>
70
+ <stringProp name="#{group[:start_time]}">#{group[:start_time]}</stringProp>
71
+ <stringProp name="#{group[:hold_time]}">#{group[:hold_time]}</stringProp>
72
+ <stringProp name="#{group[:stop_time]}">#{group[:stop_time]}</stringProp>
73
+ </collectionProp>
74
+ EOS
75
+ end
76
+
77
+ attach_node(node, &block)
78
+ end
79
+
80
+ alias ultimate ultimate_thread_group
81
+
82
+ def composite_graph(name, params = {}, &block)
83
+ node = RubyJmeter::Plugins::CompositeGraph.new(name, params)
84
+ attach_node(node, &block)
85
+ end
86
+
87
+ alias composite composite_graph
88
+
89
+ def active_threads_over_time(params = {}, &block)
90
+ node = RubyJmeter::Plugins::ActiveThreadsOverTime.new(params)
91
+ attach_node(node, &block)
92
+ end
93
+
94
+ alias active_threads active_threads_over_time
95
+
96
+ def perfmon_collector(params = {}, &block)
97
+ node = RubyJmeter::Plugins::PerfmonCollector.new(params)
98
+ attach_node(node, &block)
99
+ end
100
+
101
+ alias perfmon perfmon_collector
102
+
103
+ def loadosophia_uploader(name = "Loadosophia.org Uploader", params = {}, &block)
104
+ node = RubyJmeter::Plugins::LoadosophiaUploader.new(name, params)
105
+ attach_node(node, &block)
106
+ end
107
+
108
+ alias loadosophia loadosophia_uploader
109
+
110
+ def redis_data_set(params = {}, &block)
111
+ node = RubyJmeter::Plugins::RedisDataSet.new(params)
112
+ attach_node(node, &block)
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,28 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def extract(params, &block)
4
+ node = if params[:regex]
5
+ params[:refname] = params[:name]
6
+ params[:regex] = params[:regex] #CGI.escapeHTML
7
+ params[:template] = params[:template] || "$1$"
8
+ RubyJmeter::RegularExpressionExtractor.new(params)
9
+ elsif params[:xpath]
10
+ params[:refname] = params[:name]
11
+ params[:xpathQuery] = params[:xpath]
12
+ RubyJmeter::XpathExtractor.new(params)
13
+ elsif params[:json]
14
+ params[:VAR] = params[:name]
15
+ params[:JSONPATH] = params[:json]
16
+ RubyJmeter::Plugins::JsonPathExtractor.new(params)
17
+ elsif params[:css]
18
+ params[:refname] = params[:name]
19
+ params[:expr] = params[:css]
20
+ RubyJmeter::CssjqueryExtractor.new(params)
21
+ end
22
+
23
+ attach_node(node, &block)
24
+ end
25
+
26
+ alias web_reg_save_param extract
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def regular_expression_extractor(params, &block)
4
+ params[:refname] = params[:name]
5
+ params[:regex] = params[:pattern]
6
+ params[:template] = params[:template] || "$1$"
7
+
8
+ node = RubyJmeter::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(<<-EOS.strip_heredoc).children
14
+ <stringProp name="Scope.variable">#{params[:variable]}</stringProp>
15
+ EOS
16
+ )
17
+ end
18
+ end
19
+
20
+ attach_node(node, &block)
21
+ end
22
+
23
+ alias regex regular_expression_extractor
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def http_request(*args, &block)
4
+ params = args.shift || {}
5
+ params = { url: params }.merge(args.shift || {}) if params.class == 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
+ node = RubyJmeter::HttpRequest.new(params).tap do |node|
21
+ node.doc.children.first.add_child (
22
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
23
+ <stringProp name="HTTPSampler.implementation">#{params[:implementation]}</stringProp>
24
+ EOS
25
+ ) if params[:implementation]
26
+
27
+ node.doc.children.first.add_child (
28
+ Nokogiri::XML(<<-EOS.strip_heredoc).children
29
+ <stringProp name="TestPlan.comments">#{params[:comments]}</stringProp>
30
+ EOS
31
+ ) if params[:comments]
32
+ end
33
+
34
+ attach_node(node, &block)
35
+ end
36
+
37
+ alias request http_request
38
+ alias get http_request
39
+ alias visit http_request
40
+ alias post http_request
41
+ alias submit http_request
42
+ alias delete http_request
43
+ alias patch http_request
44
+ alias put http_request
45
+ alias head http_request
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def soapxmlrpc_request(params, &block)
4
+ params[:method] ||= 'POST'
5
+
6
+ super
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def setup_thread_group(*args, &block)
4
+ params = args.shift || {}
5
+ params = { count: params }.merge(args.shift || {}) if params.class == Fixnum
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 = RubyJmeter::SetupThreadGroup.new(params)
14
+
15
+ attach_node(node, &block)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def thread_group(*args, &block)
4
+ params = args.shift || {}
5
+ params = { count: params }.merge(args.shift || {}) if params.class == Fixnum
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 = RubyJmeter::ThreadGroup.new(params)
14
+ attach_node(node, &block)
15
+ end
16
+
17
+ alias threads thread_group
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def constant_throughput_timer(params, &block)
4
+ params[:value] ||= params[:throughput] || 0.0
5
+
6
+ node = RubyJmeter::ConstantThroughputTimer.new(params)
7
+ node.doc.xpath('.//value').first.content = params[:value].to_f
8
+
9
+ attach_node(node, &block)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module RubyJmeter
2
+ class ExtendedDSL < DSL
3
+ def random_timer(delay=0, range=0, &block)
4
+ params = {}
5
+ params[:delay] = delay
6
+ params[:range] = range
7
+ node = RubyJmeter::GaussianRandomTimer.new(params)
8
+
9
+ attach_node(node, &block)
10
+ end
11
+
12
+ alias think_time random_timer
13
+ end
14
+ end
@@ -1,5 +1,4 @@
1
1
  module RubyJmeter
2
-
3
2
  def dsl_eval(dsl, &block)
4
3
  block_context = eval("self", block.binding)
5
4
  proxy_context = RubyJmeter::FallbackContextProxy.new(dsl, block_context)
@@ -24,7 +23,7 @@ module RubyJmeter
24
23
  params.each do |name, value|
25
24
  node = @doc.children.xpath("//*[contains(@name,\"#{name.to_s}\")]")
26
25
  if value.class == Nokogiri::XML::Builder
27
- node.first << value.doc.at_xpath('//builder').children
26
+ node.first.children = value.doc.at_xpath('//builder').children
28
27
  else
29
28
  node.first.content = value unless node.empty?
30
29
  end
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
2
+ <jmeterTestPlan version="1.2" properties="2.9" jmeter="3.0 r1743807">
3
3
  <hashTree>
4
4
  <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
5
5
  <stringProp name="TestPlan.comments"></stringProp>
@@ -395,8 +395,8 @@
395
395
  <hashTree/>
396
396
  <AnchorModifier guiclass="AnchorModifierGui" testclass="AnchorModifier" testname="HTML Link Parser" enabled="true"/>
397
397
  <hashTree/>
398
- <ParamModifier guiclass="ParamModifierGui" testclass="ParamModifier" testname="HTML Parameter Mask" enabled="true">
399
- <elementProp name="ParamModifier.mask" elementType="ParamMask">
398
+ <ConfigTestElement guiclass="ObsoleteGui" testclass="ConfigTestElement" testname="HTML Parameter Mask" enabled="true">
399
+ <elementProp name="ParamModifier.mask" elementType="ConfigTestElement">
400
400
  <stringProp name="ParamModifier.field_name"></stringProp>
401
401
  <stringProp name="ParamModifier.prefix"></stringProp>
402
402
  <longProp name="ParamModifier.lower_bound">0</longProp>
@@ -404,7 +404,7 @@
404
404
  <longProp name="ParamModifier.increment">1</longProp>
405
405
  <stringProp name="ParamModifier.suffix"></stringProp>
406
406
  </elementProp>
407
- </ParamModifier>
407
+ </ConfigTestElement>
408
408
  <hashTree/>
409
409
  <URLRewritingModifier guiclass="URLRewritingModifierGui" testclass="URLRewritingModifier" testname="HTTP URL Re-writing Modifier" enabled="true">
410
410
  <stringProp name="argument_name"></stringProp>
@@ -643,6 +643,8 @@
643
643
  </elementProp>
644
644
  </collectionProp>
645
645
  </elementProp>
646
+ <stringProp name="jms.expiration"></stringProp>
647
+ <stringProp name="jms.priority"></stringProp>
646
648
  </PublisherSampler>
647
649
  <hashTree/>
648
650
  <SubscriberSampler guiclass="JMSSubscriberGui" testclass="SubscriberSampler" testname="JMS Subscriber" enabled="true">
@@ -1,3 +1,3 @@
1
1
  module RubyJmeter
2
- VERSION = '2.13.10'
2
+ VERSION = '3.0.0'
3
3
  end
data/ruby-jmeter.gemspec CHANGED
@@ -4,20 +4,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ruby-jmeter/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.name = "ruby-jmeter"
7
+ gem.name = 'ruby-jmeter'
8
8
  gem.version = RubyJmeter::VERSION
9
- gem.authors = ["Tim Koopmans"]
10
- gem.email = ["support@flood.io"]
9
+ gem.authors = ['Tim Koopmans']
10
+ gem.email = ['support@flood.io']
11
11
  gem.description = %q{Ruby based DSL for writing JMeter test plans}
12
12
  gem.summary = %q{Ruby based DSL for writing JMeter test plans}
13
- gem.homepage = "http://flood-io.github.io/ruby-jmeter/"
14
- gem.add_dependency("rest-client")
15
- gem.add_dependency("nokogiri")
13
+ gem.homepage = 'http://flood-io.github.io/ruby-jmeter/'
14
+ gem.add_dependency('rest-client')
15
+ gem.add_dependency('nokogiri')
16
16
  gem.add_runtime_dependency('json-jruby') if RUBY_PLATFORM == 'java'
17
17
 
18
18
  gem.files = `git ls-files`.split($/)
19
19
  gem.executables << 'flood'
20
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ gem.test_files = `git ls-files -- {spec}/*`.split("\n")
21
21
  gem.require_paths = ['lib']
22
22
 
23
23
  gem.license = 'MIT'
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'constant_throughput_timer' do
4
+ let(:doc) do
5
+ test do
6
+ threads do
7
+ constant_throughput_timer value: 60.0
8
+ constant_throughput_timer throughput: 70.0
9
+ end
10
+ end.to_doc
11
+ end
12
+
13
+ let(:fragment) { doc.search("//ConstantThroughputTimer").first }
14
+
15
+ it 'should match on throughput using value' do
16
+ expect(fragment.search("//doubleProp/value").first.text).to eq '60.0'
17
+ end
18
+
19
+ it 'should match on throughput using throughput' do
20
+ expect(fragment.search("//doubleProp/value").last.text).to eq '70.0'
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'header manager' do
4
+ let(:doc) do
5
+ test do
6
+ header name: 'Accept', value: '*'
7
+ end.to_doc
8
+ end
9
+
10
+ let(:fragment) { doc.search('//HeaderManager').first }
11
+
12
+ it 'should match on accept' do
13
+ expect(fragment.search(".//stringProp[@name='Header.name']").text).to eq 'Accept'
14
+ expect(fragment.search(".//stringProp[@name='Header.value']").text).to eq '*'
15
+ end
16
+ end
17
+
18
+ describe 'header manager multiple values' do
19
+ let(:doc) do
20
+ test do
21
+ header [ { name: 'Accept', value: '1' }, { name: 'Accept', value: '2' }]
22
+ end.to_doc
23
+ end
24
+
25
+ let(:fragment) { doc.search('//HeaderManager') }
26
+
27
+
28
+ it 'should match on accept for fragment_first' do
29
+ expect(fragment.search(".//stringProp[@name='Header.name']").first.text).to eq 'Accept'
30
+ expect(fragment.search(".//stringProp[@name='Header.value']").first.text).to eq '1'
31
+ end
32
+
33
+ it 'should match on accept for fragment_last' do
34
+ expect(fragment.search(".//stringProp[@name='Header.name']").last.text).to eq 'Accept'
35
+ expect(fragment.search(".//stringProp[@name='Header.value']").last.text).to eq '2'
36
+ end
37
+ end