最近は転職活動を行なっており一区切りついたため、久しぶりに記事を書いてみましたので見てもらえると嬉しいです。
また、selenium以外にもunittestを使用しています。
リグレッションテスト
リグレッションテストについてまとめていきます。
リグレッションテスト(Regression Testing)は
Webサイトなどについて意図しない変更がされていないかを確認するためのテストで前回までのバージョンと現在のバージョンを比較し、差異がないか確認するためのテストです。「回帰テスト」と呼ばれていたりもします。
Pythonのインストール
Pythonのインストールについてはされている方が多いかと思いますので今回は省略します。
Seleniumのインストール
Pythonのパッケージ管理ツールであるpipを使用してインストールしていきます。
pip install selenium
上記のコマンドをターミナルで実行するとSeleniumのインストールが実行されます。
WebDriverのダウンロード
Seleniumでブラウザの操作をするためにはWebDriverを準備する必要があります。
私はChromeを利用しているため、ChromeDriverをダウンロードしていきます。一応Firefoxのドライバも記載しておきます。
ドライバについてはchromeのバージョンと一致するものを選ぶ必要があります。
Chromeのバージョンを確認する方法はChromeの右上あたりの点が3つ並んだ設定ボタンから設定⇨Chromeについてを押すと記載されています。
Chromeのドライバ
Chromeのバージョンが117以降の場合はこちらからの方が分かりやすいです。
Firefoxのドライバ
私はChromeのバージョンが117、intel製CPUのMacを使用しているため、mac-x64 (x86_64)の方をダウンロードします。
もし、Apple製のCPU搭載Macを使用されている場合はmac-arm64 (Apple Silicon)を選ぶ必要があります。
ダウンロードができたらPATHを通していきます。
私の場合は/usr/local/bin/にPATHが通っているので/usr/local/bin/に移動させることで通しました。
ダウンロードに移動します
cd ~/Downloads/
chromedriverを/usr/local/bin/に移動させます。
mv chromedriver /usr/local/bin/
ホームディレクトリに移動します。
cd ~
.zshrcにパスを記載していきます。
vi .zshrc
.zshrcの末尾に下記を追加します。
export PATH="/usr/local/bin/chromedriver:$PATH"
保存したら反映させます。
source ~/.zshrc
これでパスを通っているか確認します。
chromedriver --version
下記のように出力されればOK!
ChromeDriver 117.0.5938.92
これでSeleniumの設定は以上となります。
Unittestは標準モジュールなので何もしなくても使えると思います。
以上で必要なツールやモジュールの準備は完了です。
あとはテストを作っていきます。
seleniumで画面操作を行う
まず最初にseleniumで画面操作を行っていきます。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.google.com")
print(driver.title)
driver.quit()
上記のコードをpythonのファイルに記載して実行すると自動でChromeが開き、グーグルが開いた瞬間に閉じられると思います。
また、ターミナルに開いたページのタイトルが表示されていると思います。
これでseleniumが動作していることが確認できると思います。
次にunittestで開いているページが正しいかどうか判定していきます。
import unittest
from selenium import webdriver
class TestTitle(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("https://www.google.com")
def tearDown(self):
self.driver.quit()
def test_google_title(self):
self.assertEqual(self.driver.title, "Google")
if __name__ == "__main__":
unittest.main()
上記を実行するとChromeが自動で開いた後に閉じ、ターミナルの実行結果に下記のような表示がされているかと思います。
----------------------------------------------------------------------
Ran 1 test in 3.167s
OK
上記はテストが一件実行され、問題ないことが表示されています。
失敗するとどうなるかも確認してみましょう。
7行目を下記に変更して同じように実行します。
self.driver.get("https://qiita.com/")
↓
self.driver.get("https://www.google.com")
実行すると下記のように実行結果が表示されるかと思います。
----------------------------------------------------------------------
Ran 1 test in 5.103s
FAILED (failures=1)
これでseleniumとunittestを使用した簡易的なテストができることが確認できました。
次回はopencv等を含めたビジュアルリグレッションテストについて記載していきたいと思います。