Seleniumを使った自動テスト環境の構築方法をご紹介します。
構築する環境は以下になります。
OS:
RockyLinux8
プログラム言語:
Ruby
ブラウザ:
FireFox
Seleniumに必要なOSパッケージをインストールします。
dnf install -y epel-release
|
Rubyで使用するGemパッケージをインストールします。
gem install rspec gem install awesome_print gem install base32 gem install libxml-ruby gem install net-ldap gem install rotp gem install selenium-webdriver gem install rest-client gem install nokogiri gem install sqlite3 |
Seleniumが使用するブラウザのWebDriverをインストールします。
wget https://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-linux64.tar.gz
|
物理ディスプレイがなくても仮想ディスプレイでブラウザを表示するためにXvfbの設定をします。
vi /usr/lib/systemd/system/xvfb_99.service |
インストールまで完了したので動作確認として弊社サービスへのログインをSeleniumで実行します。
ログイン画面表示、ログイン情報入力、ログイン後画面のタイミングでスクリーンショットを取得しています。
実行コマンドとテストプログラムは以下です。
respec test.rb |
vi test.rb ===================================================================== #!/usr/local/bin/rspec #encoding: utf-8 require "selenium-webdriver" #ブラウザ初期設定 profile = Selenium::WebDriver::Firefox::Profile.new profile['intl.accept_languages'] = 'ja' capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true) options = Selenium::WebDriver::Firefox::Options.new(profile: profile, log_level: :trace) options.add_argument('--headless') driver = Selenium::WebDriver.for(:firefox, { options: options, desired_capabilities: capabilities }) wait = Selenium::WebDriver::Wait.new(timeout: 10) #ログイン画面表示 driver.get("https://slink.secioss.com/user/?tenant=test-yamada") driver.save_screenshot("login_before.png") #ログイン情報入力 driver.find_element(:id, 'username_input').send_keys("XXXX") driver.find_element(:id, 'password_input').send_keys("YYYY") driver.save_screenshot("input_login_info.png") #ログインボタンクリック driver.find_element(:id, 'login_button').click wait.until { driver.find_element(:class, 'loginBox').displayed? } driver.save_screenshot("login_after.png") |
RockyLinux8でのSeleniumインストールから動作確認までをご紹介しました。
弊社では主にリグレッションテストとしてSeleniumでの自動テストを実施しています。
入力項目が多かったり、テスト対象が多い場合などに一度シナリオを作成しておくとテストに掛かる負荷が軽減され、他のテストに注力できます。
具体的なシナリオ作成や安定して動作させるコツなどは別の機会にご紹介したいと思います。