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%
This commit is contained in:
Oliver Falk
2025-10-16 19:54:53 +02:00
parent 9767ebf110
commit e6596b925a

View File

@@ -1,34 +1,46 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" """
Run tests with OpenTelemetry enabled and coverage measurement. Run tests with OpenTelemetry enabled and coverage measurement.
This script is designed to be used with 'coverage run' command. This script is designed to be used with 'coverage run' command.
""" """
import os import os
import subprocess
import sys import sys
import django
from django.conf import settings
from django.test.utils import get_runner
def main(): def main():
# Enable OpenTelemetry # Enable OpenTelemetry
os.environ['ENABLE_OPENTELEMETRY'] = 'true' os.environ["ENABLE_OPENTELEMETRY"] = "true"
os.environ['OTEL_ENABLED'] = 'true' os.environ["OTEL_ENABLED"] = "true"
os.environ['OTEL_SERVICE_NAME'] = 'ivatar-test' os.environ["OTEL_SERVICE_NAME"] = "ivatar-test"
os.environ['OTEL_ENVIRONMENT'] = 'test' os.environ["OTEL_ENVIRONMENT"] = "test"
print("Running tests with OpenTelemetry enabled...") print("Running tests with OpenTelemetry enabled...")
print("==========================================") print("==========================================")
# Run Django tests (Django will auto-discover all tests) # Setup Django
cmd = ['python3', 'manage.py', 'test', '-v2'] os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ivatar.settings")
django.setup()
try: # Get Django test runner
result = subprocess.run(cmd, check=True) 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("")
print("Tests completed successfully (OpenTelemetry enabled)") print("Tests completed successfully (OpenTelemetry enabled)")
return result.returncode return 0
except subprocess.CalledProcessError as e:
print(f"Tests failed with exit code {e.returncode}")
return e.returncode
if __name__ == '__main__':
if __name__ == "__main__":
sys.exit(main()) sys.exit(main())