python - ¿Por qué cover.py no mide correctamente el comando runserver de Django?
coverage.py (1)
Debería saber la respuesta a esto, pero no lo hago: si intentas medir la cobertura de un proyecto de Django como este:
coverage run manage.py runserver
obtiene una medición de cobertura que pierde todo su código real. Algo temprano en el proceso es detener la medición, o todo el trabajo real sucede en un nuevo contexto que no se mide en absoluto.
¿Alguien me puede indicar el punto específico del proceso en el que se rompe la medición, de modo que pueda tratar de corregir la cobertura.py para que se mida correctamente de la manera que la gente espera?
¿Obtienes el mismo problema si corres de la siguiente manera?
coverage run manage.py runserver --noreload
Sin --noreload
, se inicia otro proceso detrás de las escenas. Un proceso ejecuta el servidor, el otro busca cambios en el código y reinicia el servidor cuando se realizan los cambios. Lo más probable es que esté ejecutando la cobertura en el proceso de monitoreo en lugar del proceso de servicio.
Mire django/core/management/commands/runserver.py
y django/utils/autoreload.py
.
Actualización: Ejecuté el comando de cobertura, luego usé ps
y lsof
para ver lo que estaba sucediendo. Esto es lo que observé:
ps output:
UID PID PPID C STIME TTY TIME CMD
vinay 12081 2098 0 16:37 pts/0 00:00:00 /home/vinay/.virtualenvs/watfest/bin/python /home/vinay/.virtualenvs/watfest/bin/coverage run manage.py runserver
vinay 12082 12081 2 16:37 pts/0 00:00:01 /home/vinay/.virtualenvs/watfest/bin/python manage.py runserver
lsof output:
python 12082 vinay 5u IPv4 48294 0t0 TCP localhost:8000 (LISTEN)
IOW, incluso antes de cualquier recarga, hay dos procesos, y el que escucha en el puerto TCP no es el que se está ejecutando la cobertura.
Esto es lo que veo con --noreload
:
ps output:
UID PID PPID C STIME TTY TIME CMD
vinay 12140 2098 5 16:44 pts/0 00:00:00 /home/vinay/.virtualenvs/watfest/bin/python /home/vinay/.virtualenvs/watfest/bin/coverage run manage.py runserver --noreload
lsof output:
coverage 12140 vinay 4u IPv4 51995 0t0 TCP localhost:8000 (LISTEN)
Entonces, no es obvio por qué la cobertura no funcionaría en el caso de --noreload
. En mi breve prueba con --noreload
, obtuve la cobertura de mi código de vista, como se muestra en el siguiente extracto:
festival/__init__ 8 7 13%
manage 9 4 56%
settings 33 1 97%