Weblate testsuite en doorlopende integratie

Testsuites bestaan voor de meeste huidige code, verhogen dekking door toevoegen van testgevallen voor nieuwe functionaliteit, en verifiëren dat het werkt.

Doorlopende integratie

Weblate vertrouwt op GitHub Actions om testen uit te voeren, documentatie te bouwen, uitpluizen van code en ander taken om de kwaliteit van de code te verzekeren.

Codecov verzamelt de informatie over de bedekking van de code uit de testen die we uitvoeren.

Er zijn verscheidene taken om verschillende aspecten te verifiëren:

  • Unit and functional tests using pytest.

  • Documentation build and external links using Sphinx.

  • Code linting and quality assurance using ruff and pylint.

  • Code security scanning using CodeQL.

  • Code formatting using pre-commit.

  • Testen van migratie in alle ondersteunde uitgaven

  • Verificatie opstelling (zorgt ervoor dat gegenereerde bestanden voor de distributie niets missen en kunnen worden getest)

De configuratie voor de CI staat in de map .github/workflows. Het gebruikt in hoge mate hulpscripts die zijn opgeslagen in de map ci. De scripts kunnen ook handmatig worden uitgevoerd, maar zij vereisen verscheidene omgevingsvariabelen, die meestal het te gebruiken instellingenbestand voor Django definieert en de verbinding naar de database test. De voorbeelddefinitie daarvan staat in 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

De eenvoudige uitvoering kan er uitzien als:

source scripts/test-database.sh
./ci/run-migrate
./ci/run-test
./ci/run-docs

Lokaal testen van Weblate

Zorg ervoor, voor het uitvoeren van testen, dat de afhankelijkheden voor testen zijn geïnstalleerd. Dat kan worden gedaan met pip install -e .[test].

Testen met pytest

Voorafgaande aan het testen zou u statische bestanden moeten verzamelen, omdat enkele testen erop vertrouwen dat die aanwezig zijn:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic

U kunt pytest gebruiken om een testsuite lokaal uit te voeren:

pytest weblate

Uitvoeren van een individueel testbestand:

pytest weblate/utils/tests/test_search.py

Hint

U zult een databaseserver (PostgreSQL) nodig hebben om te gebruiken voor de testen. Standaard maakt Django een afzonderlijke database, om testen mee uit te voeren, met het voorvoegsel test_, dus in het geval uw instellingen zijn geconfigureerd om weblate te gebruiken, zullen de testen de database test_weblate gebruiken. Bekijk Instellingen database voor Weblate voor instructies voor het instellen.

Het bestand weblate/settings_test.py wordt ook gebruikt in de omgeving van CI (bekijk Doorlopende integratie) en kan fijn worden afgestemd met omgevingsvariabelen:

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

Hint

De testen kunnen ook worden uitgevoerd binnen de Docker container voor ontwikkeling, bekijk Weblate lokaal in Docker uitvoeren.

Zie ook

Bekijk Testing in Django voor meer informatie over het uitvoeren en schrijven van testen voor Django.

Lokaal testen van modules voor Weblate

De testen worden uitgevoerd met py.test. Eerst moet u vereisten voor de testen installeren:

uv pip install -e '.[dev]'

U kunt dan de testsuite uitvoeren in de checkout van de opslagruimte:

py.test

Testing repository

Many of the tests in the Weblate test suite use the test repository. The test suite repository is maintained at https://github.com/WeblateOrg/test. The script scripts/pack-test-data.sh is then used to generate a tarball with a repository for each of the supported version control systems. These are stored as weblate/trans/tests/data/test-base-repo.git.tar, weblate/trans/tests/data/test-base-repo.hg.tar, and weblate/trans/tests/data/test-base-repo.svn.tar in the Weblate repository.

The https://github.com/WeblateOrg/test repository is tagged at the release time, which ensures that the release tags can be used to access test data used at the release time. The script tries to create reproducible tarballs as much as possible.