Что означает результат pytest?

#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.