Реализация покрытия кода и модульное тестирование в существующем приложении Python / Flask - PullRequest
0 голосов
/ 30 октября 2019

Возникли проблемы с отключением этой реализации.

Что мне нужно: результаты покрытия кода в моем существующем приложении-колбе, предпочтительно с использованием модульных тестов, совместимых с pytest.

Что я вижу: явидеть покрытие только для строк, которые выполняются при запуске моего приложения. Когда я использую pytest или почтальон для отправки запросов на мой сервер, показатели покрытия не меняются. То есть я могу запустить сервер, остановить его и получить те же результаты, что и при запуске, отправке запросов и остановке.

Я исследовал с помощью pytest, pytest-cov и cover.py.

Я реализовал обходной путь плагина sitecustomize.py в site_packages для поддержки покрытия подпроцесса, но безрезультатно.

Я использую сервер покрытия следующим образом: coverage run --source . app.py -m

Затем в новом терминале я запускаю pytest следующим образом: pytest

Затем я нажимаю ctrl + c на сервере, запускаю coverage report -m, чтобы просмотреть мой вывод.

Мой app.py содержит следующее содержимое:

from flask import Flask, request, render_template, make_response
from flask_cors import CORS
from flask_restplus import Resource, Api, reqparse
app = Flask(__name__)
CORS(app)
api = Api(app)

if ENV == 'dev':
    app.debug = True
else:
    app.debug = False
ns_namespace = api.namespace('namespace', description='namespace')
@ns_namespace.route("/")
class Namespace(Resource):
    def get(self):
        pass

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0')

В идеале я хочу запустить одну команду, чтобы запустить сервер app.py, выполнить pytest и записать фактическое покрытие кода. Кто-нибудь сталкивался с чем-то вроде этого?

1 Ответ

0 голосов
/ 31 октября 2019

Обнаружил проблему.

Оказывается, виновником здесь был app.debug = True. app.debug порождает отдельный процесс или что-то в этом роде, и мы теряем понимание освещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...