Testsuite ແລະ Continuous Integration ຂອງ Weblate

Testsuites ມີໄວ້ສຳລັບລະຫັດສ່ວນໃຫຍ່ໃນປັດຈຸບັນ, ເພີ່ມ Coverage ໂດຍການເພີ່ມ Testcases ສຳລັບຟັງຊັນໃໝ່ໃດໆ, ແລະ ຢືນຢັນວ່າມັນເຮັດວຽກ.

Continuous integration (CI)

Weblate ເພິ່ງພາ GitHub Actions ເພື່ອຮັນການທົດສອບ, ສ້າງເອກະສານ, ກວດສອບລະຫັດ (linting), ແລະ ວຽກອື່ນໆເພື່ອຮັບປະກັນຄຸນນະພາບລະຫັດ.

Codecov ເກັບກຳຂໍ້ມູນ Code coverage ຈາກການທົດສອບທີ່ຖືກຮັນ.

ມີຫຼາຍ Jobs ເພື່ອຢືນຢັນດ້ານຕ່າງໆ:

  • Unit tests ແລະ Functional tests ໂດຍໃຊ້ pytest.

  • ການສ້າງເອກະສານ ແລະ ລິງກ໌ພາຍນອກ ໂດຍໃຊ້ Sphinx.

  • ການກວດສອບລະຫັດ ແລະ ການຮັບປະກັນຄຸນນະພາບ ໂດຍໃຊ້ ruff ແລະ pylint.

  • ການສະແກນຄວາມປອດໄພລະຫັດ ໂດຍໃຊ້ CodeQL.

  • ການທົດສອບການປ່ຽນແປງທາງສາຍຕາ (Visual changes) ກຳລັງໃຊ້ Argos CI.

  • ການຈັດຮູບແບບລະຫັດໂດຍໃຊ້ prek, ການສ້າງໃໝ່ໂດຍພາກສ່ວນທີສາມທີ່ໄວກວ່າຂອງ Framework pre-commit.

  • ການທົດສອບ Migration ຈາກທຸກ Release ທີ່ຮອງຮັບ

  • ການຢືນຢັນການຕັ້ງຄ່າ (ຮັບປະກັນວ່າໄຟລ໌ dist ທີ່ສ້າງຂຶ້ນບໍ່ຂາດຫາຍໄປໃດໆ ແລະ ສາມາດທົດສອບໄດ້)

ການຕັ້ງຄ່າສຳລັບ CI ຢູ່ໃນໄດເຣັກທໍຣີ .github/workflows. ມັນໃຊ້ Helper scripts ທີ່ເກັບໄວ້ໃນໄດເຣັກທໍຣີ ci ຢ່າງໜັກໜ່ວງ. ສະຄຣິບເຫຼົ່ານີ້ສາມາດຮັນດ້ວຍຕົນເອງໄດ້ເຊັ່ນກັນ, ແຕ່ພວກມັນຕ້ອງການ Environment variables ຫຼາຍຢ່າງ, ສ່ວນໃຫຍ່ແມ່ນກຳນົດໄຟລ໌ Django settings ທີ່ຈະໃຊ້ ແລະ ການເຊື່ອມຕໍ່ຖານຂໍ້ມູນການທົດສອບ. ຕົວຢ່າງຂອງການກຳນົດນັ້ນຢູ່ໃນ scripts/test-database.sh:

ການທົດສອບພາບໜ້າຈໍ Selenium ໃນ weblate/trans/tests/test_selenium.py ມີສອງຈຸດປະສົງ. ພວກມັນສ້າງຮູບພາບສຳລັບການທົດສອບການປ່ຽນແປງທາງສາຍຕາໃນ CI, ແລະ ຮູບພາບດຽວກັນນັ້ນຖືກແປງເປັນພາບໜ້າຈໍເອກະສານໂດຍ make -C docs update-screenshots. ໃຫ້ຮັກສາ Screenshot fixtures ໄວ້ໃກ້ຄຽງກັບໜ້າເວັບທີ່ Render ອອກມາແທ້ໆ ເພື່ອໃຫ້ CI ຈັບ UI regressions ໄດ້. ເມື່ອ Screenshot ລວມມີຂໍ້ມູນ Runtime ທີ່ປ່ຽນແປງໄດ້, ໃຫ້ເລືອກ Input ການທົດສອບແບບ Server-side ທີ່ກຳນົດໄດ້ແນ່ນອນ ແທນການປ່ຽນແປງ DOM ຫຼັງຈາກ Render.

# 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

ການດຳເນີນການແບບງ່າຍໆສາມາດເປັນແບບນີ້:

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

