Python
で Django
を使う時のテストコードの書き方をまとめました。
目的
- ローカル環境でテストコードによるテストを実行したい
- カバレッジが確認したい
- いずれはテスト駆動開発に移行したい
環境
- Python 3.5.1
- Django 1.10.5
- caverage 4.3.4
- django-nose 1.4.4
前提条件
- Python , Django の環境はすでに構築済み
- ログイン画面やログイン後の画面の実装は完了している
手順
coverage と django-nose のインストール
pip
を使ってcoverage
と django-nose
をインストールします。
$ pip install coverage
$ pip install django-nose
settings.py 設定追加
下記の設定を settings.py
に追加します。
# django-nose, coverage configure
INSTALLED_APPS += ('django_nose',)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = [
'--with-coverage', # coverage を取る
'--cover-html', # coverage を html で cover/ に出力する
'--cover-package=app_name1, app_name2', # app_name1 と app_name2 を coverage を取得する対象アプリ名に書き換える
]
テストコードを書く
試しに画面にアクセスできるかどうかをテストするためのテストコードを書いてみます。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.test import TestCase
from accounts.models import AuthUser
@python_2_unicode_compatible
class AppName1ViewTests(TestCase): #AppName1は自身の環境に併せて変更してください
def setUp(self):
"""
テスト実行前の処理
ログイン可能なユーザを1名追加しておきます
"""
AuthUser.objects.create_user(username='test',
email='test@test.com',
password='test',
last_name=u'テスト',
first_name=u'太郎')
def test_index(self):
"""
indexの画面へアクセスできるかどうかをテストする
この画面はログインしているユーザ出ないとアクセスできません
"""
client = self.client
# まずはログインしていないユーザがアクセスした場合
response = client.get('/')
# ステータスコード:302が返却され画面にアクセスできない
self.assertEqual(response.status_code, 302)
# setUpで追加しておいたユーザでログインします
client.login(username='test', password='test')
# ログインしているユーザがアクセスした場合
response = client.get('/')
# ステータスコード:200が返却され画面にアクセスできている
self.assertEqual(response.status_code, 200)
テストを実行する
django
の manage.py
を使って実際にテストを実行して見ます。
$ python manage.py test app_name1
app_name1
は環境に併せたアプリケーション名に変更してください。
テストを実行すると・・・
nosetests dashboard --with-coverage --cover-html --cover-package=dashboard --verbosity=1
Creating test database for alias 'default'...
.
Name Stmts Miss Cover
-----------------------------------------
app_name1.py 0 0 100%
app_name1/admin.py 0 0 100%
app_name1/models.py 0 0 100%
app_name1/urls.py 4 0 100%
app_name1/views.py 10 0 100%
-----------------------------------------
TOTAL 14 0 100%
----------------------------------------------------------------------
Ran 1 test in 0.604s
OK
Destroying test database for alias 'default'...
こんな感じでテストが実行されます。
テスト成功したので、テスト結果を確認します。
テスト結果を確認する
テストが終了すると
というディレクリが生成されます。cover
その中の
というファイルをブラウザで開くと・・・index.html
こんな感じでカバレッジを確認することができます。
さらに、この画面の
をクリックすると・・・。views.py
このように、どのコードをパスしているかも確認できます。
最後に
以上、
でテストコードを書いてローカルで確認するまでの手順でした。Django
最近の開発では、テストコードを書くことが増えてきていると思いますので、よかったら参考にして見てください。
CI 環境でのテスト自動化は、また今度、手順をまとめたいと思います!!
コメント