Python向けのヘッドレステスト環境の構築
Django等でheadless test(GUIブラウザを利用しないウェブアプリケーションのテスト)を実行するための環境構築の覚書。尚、筆者の環境は以下の様になって居る。
動作確認
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()