Система автоматического тестирования и непрерывной интеграции Weblate

Тестами покрыта большая часть современного кода. Увеличьте это покрытия, добавляя новые тесты при добавлении какой-либо новой функциональности, дабы проверить, что она работает корректно.

Непрерывная интеграция

Current test results can be found on GitHub Actions and coverage is reported on 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

Запуск тестов локально

Чтобы запустить тесты локально, выполните:

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.