Система автоматического тестирования и непрерывной интеграции 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 помечается тегом во время релиза, что гарантирует, что теги релиза можно использовать для доступа к тестовым данным, использовавшимся во время релиза. Сценарий пытается создавать воспроизводимые архивы насколько это возможно.