テクデップ(Techdep)

コンピュータ、プログラミング、DTP(InDesign)に関する備忘録

Python向けのヘッドレステスト環境の構築

Django等でheadless test(GUIブラウザを利用しないウェブアプリケーションのテスト)を実行するための環境構築の覚書。尚、筆者の環境は以下の様になって居る。

準備

seleniumの導入

pip install selenium

PhantomJSの導入

このサイト(http://phantomjs.org/)から導入する。導入後、パスを通しておく。

動作確認

seleniumの動作確認

下記の様なコードを書いて、適当な名前で保存しよう。このコードではFirefoxを起動させて、Python公式ページで検索して、Firefoxを終了させるまでを記述して居る。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# ブラウザの指定
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title

# テキスト欄への入力
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source

# ブラウザの終了
driver.close()

実行方法は次の通り。Firefoxが勝手に起動して、自動で検索をしてくれるはず。

python selenium-test.py

PhantomJSの動作確認

下の様なJavaScriptコードを書いて、“test.js”として保存しよう。

console.log("2 + 2 = ?");
phantom.exit();

コマンドライン上で動作確認する。“2 + 2 = ?”と表示されれば問題ない。

phantomjs test.js

テストコード化

動作確認が済んだらそれぞれを組合せて、テストコードを記述していく。今回はPythonのunittestを使用する。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class TestPage(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.PhantomJS()     

    def test_search_in_python_org(self):
        self.driver.get("http://www.python.org")
        assert "Python" in driver.title

        # テキスト欄への入力
        elem = self.driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def tearDown(self):
        self.driver.close()

Django等のウェブフレームワークでの利用

  • 接続先を“localhost”にして試験内容を記述する。
  • Djangoのローカルサーバを立ち上げて、テストコードを実行する