Django + nose + selenium in ubuntu で自動テスト環境を整える

環境

Python2.6 + Django1.2 + Ubuntu10
など

使うもの

nose

Pythonのunittestをもっと簡単にできるように拡張したもの。プラグインなど簡単に作成する事ができ拡張性も高い
http://somethingaboutorange.com/mrl/projects/nose/1.0.0/

django-nose-selenium

djangoとnoseとseleniumでテストやるためのもの。documentに書かれていない罠が結構ある
https://github.com/weluse/django-nose-selenium

Xvfb

仮想的な X を立ち上げることで、実際に X を起動しておかなくても X を使用した処理を行うことが出来るようにするためのライブラリ
http://en.wikipedia.org/wiki/Xvfb

環境構築

$ sudo pip install nose
$ sudo pip install django-nose-selenium
$ sudo pip install cherrypy
使うsettingsを指定しておく
$ export DJANGO_SETTINGS_MODULE=shohu_settings
$ export PYTHONPATH=/PROJECT_ROOT/:$PYTHONPATH
Firefoxインスコ
$ sudo apt-get install firefox
Xvfbインスコ
$ sudo apt-get install xvfb
FirefoxをX上で動かすための設定
$ export DISPLAY=1.0
$ Xvfb :1 -screen 0 1024x768x24 > /dev/null &
※Firefox起動確認を参考URLを元にしておく

ここまででUbuntu Server上でFirefoxが起動できるようになっているはず。
次にSeleniumサーバーを動かしておく

wget http://selenium.googlecode.com/files/selenium-server-standalone-2.0b1.jar
java -jar selenium-server-standalone-2.0b1.jar > /tmp/selenium.log 2>&1 & 

ここまででDjango+nose+seleniumを使う環境は整ったはず。

ソースと実行

テストクラス
vi tests.py
-----
# -*- coding: utf-8 -*-
import unittest

class TestSelenium(unittest.TestCase):

    selenium_test = True
    start_live_server = True
    
    def test_start(self):
        """Tests the start page."""
        self.selenium.open("/")
        self.failUnless(self.selenium.is_text_present(u"ようこそテストサイトへ!"))
-----

start_live_server = True にしていないと

    • with-djangoliveserver(テスト時のみのDjangoサーバー立ち上げる)
    • with-cherrypyliveserve(Cherrpyを使用してテスト時のみのサーバー立ち上げる)

を指定してもテスト実行時にサーバーがたちあがらないので必ず指定する事。
ただ--with-djangoliveserverはうまく動かなかったのでcherrypyの方で実行した。

実行
$ nosetests --with-selenium --with-cherrypyliveserver tests.py
ok
----------------------------------------------------------------------
Ran 1 test in 9.140s
OK
Finished: SUCCESS

nosetestsを実行すると

1.テスト中にDjangoアプリケーションがサーバーとしてたちあがる
2.仮想X上でFirefoxが起動して"/"(ルート)にアクセスする
3.”ようこそテストサイトへ!”の文字が表示されているかチェックする

という事を行ってくれる。

以上でDjango+nose+seleniumで自動テスト環境が整った。
これにHudsonを使う事によって統合テストの自動化環境が整う。