9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python】【Selenium-webdriver】Webテスト自動化の第1歩

Last updated at Posted at 2019-07-04

概要

Webの目視テストが苦手なので、PythonのWebアプリでのテストをSeleniumで自動化しよう。という話の初歩です。

環境

  • Python 3.7
  • Chrome 75.0
  • Django 2.2.2

手順

テストしたいWebアプリの構築

DjangoによるWebアプリケーション開発入門を参考にして、「Hello World!」を表示するだけのWebアプリを作成。

Selenium-webdriverの導入

pip install selenium

chrome-binaryの導入

【Python】SeleniumでHeadless Chromeを使おうの記事を参考にして導入。
SeleniumでChromeを動かす場合は必要です。
インストールしているChromeとバージョンが異なると起動しないので、Chromeのバージョンは要確認。
今回はインストールしているChromeのバージョンが75.0なので、同じメジャーバージョンのchrome-binaryをバージョン指定で導入。

pip install chromedriver-binary==75.0.3770.8.0

SeleniumBaseの導入

Awesome Selenium : 素晴しい Selenium ライブラリの数々を参考に導入。
pytestコマンドを使ってseleniumでのテストを自動実行するためのフレームワーク。

pip install seleniumbase

テストコードの作成

  1. テスト用のコードは別に分けておくことが一般的なので、プロジェクトのルートにtestsディレクトリを作成
  2. ユニットテストと切り分けるため、testsディレクトリ内にseleniumディレクトリを作成
  3. SeleniumBaseのリポジトリexampleディレクトリを参考にsetup.cfgファイルを(プロジェクトのルート)/tests/seleniumディレクトリ内に作成(このファイルが無いとテストの実行自体に失敗します)
  4. 実施したいテストコードを記述した.pyファイルを(プロジェクトのルート)/tests/seleniumディレクトリ内に作成
    今回はHello World!の表示を確認したいのでhello_tests.pyというファイルを作成
from seleniumbase import BaseCase
import chromedriver_binary

class HelloTestClass(BaseCase):
    BASE_URL = 'http://127.0.0.1:8000/'

    def test_hello(self):
        self.open(self.BASE_URL + 'hello/')
        self.assert_text('Hello World!', 'body')

テストの実行

  • (今更かもしれませんが)DjangoのWebアプリケーションを立ち上げる
python mysite/manage.py runserver
  • pytestコマンドからSeleniumの自動テストを実行する
    • --browser=BROWSERオプション:BROWSER部分に実行するブラウザを指定。今回はChromeを使うので--browser=chromeで指定する。
    • --headlessオプション:このオプションを付けると、ヘッドレスモードで実行。
cd ./tests/selenium
pytest hello_tests.py --browser=chrome --headless
  • 実行結果を確認する
    キャプチャ.PNG

追記

公式ドキュメントをよく読んでみたら、こんな項が……
Django におけるテスト

django.testパッケージ内のSimpleTestCaseクラス、またはそのサブクラスを継承するテストクラスを定義することで、Webサーバを起動せずにWebアプリの基本的なテストを実行できる。

アプリケーション内にテストクラスを定義した場合の実行コマンドは

[プロジェクトのディレクトリ]/manage.py test [テスト対象のアプリケーション]

テストクラスを別パッケージに分けた場合の実行コマンドは

[プロジェクトのディレクトリ]/manage.py test [テストクラスのパッケージのディレクトリ]

でテストを実行できる。

アプリケーション単位にテストクラスを定義する場合は、アプリケーションのディレクトリ内にtests.pyを作成し、その中に定義するのが慣習。
デフォルトのテストスクリプトのファイル検出パターンはtest*.py
テストスクリプトのファイル検出パターンを変更する場合は--pattern=[ファイル名パターン]または-p=[ファイル名パターン]で指定する。
Seleniumを用いない単純なテストなら、こちらの方が実装は簡単そうです。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?