ritsudo 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aecf9ff6730444d597a135b519014e951821d0da74e6ac4d4aa012301f93c5ee
4
- data.tar.gz: 18d826bea44d1320ce672ac443bff4dc1381d7f6955972f687fa120d9c3f7f3d
3
+ metadata.gz: ee2a6abdb855e2cdce4490dd6f35fcf71960388b4612e5ebb95508966567c2e5
4
+ data.tar.gz: b0cc172d1ebf2642a2ec1489f9906d8a0d4e2d204f1504579fb8a61ebad13bf9
5
5
  SHA512:
6
- metadata.gz: 426554618585d45b1ee152e24945a035f310104f657007cc70e01ea0cd056fdae54218fc263360aa5eadb2be8893b6c0baa75b0436733a1b889f0e3741989ad8
7
- data.tar.gz: d028a1734186e28220b718908b1650b1000c849e111c942469348b63d433066c3f8dd90ff56373d09eb7da95234c266a6469894ed499e56ef329919a6ce0532f
6
+ metadata.gz: 366102b22ebca7f46296a93fb343d9c03cdd7299c22088bc7b0a764b7b6f8ec32545e64d0b445865b065fa5451fe35790074f39ff3e4e4cf62cdb3821ba157a3
7
+ data.tar.gz: 43a5a6a3efa8981bbdebdf5fda142beb82f19a45e2e46cf14c1b1c4490ae58e2652610e530ea600f328f367df9277d1e415f95b47dd7884da2cd10632cce6d76
data/README.md CHANGED
@@ -24,7 +24,7 @@ require "ritsudo"
24
24
  ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"
25
25
  collector = Ritsudo::Collector.new(match: /example\.com/)
26
26
  benchmark = Ritsudo::Benchmark.new(collector: collector)
27
- benchmark.do("http:/www.example.com", driver_options: { user_agent: ua })
27
+ benchmark.do("https:/www.example.com", driver_options: { user_agent: ua })
28
28
  benchmark.collector.documents.display
29
29
  benchmark.collector.xhrs.display
30
30
  ```
@@ -43,20 +43,20 @@ Ritsudo requests 5 times: https://example.com
43
43
  +------------------+--------+------+-----+-------+
44
44
 
45
45
  [Document]
46
- +--------------------------+--------+--------+--------+-------+
47
- | url | avg | max | min | count |
48
- +--------------------------+--------+--------+--------+-------+
49
- | http://www.example.com/ | 597.56 | 858.15 | 433.51 | 5 |
50
- +--------------------------+--------+--------+--------+-------+
46
+ +---------------------------+--------+--------+--------+-------+
47
+ | url | avg | max | min | count |
48
+ +---------------------------+--------+--------+--------+-------+
49
+ | https://www.example.com/ | 597.56 | 858.15 | 433.51 | 5 |
50
+ +---------------------------+--------+--------+--------+-------+
51
51
 
52
52
  [XHR]
53
+ +-------------------------------------------+---------+---------+---------+-------+-------------+
54
+ | url | avg | max | min | count | uncompleted |
55
+ +-------------------------------------------+---------+---------+---------+-------+-------------+
56
+ | https://www.example.com/xhr_request | 300.39 | 500.39 | 250.39 | 4 | 1 |
53
57
  +------------------------------------------+---------+---------+---------+-------+-------------+
54
- | url | avg | max | min | count | uncompleted |
55
- +------------------------------------------+---------+---------+---------+-------+-------------+
56
- | http://www.example.com/xhr_request | 300.39 | 500.39 | 250.39 | 4 | 1 |
57
- +------------------------------------------+---------+---------+---------+-------+-------------+
58
- | http://www.example.com/slow_xhr_request | - | - | - | - | 5 |
59
- +------------------------------------------+---------+---------+---------+-------+-------------+
58
+ | https://www.example.com/slow_xhr_request | - | - | - | - | 5 |
59
+ +-------------------------------------------+---------+---------+---------+-------+-------------+
60
60
 
61
61
  [Script]
62
62
  +--------------------------------+-------+-------+-------+-------+-------------+
@@ -65,6 +65,16 @@ Ritsudo requests 5 times: https://example.com
65
65
  | https//example.com/example.js | 25.88 | 43.15 | 14.96 | 5 | 0 |
66
66
  +--------------------------------+-------+-------+-------+-------+-------------+
67
67
  ```
