Комплекс тестування 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 -e .[test].

Testing using pytest

Перш ніж запускати тести, вам слід зібрати статичні файли, оскільки робота деяких тестів залежить від наявності цих файлів:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic

You can use pytest to run a testsuite locally:

pytest weblate

Running an individual test file:

pytest weblate/utils/tests/test_search.py

Testing using Django

Alternatively, Django built-in tests should also work:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test

Підказка

Для тестів вам знадобиться сервер бази даних (PostgreSQL). Типово, Django створює окрему базу даних для запуску тестів. У назві цієї бази даних міститься префікс test_. Отже, якщо параметри налаштовано на використання weblate, для тестування буде використано базу даних test_weblate. Див. Налаштування бази даних для Weblate, щоб дізнатися більше про налаштовування.

Файл weblate/settings_test.py також використовується у середовищі неперервної інтеграції (див. Неперервна інтеграція). Його роботу можна скоригувати за допомогою змінних середовища:

export CI_DATABASE=postgresql
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

Перш ніж запускати тести, вам слід зібрати статичні файли, оскільки робота деяких тестів залежить від наявності цих файлів:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic

Ви також можете вказати окремі тести, які слід виконати:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test weblate.gitexport

Підказка

Тести також можна запускати у межах контейнера docker розробника, див. Запуск Weblate локально у Docker.

Дивись також

Див. Testing in Django, щоб дізнатися більше про запуск і написання тестів для Django.