Conjunto de testes e integração contínua do Weblate

Existem conjuntos de teste para a maior parte do código atual, aumente a cobertura a adicionar casos de teste para qualquer nova funcionalidade e verifique se funciona.

Integração contínua

Weblate relies on GitHub Actions to run tests, build documentation, code linting, and other tasks to ensure code quality.

Codecov collects the code coverage information from the tests that were run.

Existem vários trabalhos para verificar diferentes aspectos:

  • Unit and functional tests using pytest.

  • Criação de documentação e hiperligações externas utilizando Sphinx.

  • Code linting and quality assurance using ruff and pylint.

  • Code security scanning using CodeQL.

  • Visual changes testing is utilizing Argos CI.

  • Code formatting using prek, a faster third-party reimplementation of the pre-commit framework.

  • Testes de migração de todas as versões com suporte

  • Verificação de configuração (garante que os ficheiros dist gerados não percam nada e possam ser testados)

A configuração do CI está no diretório .github/workflows. Usa muitos scripts auxiliares armazenados no diretório ci. Os scripts também podem ser executados manualmente, mas requerem várias variáveis de ambiente, principalmente definindo o ficheiro de configurações do Django para usar e conexão com a base de dados de teste. A definição de exemplo disso está em scripts/test-database.sh:

Os testes de captura de ecrã do Selenium em weblate/trans/tests/test_selenium.py tem duas finalidades. Eles geram imagens para testes de mudanças visuais em CI, e as mesmas imagens são convertidas em capturas de ecrã de documentação por make -C docs update-screenshots. Mantenha os testes de captura de ecrã o mais próximos possível das páginas renderizadas reais, para que a CI detete regressões na interface do utilizador. Quando uma captura de ecrã inclui dados de execução voláteis, prefere entradas do servidor determinísticas do que mudanças de pós renderização DOM.

# 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 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

A execução simples pode ser semelhante a:

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

Local testing of Weblate

Antes de executar testes, certifique-se de que as dependências de desenvolvimento estão instaladas:

uv sync --all-extras --dev

Experimentar utilizando pytest

Antes de executar os testes, deve coletar ficheiros estáticos, pois alguns testes contam com a presença deles:

DJANGO_SETTINGS_MODULE=weblate.settings_test uv run ./manage.py collectstatic --noinput

You can use pytest to run the test suite locally:

uv run pytest

Executando um ficheiro de teste individual:

uv run pytest weblate/utils/tests/test_search.py

Dica

Precisará de um servidor de bases de dados (PostgreSQL) a ser usado para os testes. Por padrão, o Django cria uma base de dados separada para executar testes com o prefixo test_, então no caso que as suas configurações estarem configuradas para usar weblate, os testes usarão a base de dados test_weblate. Veja Configuração da base de dados para o Weblate para instruções de configuração.

O weblate/settings_test.py é usado no ambiente CI também (veja Integração contínua) e pode ser ajustado a usar variáveis de ambiente:

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

Dica

Os testes também podem ser executados dentro de um contentor Docker do programador, consulte Executando Weblate localmente no Docker.

Veja também

Veja Testing in Django para mais informações sobre a execução e escrita de testes para Django.

Testar localmente os módulos do Weblate

The tests are executed using pytest. First you need to install development dependencies:

uv sync --all-extras --dev

Pode então executar o testsuite no checkout do repositório:

uv run pytest

Testing repository

Muitos dos testes no conjunto de testes Weblate usam o repositório de teste. O repositório de conjuntos de testes é mantido em https://github.com/WeblateOrg/test. O script scripts/pack-test-data.sh é usado para gerar uma tarball com o repositório de cada sistema de versão de controlo suportado. Estes são armazenados como 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 no repositório Weblate.

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.