Ruby의 selenum-webdriver를 사용하여 UA를 위장하면서 웹 테스트를 시도합니다.
7239 단어 루비selenium-webdriver
하고 싶었던 일
스마트폰 최적화 사이트에서 AB 테스트를 도입하여 구현이 완료되었습니다.
그러나 테스트하고 있는 타이밍에 AB의 비율이 지정한 비율이 되어 있는지가 의문을 받았습니다.
"적어도 설정하고 있어야 할 B가 많이 많이 나오지 않았나…?"
시도 횟수가 적고 우연히 치우칠 수 있습니다.
이 시도 횟수를 늘리고 설정한 비율에 진정하는지 확인하고 싶었습니다.
그래서 이번에는
UA를 가장하여 사이트에 액세스 → AB의 쿠키 값 확인 → 쿠키 삭제 → 사이트에 액세스 ... 아래 반복
를 자동 테스트로 해보자, 되었습니다.
하는 방법은 여러가지라고 생각합니다만, Ruby의 selenum-webdriver를 사용해 보았던 대로입니다.
※ 처음 Firefox의 SeleniumIDE에서 시도하려고했지만 보안 관점에서 사용할 수 없었습니다.
이전 준비
bundler를 사용하여 Gem을 설치합니다.
bundler는 사용하지 않아도 되지만, 사용했을 경우의 순서로 진행합니다.
Gemfilesource 'https://rubygems.org/'
gem 'selenium-webdriver'
gem 'webdriver-user-agent'
webdriber-user-agent는 selenium-webdriver를 사용할 때 쉽게 UA를 가장하는 gem입니다.
vendor/bundle 아래에 설치해야 합니다.
$ bundler install --path=vendor/bundle
이것으로 준비가 완료되었습니다.
움직이다
테스트를 실행하는 Ruby 프로그램을 작성합니다.
이번은 일회용 프로그램이므로 제작이 그렇다고 생각합니다만 큰 봐 주세요.
test.rbrequire 'selenium-webdriver'
require 'webdriver-user-agent'
require 'pp'
class Get
attr_reader :data
COOKIE_NAME = 'cookiename' # 取りたいクッキーの名前を指定します
def initialize
#@driver = Selenium::WebDriver.for :firefox # UAの偽装がいらない場合はSeleniumモジュールの方を使います
# 引数でブラウザやUA、画面の向きを指定できます。
# 指定しない場合、ブラウザはfirefox, UAはiPhone, 画面は縦向きという設定になります。
# see also: http://www.rubydoc.info/gems/webdriver-user-agent/7.4
@driver = Webdriver::UserAgent.driver
@data = []
end
def open
@driver.navigate.to 'http://hogehoge.com/example' # テスト対象のURLを指定します
cookies = @driver.manage.all_cookies # 現在表示してるページで使えるcookieを全部取得します。配列です。
cookie_index = cookies.find_index do |cookie|
cookie[:name] == COOKIE_NAME
end # ほしいcookieの順番を特定します
return unless cookie_index # indexが取れなかったらcookieがセットされてないものと見なしてnilを返します
@data << cookies[cookie_index][:value] # とれたらそのcookieの値を結果の配列に突っ込みます
@driver.manage.delete_cookie(COOKIE_NAME) # 該当のcookieを消すことで新しいABユーザとします
end
def destruct
@driver.quit # 終了処理です。やっておくとブラウザを閉じてくれます。
end
end
get = Get.new
begin
1.upto(500) do # 試行回数500回で試してみます
get.open
sleep 0.2 # 誰かがクローリングしてる!って怒られるのを恐れてsleepさせてます。(自社サイトかつ開発環境なので不要ですが念のため)
end
ensure
get.destruct
end
a_array = get.data.select {|v| v == 'a'}
b_array = get.data.select {|v| v == 'b'}
pp "aの数:#{a_array.size}"
pp "bの数:#{b_array.size}"
# なんかもっと簡単にカウントできる気がするけど、面倒なのでこれで。
코드 내에 해설이라고 할까 보충을 묻어 버렸습니다만, 대체로 이런 느낌입니다.
이것을 달리면
$ bundler exec ruby test.rb
"aの数:372"
"bの数:128"
이런 출력이 되어, 대체로 75:25라고 하는 설정한 대로의 비율이 되고 있군요, 라고 확인이 끝난 대로입니다.
요약
selenium-webdriver는 브라우저를 조작하는 기능이 준비되어 있어, 예를 들면 form의 조작이라든지 그러한 것도 할 수 있습니다.
반복 사이트에 액세스하거나 기계적으로 할 수 있는 곳은 유효 활용해 갑시다.
Reference
이 문제에 관하여(Ruby의 selenum-webdriver를 사용하여 UA를 위장하면서 웹 테스트를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/zom/items/f47ecf3a8e7a1001957c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
bundler를 사용하여 Gem을 설치합니다.
bundler는 사용하지 않아도 되지만, 사용했을 경우의 순서로 진행합니다.
Gemfile
source 'https://rubygems.org/'
gem 'selenium-webdriver'
gem 'webdriver-user-agent'
webdriber-user-agent는 selenium-webdriver를 사용할 때 쉽게 UA를 가장하는 gem입니다.
vendor/bundle 아래에 설치해야 합니다.
$ bundler install --path=vendor/bundle
이것으로 준비가 완료되었습니다.
움직이다
테스트를 실행하는 Ruby 프로그램을 작성합니다.
이번은 일회용 프로그램이므로 제작이 그렇다고 생각합니다만 큰 봐 주세요.
test.rbrequire 'selenium-webdriver'
require 'webdriver-user-agent'
require 'pp'
class Get
attr_reader :data
COOKIE_NAME = 'cookiename' # 取りたいクッキーの名前を指定します
def initialize
#@driver = Selenium::WebDriver.for :firefox # UAの偽装がいらない場合はSeleniumモジュールの方を使います
# 引数でブラウザやUA、画面の向きを指定できます。
# 指定しない場合、ブラウザはfirefox, UAはiPhone, 画面は縦向きという設定になります。
# see also: http://www.rubydoc.info/gems/webdriver-user-agent/7.4
@driver = Webdriver::UserAgent.driver
@data = []
end
def open
@driver.navigate.to 'http://hogehoge.com/example' # テスト対象のURLを指定します
cookies = @driver.manage.all_cookies # 現在表示してるページで使えるcookieを全部取得します。配列です。
cookie_index = cookies.find_index do |cookie|
cookie[:name] == COOKIE_NAME
end # ほしいcookieの順番を特定します
return unless cookie_index # indexが取れなかったらcookieがセットされてないものと見なしてnilを返します
@data << cookies[cookie_index][:value] # とれたらそのcookieの値を結果の配列に突っ込みます
@driver.manage.delete_cookie(COOKIE_NAME) # 該当のcookieを消すことで新しいABユーザとします
end
def destruct
@driver.quit # 終了処理です。やっておくとブラウザを閉じてくれます。
end
end
get = Get.new
begin
1.upto(500) do # 試行回数500回で試してみます
get.open
sleep 0.2 # 誰かがクローリングしてる!って怒られるのを恐れてsleepさせてます。(自社サイトかつ開発環境なので不要ですが念のため)
end
ensure
get.destruct
end
a_array = get.data.select {|v| v == 'a'}
b_array = get.data.select {|v| v == 'b'}
pp "aの数:#{a_array.size}"
pp "bの数:#{b_array.size}"
# なんかもっと簡単にカウントできる気がするけど、面倒なのでこれで。
코드 내에 해설이라고 할까 보충을 묻어 버렸습니다만, 대체로 이런 느낌입니다.
이것을 달리면
$ bundler exec ruby test.rb
"aの数:372"
"bの数:128"
이런 출력이 되어, 대체로 75:25라고 하는 설정한 대로의 비율이 되고 있군요, 라고 확인이 끝난 대로입니다.
요약
selenium-webdriver는 브라우저를 조작하는 기능이 준비되어 있어, 예를 들면 form의 조작이라든지 그러한 것도 할 수 있습니다.
반복 사이트에 액세스하거나 기계적으로 할 수 있는 곳은 유효 활용해 갑시다.
Reference
이 문제에 관하여(Ruby의 selenum-webdriver를 사용하여 UA를 위장하면서 웹 테스트를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/zom/items/f47ecf3a8e7a1001957c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'selenium-webdriver'
require 'webdriver-user-agent'
require 'pp'
class Get
attr_reader :data
COOKIE_NAME = 'cookiename' # 取りたいクッキーの名前を指定します
def initialize
#@driver = Selenium::WebDriver.for :firefox # UAの偽装がいらない場合はSeleniumモジュールの方を使います
# 引数でブラウザやUA、画面の向きを指定できます。
# 指定しない場合、ブラウザはfirefox, UAはiPhone, 画面は縦向きという設定になります。
# see also: http://www.rubydoc.info/gems/webdriver-user-agent/7.4
@driver = Webdriver::UserAgent.driver
@data = []
end
def open
@driver.navigate.to 'http://hogehoge.com/example' # テスト対象のURLを指定します
cookies = @driver.manage.all_cookies # 現在表示してるページで使えるcookieを全部取得します。配列です。
cookie_index = cookies.find_index do |cookie|
cookie[:name] == COOKIE_NAME
end # ほしいcookieの順番を特定します
return unless cookie_index # indexが取れなかったらcookieがセットされてないものと見なしてnilを返します
@data << cookies[cookie_index][:value] # とれたらそのcookieの値を結果の配列に突っ込みます
@driver.manage.delete_cookie(COOKIE_NAME) # 該当のcookieを消すことで新しいABユーザとします
end
def destruct
@driver.quit # 終了処理です。やっておくとブラウザを閉じてくれます。
end
end
get = Get.new
begin
1.upto(500) do # 試行回数500回で試してみます
get.open
sleep 0.2 # 誰かがクローリングしてる!って怒られるのを恐れてsleepさせてます。(自社サイトかつ開発環境なので不要ですが念のため)
end
ensure
get.destruct
end
a_array = get.data.select {|v| v == 'a'}
b_array = get.data.select {|v| v == 'b'}
pp "aの数:#{a_array.size}"
pp "bの数:#{b_array.size}"
# なんかもっと簡単にカウントできる気がするけど、面倒なのでこれで。
$ bundler exec ruby test.rb
"aの数:372"
"bの数:128"
selenium-webdriver는 브라우저를 조작하는 기능이 준비되어 있어, 예를 들면 form의 조작이라든지 그러한 것도 할 수 있습니다.
반복 사이트에 액세스하거나 기계적으로 할 수 있는 곳은 유효 활용해 갑시다.
Reference
이 문제에 관하여(Ruby의 selenum-webdriver를 사용하여 UA를 위장하면서 웹 테스트를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zom/items/f47ecf3a8e7a1001957c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)