はじめに
jenkinsでdjangoを使用したアプリケーションのunitestを行う手順を記述します
unittestを行うサンプルアプリケーションはgithubに公開しています
前提事項
- サンプルアプリケーションの詳細はバッチアプリケーション(django)を参照ください
- jenkinsは2.150.2を使用します
unittest(django)
バッチアプリケーション(django)をベースにunittestを行う手順を説明します
ソフトウェア/アプリケーション構成
Jenkinsのプラグイン
jenkinsに以下をインストールします
プラグイン | 用途 |
---|---|
ShiningPanda Plugin | Virtualenv Builder。仮想環境でpythonを実行する |
Cobertura Plugin | カバレッジレポートを作成する |
Jenkinsのpythonパス
jenkinsの「Global Tool Configuration」でシステム環境のpythonパスを設定します
Jenkinsのジョブ設定
Jenkinsでジョブを作成してdjangoのunittestを実行します
ソースコード管理
仮想環境でビルド等を行うためリポジトリ情報を入力します
項目 | 内容 |
---|---|
リポジトリURL | リポジトリURLを入力します |
ビルドするブランチ | ビルド対象のブランチを入力します |
ビルド
Virtualenv Builder
従来の環境と競合しないようにVirtualenvを使用して仮想環境でunittestを実行します
項目 | 内容 |
---|---|
Python version | Pythonパスを選択します |
Clear | チェックすると仮想環境は毎回再作成します |
Nature | Commandの実行形式を指定します |
Command | unittestを実行するコマンドを記述します |
Commandサンプルは以下のとおりです
#pythonのモジュールをインストールする
pip install beautifulsoup4==4.6.0
pip install Django==2.1.5
pip install django-admin-tools==0.8.1
pip install django-bootstrap-form==3.4
pip install lxml==4.3.0
pip install mysqlclient==1.3.12
pip install pytz==2018.9
pip install PyYAML==3.12
pip install pytest==4.1.1
pip install pytest-cov==2.6.1
pip install pytest-django==3.4.5
#gitからcloneしたパスに合わせて設定ファイルの書き換えを行う
JENKINS_HOME=/var/lib/jenkins/workspace/unittest_pypeach_django
CONF_FILE=application_production.yml
sed -e "s/home\/pypeach/var\/lib\/jenkins\/workspace\/unittest_pypeach_django/g" ${JENKINS_HOME}/resource/${CONF_FILE} > ${JENKINS_HOME}/resource/${CONF_FILE}.tmp
cat ${JENKINS_HOME}/resource/${CONF_FILE}.tmp > ${JENKINS_HOME}/resource/${CONF_FILE}
#メッセージを作成する
django-admin compilemessages -l ja
#unittestを実行する
pytest --ds=pypeach_django.settings --reuse-db --junitxml=unittest.xml app_pypeach_django/test
#カバレッジを実行する
pytest --ds=pypeach_django.settings --reuse-db --cov=app_pypeach_django/test --cov-report=xml
pytest-django
pytest-djangoを使用してコマンドラインでunittestを行います
テスト実行
pytest --ds=[settings] --[database creation/re-use] --junitxml=[creating JUnitXML format files] [selecting tests]
例)pytest --ds=pypeach_django.settings --reuse-db --junitxml=unittest.xml app_pypeach_django/test
項目 | 内容 |
---|---|
settings | 設定ファイル名を指定する |
database creation/re-use | DBの新規作成や既存DB使用を指定する |
creating JUnitXML format files | テスト実行結果を出力するパスとファイル名を指定する |
selecting tests | テスト実行対象を指定する。単一ファイルやパッケージ指定ができる |
カバレッジ実行
pytest --ds=[settings] --[database creation/re-use] --cov=[selecting tests] --cov-report=[file extension]
例)pytest --ds=pypeach_django.settings --reuse-db --cov=app_pypeach_django/test --cov-report=xml
項目 | 内容 |
---|---|
settings | テスト実行と同じ |
database creation/re-use | テスト実行と同じ |
selecting tests | テスト実行対象を指定する 単一ファイルやパッケージ指定ができる |
file extension | テスト実行結果を出力するファイルの拡張子を指定する |
ビルド後の処理
テスト結果を集計します
Junitテスト結果の集計
以下をセットする
項目 | 内容 |
---|---|
テスト結果XML | テスト結果のファイルを指定する。 creating JUnitXML format filesとファイルパスを合わせます |
Coberturaカバレッジ・レポートの集計
以下をセットする
項目 | 内容 |
---|---|
Cobertura XMLレポート パターン | テスト結果のファイル(coverage.xml)を指定する。 file extensionのファイル拡張子と合わせます |