Система автоматического тестирования и непрерывной интеграции Weblate#
Тестами покрыта большая часть современного кода. Увеличьте это покрытия, добавляя новые тесты при добавлении какой-либо новой функциональности, дабы проверить, что она работает корректно.
Непрерывная интеграция#
Текущие результаты тестирования можно найти на странице GitHub Actions, а информация о покрытии представлена на Codecov.
Есть несколько задач, которые проверяют разные аспекты:
Модульное тестирование
Сборка и внешние ссылки в документации
Проверка миграции со всех поддерживаемых релизов
Проверка исходного кода (линтинг)
Проверка установки (гарантирует, что в сгенерированных файлах всё есть и они могут быть протестированы)
Настройки для системы непрерывной интеграции расположены в каталоге .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 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
Простой запуск может выглядеть как:
. scripts/test-database.sh
./ci/run-migrate
./ci/run-test
./ci/run-docs
Запуск тестов локально#
Пожалуйста, прежде, чем прогонять тест, убедитесь, что тестовые зависимости установлены. Этого можно добиться, выполнив pip install -r requirements-dev.txt или pip install -e .[test].
Чтобы запустить тесты локально, выполните:
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test
Подсказка
Вам потребуется сервер базы данных (PostgreSQL), который будет использоваться для тестов. По умолчанию Django создаёт отдельную базу данных для запуска тестов (с префиксом test_
). Например, если в ваших настройках используется база данных weblate
, то тесты будут запускаться с базой данных test_weblate
. Смотрите подробности по настройке в главе Настройка базы данных для Weblate.
При конфигурации среды непрерывной интеграции также используется weblate/settings_test.py
(смотреть раздел Непрерывная интеграция), его параметры можно поменять через переменные среды:
# 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
До того как запустить тесты, надо сначала собрать статические файлы, так как они нужны для некоторых из них:
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic
Вы также можете запустить только определенные тесты:
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test weblate.gitexport
Подсказка
Тесты можно также запустить внутри docker-контейнера для разработки, смотреть раздел Запуск Weblate локально внутри Doсker.
См.также
Смотрите подробности о том, как писать и запускать тесты в документации Django: Testing in Django.