Weblate テストスイートと継続的な連携¶
現在、ほぼすべてのコードにテストスイートがあります。新しい機能のテストケースを追加し、検査対象を増やして動作を検証します。
継続的な連携¶
現在のテスト結果は GitHub Actions で確認でき、カバレッジは Codecov で報告されます。
さまざまな側面を検証するためのジョブ:
単体テスト
ドキュメントの作成と外部リンク
対応しているすべてのリリースからの移行テスト
低品質コードの検出
設定の検証(生成された dist ファイルに間違いがなく、テスト済みを保証する)
The configuration for the CI is in .github/workflows
directory. It
heavily uses helper scripts stored in ci
directory. The scripts can be
also executed manually, but they require several environment variables, mostly
defining Django settings file to use and test database connection. The example
definition of that is in scripts/test-database.sh
:
# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
# Simple way to configure test database from environment
# shellcheck shell=sh
# Database backend to use postgresql / mysql / mariadb
export CI_DATABASE="${1:-postgresql}"
# Database server configuration
export CI_DB_USER=weblate
export CI_DB_PASSWORD=weblate
export CI_DB_HOST=127.0.0.1
# Django settings module to use
export DJANGO_SETTINGS_MODULE=weblate.settings_test
単純な実行例:
source scripts/test-database.sh
./ci/run-migrate
./ci/run-test
./ci/run-docs
ローカル テスト¶
テストを実行する前に、テストの依存関係がインストールされていることを確認してください。これは、pip install -e .[test]
によって実行できます。
pytest を使用したテスト¶
テストを実行する前に、静的ファイルの収集が必要です。テストによっては、静的ファイルの存在に依存しているためです。静的ファイルの収集方法:
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic
pytest を使用してテストスイートをローカルで実行するコマンド:
pytest weblate
個々のテストファイルの実行:
pytest weblate/utils/tests/test_search.py
ヒント
テストには、使用するデータベース(PostgreSQL)サーバーが必要です。デフォルトでは、Django はテストを実行するために、接頭辞 test_
を付けた別のデータベースを作成します。そのため、weblate
を使用するように設定している場合、テストには test_weblate
データベースを使用します。設定方法については、Weblate のデータベース設定 を確認してください。
weblate/settings_test.py
は CI 環境でも使用されます(参照: 継続的な連携)。環境変数を用いた設定方法:
export CI_DATABASE=postgresql
export CI_DB_USER=weblate
export CI_DB_PASSWORD=weblate
export CI_DB_HOST=127.0.0.1
export CI_DB_PORT=60000
export DJANGO_SETTINGS_MODULE=weblate.settings_test
ヒント
テストは、開発者の Docker コンテナ内でも実行できます。参照: Docker上でローカルに Weblate の実行。
参考
Django の実行と書き込みテストの詳細については、Django におけるテスト を確認してください。