ການທົດສອບ Weblate ໃນເຄື່ອງ (Locally)

ກ່ອນທີ່ຈະຮັນການທົດສອບ, ກະລຸນາຮັບປະກັນວ່າ Development dependencies ໄດ້ຖືກຕິດຕັ້ງແລ້ວ:

uv sync --all-extras --dev

ການທົດສອບໂດຍໃຊ້ pytest

ກ່ອນການຮັນການທົດສອບ ທ່ານຄວນເກັບກຳໄຟລ໌ Static ເພາະການທົດສອບບາງຢ່າງຕ້ອງເພິ່ງພາການມີຢູ່ຂອງໄຟລ໌ເຫຼົ່ານັ້ນ:

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

ທ່ານສາມາດໃຊ້ pytest ເພື່ອຮັນ Test suite ໃນເຄື່ອງຂອງທ່ານ:

uv run pytest

ການຮັນໄຟລ໌ທົດສອບສ່ວນບຸກຄົນ:

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

Hint

ທ່ານຈະຕ້ອງການເຊີບເວີຖານຂໍ້ມູນ (PostgreSQL) ເພື່ອໃຊ້ສຳລັບການທົດສອບ. ໂດຍປົກກະຕິ Django ຈະສ້າງຖານຂໍ້ມູນແຍກຕ່າງຫາກເພື່ອຮັນການທົດສອບດ້ວຍຄຳນຳໜ້າ test_, ສະນັ້ນໃນກໍລະນີທີ່ Settings ຂອງທ່ານຖືກຕັ້ງຄ່າໃຫ້ໃຊ້ weblate, ການທົດສອບຈະໃຊ້ຖານຂໍ້ມູນ test_weblate. ເບິ່ງ ການຕັ້ງຄ່າຖານຂໍ້ມູນສຳລັບ Weblate ສຳລັບຄຳແນະນຳການຕັ້ງຄ່າ.

weblate/settings_test.py ຍັງຖືກໃຊ້ໃນສະພາບແວດລ້ອມ CI ເຊັ່ນກັນ (ເບິ່ງ Continuous integration (CI)) ແລະ ສາມາດປັບແຕ່ງໄດ້ໂດຍໃຊ້ Environment variables:

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

ການທົດສອບຍັງສາມາດດຳເນີນການພາຍໃນ Developer docker container ໄດ້, ເບິ່ງ ການຮັນ Weblate ໃນເຄື່ອງຂອງທ່ານໂດຍໃຊ້ Docker.

See also

ເບິ່ງ Testing in Django ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການຮັນ ແລະ ຂຽນການທົດສອບສຳລັບ Django.

ການທົດສອບໂມດູນ Weblate ໃນເຄື່ອງ (Locally)

ການທົດສອບຖືກດຳເນີນການໂດຍໃຊ້ pytest. ກ່ອນອື່ນທ່ານຕ້ອງຕິດຕັ້ງ Development dependencies:

uv sync --all-extras --dev

ຈາກນັ້ນທ່ານສາມາດດຳເນີນການ Testsuite ໃນ Repository checkout:

uv run pytest

Repository ການທົດສອບ

ການທົດສອບຫຼາຍຢ່າງໃນ Weblate test suite ໃຊ້ Repository ການທົດສອບ. Test suite repository ຖືກດູແລຢູ່ https://github.com/WeblateOrg/test. ສະຄຣິບ scripts/pack-test-data.sh ຖືກໃຊ້ເພື່ອສ້າງ Tarball ພ້ອມກັບ Repository ສຳລັບລະບົບຄວບຄຸມເວີຊັນແຕ່ລະອັນທີ່ຮອງຮັບ. ສິ່ງເຫຼົ່ານີ້ຖືກເກັບໄວ້ເປັນ weblate/trans/tests/data/test-base-repo.git.tar, weblate/trans/tests/data/test-base-repo.hg.tar, ແລະ weblate/trans/tests/data/test-base-repo.svn.tar ໃນ Weblate repository.

Repository https://github.com/WeblateOrg/test ຖືກ Tag ໄວ້ໃນເວລາ Release, ເຊິ່ງຮັບປະກັນວ່າ Release tags ສາມາດໃຊ້ເພື່ອເຂົ້າເຖິງຂໍ້ມູນການທົດສອບທີ່ໃຊ້ໃນເວລາ Release ໄດ້. ສະຄຣິບພະຍາຍາມສ້າງ Tarballs ທີ່ສາມາດຜະລິດຊ້ຳໄດ້ (reproducible) ຫຼາຍທີ່ສຸດເທົ່າທີ່ຈະເປັນໄປໄດ້.