jmeter_perf 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1953dbeec068d309f9602732fd4e869f983183db4e3042d064ba1e66d82ce392
4
- data.tar.gz: '0582be320dc704d59b08e00c9e8ac629abfcf8e2cb6814c66b9723aaea86de3a'
3
+ metadata.gz: 600531edf66d0d72c64c6015327f9b63db03ab11357e28758a7250aead0d9106
4
+ data.tar.gz: f254970ad87fb7850e4989d25c3f6437cb037614a76cd5c145b6c3bb5db6b4a3
5
5
  SHA512:
6
- metadata.gz: 0cf02d52a911f48b3d2c56916d13968c446b98207680dafac44eea0be1b085f71ea13fe70738271c63cb1387f8792e7c161ab711706fb0a652e41d41924b0283
7
- data.tar.gz: 4e374d93ecc6156d54e4c14882c824d038c08221f3cfb346cba29299dac32e416a6fcb5db1e48d3668906fa5433ddece6a453be08b7f802319b7344a1b896240
6
+ metadata.gz: 14c69cb7eac86ce588226a5c69a4b791e7d4f9015034c2314f9c13daab0a5dbeab5feeaaaaf6f58fe9be22c3216ac99e94f9d0e718cc1027ea4aa0d2e43e43a7
7
+ data.tar.gz: 2608a6d4db406a42a9bbaf2874e2cebfdb0768b62100e5515eb68a098683fc191410632aa9c314c0b17a8884405fc314499473d7335dc4d4177b3c56e8f3abfe
@@ -188,33 +188,27 @@ module JmeterPerf
188
188
 
189
189
  # Starts streaming and processing JTL file content asynchronously.
190
190
  # @note Once streaming, in order to finish processing, call `finish!` otherwise it will continue indefinitely.
191
- # @return [Thread] a thread that handles the asynchronous file streaming and parsing
191
+ # @return [void]
192
192
  def stream_jtl_async
193
193
  @processing_jtl_thread = Thread.new do
194
- Timeout.timeout(@jtl_read_timeout) do
194
+ Timeout.timeout(@jtl_read_timeout, nil, "Timed out attempting to open JTL File #{@file_path}") do
195
195
  sleep 0.1 until File.exist?(@file_path) # Wait for the file to be created
196
196
  end
197
197
 
198
198
  File.open(@file_path, "r") do |file|
199
199
  until @finished && file.eof?
200
- line = nil
201
-
202
- # Protect against blocking reads that are still in progress
203
- Timeout.timeout(@jtl_read_timeout) do
204
- line = file.gets
205
- sleep 0.1 until line || file.eof? || @finished
206
- end
200
+ line = file.gets
207
201
 
208
- # Skip if the line is nil. Could be EOF but not yet marked as finished or vice versa.
202
+ # Skip if the line is nil. This can happen if not @finished, and we are at EOF
209
203
  next if line.nil?
210
- # Process only if the line is complete (ends with a newline)
204
+ # Process only if the line is complete. JMeter always finishes with a newline
211
205
  read_until_complete_line(file, line)
212
206
  end
213
207
  end
214
208
  end
215
209
 
216
210
  @processing_jtl_thread.abort_on_exception = true
217
- @processing_jtl_thread
211
+ nil
218
212
  end
219
213
 
220
214
  # Summarizes the collected data by calculating statistical metrics and error rates.
@@ -232,16 +226,19 @@ module JmeterPerf
232
226
  private
233
227
 
234
228
  def read_until_complete_line(file, line)
235
- return if file.lineno == 1 # Skip the header row
236
- Timeout.timeout(@jtl_read_timeout) do
237
- until line.end_with?("\n")
229
+ lineno = file.lineno
230
+ return if lineno == 1 # Skip the header row
231
+ Timeout.timeout(@jtl_read_timeout, nil, "Timed out processing line #{lineno}") do
232
+ # If finished and eof but no newline: Means processing was interrupted
233
+ # JMeter always finishes with a new line in the JTL file
234
+ until line.end_with?("\n") || (file.eof? && @finished)
238
235
  sleep 0.1
239
236
  line += file.gets.to_s
240
237
  end
241
238
  end
242
239
  parse_csv_row(line)
243
240
  rescue Timeout::Error