68
+
69
+ ### Set Cookies
70
+ ```
71
+ ritsudo -a https://example.com/page -m "example.com" -C "hoge=fuga"
72
+ ```
73
+
74
+ #### Problem
75
+ Headless chrome doesn't support to set cookies before access.
76
+ So, Ritsudo access root path(e.g https://example.com") before benchmark.
77
+
68
78
  ## License
69
79
 
70
80
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -5,15 +5,20 @@ module Ritsudo
5
5
  @collector = collector
6
6
  end
7
7
 
8
- def do(url, count: 5, wait: 1, sub_process_timeout: 3,
9
- driver_options: {
10
- timeout: 5,
11
- wait_time: 1
12
- })
8
+ def do(url, count: 5, wait: 1, sub_process_timeout: 3, driver_options: {})
9
+ if driver_options[:cookies]
10
+ puts <<-EOS
11
+ WARNING: headless chrome can not set cookie before access. Ritsudo accesses root path before requested path for set cookies.
12
+
13
+ EOS
14
+ end
15
+
16
+ default_driver_options = { timeout: 5, wait_time: 1 }
13
17
  puts "Ritsudo requests #{count} times: #{url}"
14
18
  count.times do
15
19
  print(".")
16
- collect(url, wait: wait, sub_process_timeout: sub_process_timeout, driver_options: driver_options)
20
+ collect(url, wait: wait, sub_process_timeout: sub_process_timeout,
21
+ driver_options: default_driver_options.merge(driver_options))
17
22
  end
18
23
  puts ""
19
24
  end
data/lib/ritsudo/cli.rb CHANGED
@@ -5,6 +5,7 @@ module Ritsudo
5
5
  default_command :benchmark
6
6
  option :url, required: true, aliases: ['-a']
7
7
  option :count, default: 5, type: :numeric, aliases: ['-c']
8
+ option :cookies, type: :string, aliases: ['-C']
8
9
  option :sub_process_timeout, default: 5, type: :numeric, aliases: ['-s']
9
10
  option :timeout, default: 10, type: :numeric, aliases: ['-t']
10
11
  option :wait_time, default: 1, type: :numeric, aliases: ['-w']
@@ -21,7 +22,8 @@ module Ritsudo
21
22
  driver_options: {
22
23
  timeout: options[:timeout],
23
24
  wait_time: options[:wait_time],
24
- user_agent: options[:ua]
25
+ user_agent: options[:ua],
26
+ cookies: options[:cookies]
25
27
  }
26
28
  )
27
29
  benchmark.collector.report
@@ -1,10 +1,11 @@
1
1
  require 'selenium-webdriver'
2
2
  require 'forwardable'
3
+ require 'webrick/cookie'
3
4
 
4
5
  module Ritsudo
5
6
  class Driver
6
7
  extend Forwardable
7
- def_delegators :@driver, :get, :get_log, :manage
8
+ def_delegators :@driver, :get_log, :manage
8
9
 
9
10
  def driver
10
11
  @driver
@@ -13,6 +14,7 @@ module Ritsudo
13
14
  def initialize(logger_level: :warn, timeout: 60, wait_time: 5,
14
15
  logger_output: "./ritsudo.selenium.log",
15
16
  user_agent: nil,
17
+ cookies: nil,
16
18
  args: ['--headless',
17
19
  '--window-size=1920,1080',
18
20
  '--ignore-certificate-errors',
@@ -24,17 +26,38 @@ module Ritsudo
24
26
  args << "--user-agent=#{user_agent}"
25
27
  end
26
28
 
29
+ if cookies
30
+ @cookie_templates = WEBrick::Cookie.parse(cookies).map do |cookie|
31
+ { name: cookie.name, value: cookie.value, path: '/' }
32
+ end
33
+ end
34
+
27
35
  Selenium::WebDriver.logger.output = logger_output
28
36
  Selenium::WebDriver.logger.level = logger_level
29
37
  client = Selenium::WebDriver::Remote::Http::Default.new.tap { |c| c.read_timeout = timeout }
30
- @driver = Selenium::WebDriver.for(:chrome, options: options(args),
31
- desired_capabilities: caps,
32
- http_client: client,).tap do |d|
38
+ driver_options = { options: options(args), desired_capabilities: caps, http_client: client }
39
+ @driver = Selenium::WebDriver.for(:chrome, driver_options).tap do |d|
33
40
  d.manage.timeouts.implicit_wait = timeout
34
41
  end
35
42
  #@wait = Selenium::WebDriver::Wait.new(timeout: wait_time)
36
43
  end
37
44
 
45
+ def get(url)
46
+ if @cookie_templates
47
+ u = URI.parse(url)
48
+ base_url = u.to_s.sub(u.request_uri, '/')
49
+ @driver.get(base_url)
50
+ @driver.execute_script("return window.stop");
51
+ sleep(1)
52
+ @driver.manage.logs.get('performance')
53
+ @cookie_templates&.each do |cookie|
54
+ manage.add_cookie(cookie.merge(domain: URI.parse(url).host))
55
+ end
56
+ end
57
+ puts @driver.manage.logs.get('performance').inspect
58
+ @driver.get(url)
59
+ end
60
+
38
61
  def caps
39
62
  Selenium::WebDriver::Remote::Capabilities.chrome(
40
63
  loggingPrefs: { performance: 'ALL' },
@@ -1,3 +1,3 @@
1
1
  module Ritsudo
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ritsudo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - shingo morita