Система автоматического тестирования и непрерывной интеграции Weblate¶
Тестами покрыта большая часть современного кода. Увеличьте это покрытия, добавляя новые тесты при добавлении какой-либо новой функциональности, дабы проверить, что она работает корректно.
Непрерывная интеграция¶
Weblate полагается на GitHub Actions для запуска тестов, сборки документации, проверки кода и других задач для обеспечения качества кода.
Codecov собирает информацию о покрытии кода из запущенных тестов.
Есть несколько задач, которые проверяют разные аспекты:
Модульные и функциональные тесты с использованием pytest.
Сборка документации и внешние ссылки с использованием Sphinx.
Проверка кода и обеспечение качества с использованием ruff и pylint.
Сканирование безопасности кода с использованием CodeQL.
Тестирование визуальных изменений использует Argos CI.
Форматирование кода с использованием prek — более быстрой сторонней реализации фреймворка pre-commit.
Проверка миграции со всех поддерживаемых релизов
Проверка установки (гарантирует, что в сгенерированных файлах всё есть и они могут быть протестированы)
Конфигурация для CI находится в каталоге .github/workflows. Она активно использует вспомогательные скрипты, хранящиеся в каталоге ci. Скрипты также можно выполнять вручную, но для этого требуются несколько переменных окружения, в основном определяющих файл настроек Django и тестовое подключение к базе данных. Пример их определения находится в scripts/test-database.sh:
Тесты скриншотов Selenium в weblate/trans/tests/test_selenium.py служат двум целям. Они генерируют изображения для тестирования визуальных изменений в CI, и эти же изображения преобразуются в скриншоты для документации с помощью make -C docs update-screenshots. Держите фикстуры скриншотов близкими к реальным отображаемым страницам, чтобы CI обнаруживал регрессии пользовательского интерфейса. Когда скриншот включает изменчивые данные времени выполнения, предпочитайте детерминированные серверные тестовые входные данные изменениям DOM после рендеринга.
# 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¶
For an isolated environment with dependencies and test services already configured, use the development container. Its CLI can run the same pytest and lint commands documented below in each Git worktree.
Перед запуском тестов убедитесь, что установлены зависимости разработки:
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 помечается тегом во время релиза, что гарантирует, что теги релиза можно использовать для доступа к тестовым данным, использовавшимся во время релиза. Сценарий пытается создавать воспроизводимые архивы насколько это возможно.