module Wdbomber
Constants
- VERSION
Public Class Methods
run!(endpoint, iterations:, concurrency:1, concurrency_delay:0, actions:1, rampup: nil)
click to toggle source
# File lib/wdbomber.rb, line 16 def self.run!(endpoint, iterations:, concurrency:1, concurrency_delay:0, actions:1, rampup: nil) STDERR.puts "attacking #{endpoint}" STDERR.puts " iterations: #{iterations}" STDERR.puts " concurrency: #{concurrency}" STDERR.puts " actions: #{actions}" STDERR.puts " rampup: #{rampup}" desired_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome if ENV["SUPERBOT_REGION"] desired_capabilities['superOptions'] = {} desired_capabilities['superOptions']['region'] = ENV["SUPERBOT_REGION"] end main_task = Async.run do |main_task| concurrency.times do |t| bomber = t+1 main_task.sleep t*concurrency_delay #for specs main_task.async do |sub_task| if rampup my_rampup = rand(rampup).floor puts "#{bomber}: starting after #{my_rampup} rampup" sub_task.sleep my_rampup puts "#{bomber}: started" end iterations.times do |i| if $SHUTDOWN_REQUESTED puts "#{bomber}: SHUTDOWN" break end iteration = i+1 client = Async::Webdriver::Client.new endpoint: endpoint, desired_capabilities: desired_capabilities started_at = Time.now session = client.session.create! actions.times do session.navigate! "about:blank" end took = Time.now - started_at puts "#{bomber}: took #{took.floor(1)}s (##{iteration}/#{iterations})" rescue puts "#{bomber}: EXCEPTION (#{iteration}/#{iterations})" p $! exit 1 unless ENV["WDBOMBER_KEEP_BOMBING"] == "true" ensure session.delete! unless ENV["WDBOMBER_NO_QUIT"] == "true" end end end end main_task.wait STDERR.puts "OK" end