244
- raise Timeout::Error, "Timed out reading JTL file at line #{file.lineno}"
241
+ raise Timeout::Error, "Timed out reading JTL file at line #{lineno}"
245
242
  rescue CSV::MalformedCSVError
246
243
  @csv_error_lines << file.lineno
247
244
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JmeterPerf
4
- VERSION = "1.1.0"
4
+ VERSION = "1.1.1"
5
5
  end
data/lib/jmeter_perf.rb CHANGED
@@ -61,7 +61,7 @@ module JmeterPerf
61
61
  @root = Nokogiri::XML(JmeterPerf::Helpers::String.strip_heredoc(
62
62
  <<-EOF
63
63
  <?xml version="1.0" encoding="UTF-8"?>
64
- <jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1" ruby-jmeter="3.0">
64
+ <jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1" jmeterperf="#{JmeterPerf::VERSION}">
65
65
  <hashTree>
66
66
  </hashTree>
67
67
  </jmeterTestPlan>
@@ -74,17 +74,17 @@ module JmeterPerf
74
74
 
75
75
  # Saves the test plan as a JMX file.
76
76
  #
77
- # @param out_jmx [String] The path for the output JMX file (default: `"ruby-jmeter.jmx"`).
78
- def jmx(out_jmx: "ruby-jmeter.jmx")
77
+ # @param out_jmx [String] The path for the output JMX file (default: `"jmeter_perf.jmx"`).
78
+ def jmx(out_jmx: "jmeter_perf.jmx")
79
79
  File.write(out_jmx, doc.to_xml(indent: 2))
80
80
  logger.info "JMX saved to: #{out_jmx}"
81
81
  end
82
82
 
83
83
  # Runs the test plan with the specified configuration.
84
84
  #
85
- # @param name [String] The name of the test run (default: `"ruby-jmeter"`).
85
+ # @param name [String] The name of the test run (default: `"jmeter_perf"`).
86
86
  # @param jmeter_path [String] Path to the JMeter executable (default: `"jmeter"`).
87
- # @param out_jmx [String] The filename for the output JMX file (default: `"ruby-jmeter.jmx"`).
87
+ # @param out_jmx [String] The filename for the output JMX file (default: `"jmeter_perf.jmx"`).
88
88
  # @param out_jtl [String] The filename for the output JTL file (default: `"jmeter.jtl"`).
89
89
  # @param out_jmeter_log [String] The filename for the JMeter log file (default: `"jmeter.log"`).
90
90
  # @param out_cmd_log [String] The filename for the command log file (default: `"jmeter-cmd.log"`).
@@ -92,9 +92,9 @@ module JmeterPerf
92
92
  # @return [JmeterPerf::Report::Summary] The summary report of the test run.
93
93
  # @raise [RuntimeError] If the test execution fails.
94
94
  def run(
95
- name: "ruby-jmeter",
95
+ name: "jmeter_perf",
96
96
  jmeter_path: "jmeter",
97
- out_jmx: "ruby-jmeter.jmx",
97
+ out_jmx: "jmeter_perf.jmx",
98
98
  out_jtl: "jmeter.jtl",
99
99
  out_jmeter_log: "jmeter.log",
100
100
  out_cmd_log: "jmeter-cmd.log",
data/sig/jmeter_perf.rbs CHANGED
@@ -9,11 +9,11 @@ module JmeterPerf
9
9
  attr_accessor root: ::Nokogiri::XML::Document
10
10
 
11
11
  def initialize: (params: Hash[Symbol, untyped] ?) -> void
12
- def jmx: (out_jmx: String = "ruby-jmeter.jmx") -> void
12
+ def jmx: (out_jmx: String = "jmeter_perf.jmx") -> void
13
13
  def run: (
14
- name: String = "ruby-jmeter",
14
+ name: String = "jmeter_perf",
15
15
  jmeter_path: String = "jmeter",
16
- out_jmx: String = "ruby-jmeter.jmx",
16
+ out_jmx: String = "jmeter_perf.jmx",
17
17
  out_jtl: String = "jmeter.jtl",
18
18
  out_jmeter_log: String = "jmeter.log",
19
19
  out_cmd_log: String = "jmeter-cmd.log",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jmeter_perf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Luis Urena
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-03 00:00:00.000000000 Z
11
+ date: 2024-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri