Использование покрытия и codecov.io с юнит-тестами pytest и специальными встроенными тестами - PullRequest
0 голосов
/ 26 марта 2020

Кодовая база для моего Python проекта содержит множество тестов. Эти тесты достаточно широки и емки, чтобы я назвал их «надежными». Я хотел бы точно знать, насколько они надежны, поэтому я настроил coverage.py tool и codecov.io account .

Проект имеет два типа тестов:

  1. набор модульных тестов, которые были написаны с самого начала для запуска с pytest - т.е. не существует устаревших тестов на основе unittest и pytest приспособления и крючки в значительной степени используются.
  2. наборы встроенных тестовых функций для каждого модуля, написанные с помощью простого выполненного на заказ тестового прогона . Все они выглядят примерно так:
# -*- coding: utf-8 -*-
import sys # …etc

# «module code»

def test():

    from clu.testing.utils import inline

    @inline.precheck
    def show_some_initial_values():
        """ Precheck function description """
        # «pre-check code»

    @inline
    def test_one():
        """ Test one’s description """
        # «test code»

    @inline
    def test_two():
        """ Test two’s description """
        # «test code»

    @inline.diagnostic
    def show_some_final_values():
        """ Diagnostic function description """
        # «post-run diagnostic code»

    return inline.test(100) # runs test functions 100 times;
                            # prechecks and diagnostics run once

if __name__ == '__main__':
    sys.exit(test())

… и выводят отчеты примерно так:

inline test suite report screenshot

… встроенные тесты можно запускать для каждого модуля, прямо из редактора. Все они также могут быть запущены массово через a nox setup , которая собирает и запускает все модули, которые определяют встроенные тесты .

Так что теперь, относительно coverage.py и codecov.io - было чрезвычайно легко интегрировать пакет pytest с этими инструментами. Я сделал несколько изменений в готовом файле .coveragerc, установил плагин pytest codecov.io, и это было так - эти тесты сообщают о своем покрытии codecov.io просто отлично.

У меня вопрос: как мне интегрировать отчеты о покрытии для встроенных тестов?

  • Есть ли простой способ настроить coverage.py, чтобы «понять» эти функции тестирования, или встроенные тесты должны сообщать их результаты для инструмента (ов) покрытия?
  • Можно ли настроить что-то подобное в файле .coveragerc, или это более сложно?
  • И есть ли другие инструменты, которые Я должен рассмотреть, либо дополнительно, либо вместо того, что я сейчас использую?

1 Ответ

1 голос
/ 26 марта 2020

Coverage.py ничего не понимает в тестах. Все, что он делает, это говорит вам, какие части вашего кода были запущены какой-то программой. Обычно эта программа запускает тесты, но cover.py не волнует.

Если вы сейчас запускаете свои тесты с python mytestrunner.py, измените команду на coverage run mytestrunner.py, и вы получите данные.

...