From e6596b925a35d05b566ed178e0d10f417cedea5d Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Thu, 16 Oct 2025 19:54:53 +0200 Subject: [PATCH] Fix coverage measurement in CI - Replace subprocess call with direct Django test runner invocation - This allows coverage tool to properly track test execution - Use django.setup() and get_runner() to run tests directly - Coverage should now show proper test coverage instead of 1% --- scripts/run_tests_with_coverage.py | 46 +++++++++++++++++++----------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/scripts/run_tests_with_coverage.py b/scripts/run_tests_with_coverage.py index e4d0efe..d1e9699 100755 --- a/scripts/run_tests_with_coverage.py +++ b/scripts/run_tests_with_coverage.py @@ -1,34 +1,46 @@ #!/usr/bin/env python3 +# -*- coding: utf-8 -*- """ Run tests with OpenTelemetry enabled and coverage measurement. This script is designed to be used with 'coverage run' command. """ import os -import subprocess import sys +import django +from django.conf import settings +from django.test.utils import get_runner + def main(): # Enable OpenTelemetry - os.environ['ENABLE_OPENTELEMETRY'] = 'true' - os.environ['OTEL_ENABLED'] = 'true' - os.environ['OTEL_SERVICE_NAME'] = 'ivatar-test' - os.environ['OTEL_ENVIRONMENT'] = 'test' - + os.environ["ENABLE_OPENTELEMETRY"] = "true" + os.environ["OTEL_ENABLED"] = "true" + os.environ["OTEL_SERVICE_NAME"] = "ivatar-test" + os.environ["OTEL_ENVIRONMENT"] = "test" + print("Running tests with OpenTelemetry enabled...") print("==========================================") - - # Run Django tests (Django will auto-discover all tests) - cmd = ['python3', 'manage.py', 'test', '-v2'] - - try: - result = subprocess.run(cmd, check=True) + + # Setup Django + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ivatar.settings") + django.setup() + + # Get Django test runner + TestRunner = get_runner(settings) + test_runner = TestRunner() + + # Run tests + failures = test_runner.run_tests([]) + + if failures: + print(f"Tests failed with {failures} failures") + return 1 + else: print("") print("Tests completed successfully (OpenTelemetry enabled)") - return result.returncode - except subprocess.CalledProcessError as e: - print(f"Tests failed with exit code {e.returncode}") - return e.returncode + return 0 -if __name__ == '__main__': + +if __name__ == "__main__": sys.exit(main())