Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB

Как использовать Coverage в Django

Django, Python

Когда вы разрабатываете большой проект, случайно можно забыть некоторые части кода, которые нужно протестировать. Coverage.py - это инструмент на python, который поможет вам в этом.

Установка

Используйте pip или easy_install, как вам по душе

pip install coverage 
Запуск и удаление

Для запуска в проекте Django используйте команду:

overage run --source='.' manage.py test the-app-you-want-to-test

Эта команда заполнит «.coverage», который расположен в COVERAGE_FILE, а затем вы можете увидеть результаты или отчет. Если вам нужно удалить полученные данные, воспользуйтесь командой:

coverage erase
Для одного файла

Если вы хотите проверить только код Python, то вам необходимо сделать:

coverage run your_program.py arg1 arg2 arg3

Есть несколько дополнительных опций, которые вы можете посмотреть по ссылке . О шаблонах можно узнать в разделе плагинов .

Просмотр результата

Если вы хотите вывести результаты в командной строке:

coverage report

Для более понятных и удобных отчетов:

coverage html

Чтобы точно знать, какая часть вашего кода покрыта тестами, используйте следующую команду:

coverage annotate -d directory-where-to-put-annotated-files

Программа сгенерирует тот же файл исходного кода с дополнительным синтаксисом:
- Строка с «>» означает, что она была выполнена.
- Строка, начинающаяся с «!», Означает, что она не была выполнена.
- Строка, начинающаяся с «-» означает, что строка была исключена из статистики покрытия.

Хороший уровень покрытия

Хорошее покрытие обычно приходится на 90%. Однако, если результат 100%, это может быть плохим сигналом, так как, возможно, дело с покрытием, а не с качеством тестов.

Несколько советов:
- Будьте осторожны с качеством ваших тестов.
- Не замедляйте скорости своего разработчика ради покрытия.
- Используйте покрытие, чтобы найти непроверенный код и решить, заслуживает ли он покрытия.

Исключаем код

Иногда нам нужно исключить некоторый код, который не нуждается в покрытии. Существует несколько вариантов:
- Указание файлов для исключения и пропуска в .coveragerc.
- Написание в одной строке блока комментария.

 # pragma: no cover

Например, если вы хотите исключить сгенерированный код из покрытия, потому что он должен поддерживаться инструментом генерации:

def generated_code():   # pragma: no cover
   do_something()

Больше информации на Coverage.py documentation.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Last comments
Feb. 21, 2019, 12:51 p.m.
Евгений Легоцкой

Иногда CMake приходится перезапускать начисто, не обновляет кэш
R
Feb. 21, 2019, 12:29 p.m.
RandyGallup

Я указал данные строки, т.к. без них у меня вылетала следующая ошибка: By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configurat...
Feb. 21, 2019, 12:08 p.m.
BlinCT

Вот атк выглядит мой проектник, посмотрите его. cmake_minimum_required(VERSION 3.6)project(projecttimer)set(CMAKE_CXX_STANDARD 11)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)find_packa...
Feb. 21, 2019, 12:04 p.m.
BlinCT

Смотрите, если вы используете глобально для проекта -DCMAKE_PREFIX_PATH= то вам не надо уже указывать вот эти строкиset(Qt5Core_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Core")set(Qt5Gui_DIR...
R
Feb. 21, 2019, 11:54 a.m.
RandyGallup

Даже не запускается. main.cpp у меня точно такой же, как в статье. CMakeLists.txt пришлось немного подправить (прикрепил ниже), т.к. не находились некоторые файлы. cmake_minimum_requi...
Now discuss on the forum
Feb. 21, 2019, 8:58 a.m.
Евгений Легоцкой

Ну у меня координаты передавались в зависимости от положения курсора мыши, а в вам по сути нужно будет аналогичным способом посылать даннные из полей ввода. Так что здесь скорее интерфес...
Feb. 20, 2019, 9:55 p.m.
Евгений Легоцкой

Не до конца понимаю сути вопроса, наверное, нужно увидеть программный код и попытку его применения, но к методам базового класса можно обращаться в наследованном классе через вызов по имени ба...
MU
Feb. 20, 2019, 3:06 p.m.
Maciej Urmański

Yes, ok I have solution! Thank you for directing me about annotate.:) Solution is: users_in = User.objects.filter(joined_users__goal=goal, joined_users__joined=True)
Feb. 20, 2019, 2:40 p.m.
Евгений Легоцкой

Думаю, что ещё можно переопределить mouseReleaseEvent(QMouseEvent* event) у QTableView, который содержит модель и немного поиграться с индексом. Если это индекс, который соответству...
Feb. 20, 2019, 10:34 a.m.
Евгений Легоцкой

Да, так тоже можно. Единственный момент в том, что lupdate не всегда понимает, к какому контексту это дело относится, и может запихать в левый контекст. В небольшом проекте это не критич...
Join us in social networks

For registered users on the site there is a minimum amount of advertising