Система автоматического тестирования и непрерывной интеграции 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

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

Before running test, please ensure test dependencies are installed. This can be done by 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.