#python #python-3.x #unit-testing #pytest #pytest-cov
#python #python-3.x #модульное тестирование #pytest #pytest-cov
Вопрос:
Я изучаю тестирование на Python, и теперь я использую pytest-cov.
Я пытаюсь запустить эту команду:
pytest --cov=myProj tests/ --cov-report term-missing
после завершения тестирования я получил отчет, подобный этому:
----------- coverage: platform linux, python 3.6.7-final-0 -----------
Name Stmts Miss Cover Missing
----------------------------------------------------------------------------------------------
myProject/__init__.py 0 0 100%
myProject/alert.py 14 14 0% 1-21
myProject/api/__init__.py 1 0 100%
myProject/api/spaces/__init__.py 0 0 100%
myProject/api/spaces/admin.py 279 179 36% 154-223, 312-335, 351-398, 422-432, 505-515, 534-565, 591-697
myProject/api/spaces/global.py 89 66 26% 35-43, 47-69, 72-92, 96-124
myProject/api/spaces/inventory.py 79 79 0% 1-119
myProject/api/spaces/keyword.py 134 110 18% 33-42, 46-68, 72-93, 101-112, 116-134, 138-165, 168-190
Несколько вещей, которые меня все еще смущают в отчете, поскольку я до сих пор не нашел его в документации, касаются:
что такое
Stmts, Miss, Cover и отсутствует, то есть, если результат на обложке не соответствует 100%, это означает, что мой код все еще плохой или что ..?
Ответ №1:
Stmts
относится к количеству операторов в вашем коде.
Miss
относится к количеству инструкций, которые не были выполнены.
Cover
является ли покрытие тестом или (Stmts - Miss) / (Stmts) * 100
.
Missing
содержит номера строк Miss
инструкций.
Если охват не равен 100%, это означает, что есть части вашего кода, которые ваши тесты не охватывают, например:
def f(a, b):
if a > 0:
return a
elif a == 0:
return 0
else:
return b
def test_f():
assert f(10, 10)
Приведенный выше тест будет когда-либо входить только в a > 0
ветку и, следовательно, будет иметь тестовое покрытие 33%.
Высокий охват не всегда хорош (потому что простое покрытие кода не означает, что все случаи тестируются адекватно), но низкий охват часто плох (потому что это означает, что ваши тесты даже не касаются частей вашего кода).
Ответ №2:
- Stmts — означает общее количество строк кода, имеющихся у вас в определенном файле.
- Пропуск — общее количество строк, которые не покрываются unittest.
- Покрытие — процент от всей строки кода, охватываемой unittest.
- Недостающие строки кода, которые не охвачены.
Комментарии:
1. Я все еще не понял насчет Stmts , потому что в моем отчете о том, что в моем реальном проекте у меня 54 строки (без разрыва строк) в моем файле и 26 строк в моем тестовом файле (также без разрыва строки), но в моем отчете Stmts показывает 28.