Система автоматического тестирования и непрерывной интеграции Weblate¶
Тестами покрыта большая часть современного кода. Увеличьте это покрытия, добавляя новые тесты при добавлении какой-либо новой функциональности, дабы проверить, что она работает корректно.
Непрерывная интеграция¶
Weblate полагается на GitHub Actions для запуска тестов, сборки документации, проверки кода и других задач для обеспечения качества кода.
Codecov собирает информацию о покрытии кода из запущенных тестов.
Есть несколько задач, которые проверяют разные аспекты:
Модульные и функциональные тесты с использованием pytest.
Сборка документации и внешние ссылки с использованием Sphinx.
Проверка кода и обеспечение качества с использованием ruff и pylint.
Сканирование безопасности кода с использованием CodeQL.
Тестирование визуальных изменений использует Argos CI.
Форматирование кода с использованием prek, более быстрой сторонней реализации фреймворка pre-commit.
Проверка миграции со всех поддерживаемых релизов
Проверка установки (гарантирует, что в сгенерированных файлах всё есть и они могут быть протестированы)
Конфигурация для CI находится в каталоге .github/workflows. Она активно использует вспомогательные скрипты, хранящиеся в каталоге ci. Скрипты также можно выполнять вручную, но для этого требуются несколько переменных окружения, в основном определяющих файл настроек Django и тестовое подключение к базе данных. Пример их определения находится в 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 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
Локальное тестирование Weblate¶
Перед запуском тестов убедитесь, что установлены зависимости разработки:
uv sync --all-extras --dev
Тестирование с помощью pytest¶
До того как запустить тесты, надо сначала собрать статические файлы, так как они нужны для некоторых из них:
DJANGO_SETTINGS_MODULE=weblate.settings_test uv run ./manage.py collectstatic --noinput
Вы можете использовать pytest для локального запуска набора тестов:
uv run pytest
Запуск отдельного тестового файла:
uv run pytest weblate/utils/tests/test_search.py
Подсказка
Вам потребуется сервер базы данных (PostgreSQL), который будет использоваться для тестов. По умолчанию Django создаёт отдельную базу данных для запуска тестов (с префиксом test_). Например, если в ваших настройках используется база данных weblate, то тесты будут запускаться с базой данных test_weblate. Смотрите подробности по настройке в главе Настройка базы данных для Weblate.
При конфигурации среды непрерывной интеграции также используется weblate/settings_test.py (смотреть раздел Непрерывная интеграция), его параметры можно поменять через переменные среды:
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-контейнера для разработки, смотреть раздел Запуск Weblate локально внутри Doсker.
См. также
Смотрите подробности о том, как писать и запускать тесты в документации Django: Testing in Django.
Локальное тестирование модулей Weblate¶
Тесты выполняются с помощью pytest. Сначала вам нужно установить зависимости разработки:
uv sync --all-extras --dev
Затем вы можете выполнить набор тестов при проверке репозитория:
uv run pytest
Тестовый репозиторий¶
Многие тесты в наборе тестов Weblate используют тестовый репозиторий. Репозиторий набора тестов поддерживается по адресу https://github.com/WeblateOrg/test. Затем сценарий scripts/pack-test-data.sh используется для генерации тарбалла с репозиторием для каждой из поддерживаемых систем контроля версий. Они хранятся как weblate/trans/tests/data/test-base-repo.git.tar, weblate/trans/tests/data/test-base-repo.hg.tar и weblate/trans/tests/data/test-base-repo.svn.tar в репозитории Weblate.
Репозиторий https://github.com/WeblateOrg/test помечается тегом во время релиза, что гарантирует, что теги релиза можно использовать для доступа к тестовым данным, использовавшимся во время релиза. Сценарий пытается создавать воспроизводимые архивы насколько это возможно.