pydev 覆盖率:pytest 和本地 pytest 插件 运行 在两个独立的进程中,通过 http 进行交谈
pydev coverage: pytest and local pytest plugin running in two separate processes, talking over http
一切从这里开始:https://github.com/pytest-dev/pytest-cov/issues/425
我现在可以说我的终端上有一个可行的解决方案,所以当我 运行:
pytest --cov views --cov db --cov-report term-missing:skip-covered -sv
==================== test session starts ====================
platform darwin -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 -- /usr/local/Caskroom/miniconda/base/bin/python
cachedir: .pytest_cache
rootdir: /Users/alan/myproject
plugins: xdist-1.33.0, forked-1.2.0, cov-2.10.0
collected 46 items
tests/test_admin.py::test_attempt_create_user PASSED
tests/test_auth.py::test_login_logout * Serving Flask app "views" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
2020-09-03 18:26:26,157-INFO-werkzeug::_internal|113:: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
PASSED
...
---------- coverage: platform darwin, python 3.7.6-final-0 -----------
Name Stmts Miss Cover Missing
-----------------------------------------------------------
views/general.py 52 2 96% 111, 113
views/helpers.py 18 11 39% 10-14, 18-24
views/individual.py 218 113 48% 49-68, 74-125, 129-139, 145-155, 190, 336-382, 386-393, 400-428
views/save_configuration.py 34 23 32% 17-44
views/users.py 128 104 19% 18-37, 52-90, 96-140, 144-155, 159-164, 168-173, 177-184
views/variant.py 61 5 92% 34-36, 74-75
-----------------------------------------------------------
TOTAL 985 258 74%
11 files skipped due to complete coverage.
我可以正确地看到报道。
现在我正试图让它在 Eclipse/PyDev
中工作。
本质上,当运行宁Eclipse:Run:Run As:Python unit-test
使用我的本地 pytest 插件 (fix_api.py) 进行的测试将失败,主要是抱怨它等待应用程序服务启动并且超时。
@pytest.fixture(scope="session")
def app_server():
with TestProcess("python", "application.py") as app_server:
> wait_for_strings(app_server.read, 10, "Running")
../Programmes/myproject/tests/fix_api.py:17:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cb = <bound method BufferingBase.read of TestProcess(pid=78818, is_alive=False)>
seconds = 10, strings = ('Running',), start = 1599149418.9482582
buff = ' File "/usr/local/Caskroom/miniconda/base/lib/python3.7/site.py", line 177\n file=sys.stderr)\n ^\nSyntaxError: invalid syntax\n'
check_strings = ['Running']
def wait_for_strings(cb, seconds, *strings):
"""
This checks that *string appear in cb(), IN THE GIVEN ORDER !
"""
start = time.time()
while True:
buff = cb()
check_strings = list(strings)
check_strings.reverse()
for line in buff.splitlines():
if not check_strings:
break
while check_strings and check_strings[-1] in line:
check_strings.pop()
if not check_strings:
return
if time.time() - start > seconds:
break
time.sleep(0.05)
raise AssertionError("Waited %0.2fsecs but %s did not appear in output in the given order !" % (
> seconds, check_strings
))
E AssertionError: Waited 10.00secs but ['Running'] did not appear in output in the given order !
/usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/process_tests.py:247: AssertionError
对我来说最重要的功能是能够在 Eclipse 中使用“代码覆盖率”视图并能够快速查看未覆盖的代码。
如果我不能用两个独立的进程来制作 pytest 来覆盖,我想知道当 运行 在我的终端中时如何为 PyDev 加载 coverage.xml
文件,比如:
pytest --cov views --cov db --cov-report xml:coverage.xml -sv
代码覆盖率视图有这个按钮“打开 cov”,但它没有按照我希望的方式执行,也没有从我的本地 .coverage
文件执行“刷新”加载。
因此,如果有人可以在这里提供任何关于如何让它工作的提示,我们将不胜感激。
在 PyDev 端,code-coverage 信息从特定目录加载。
在代码覆盖率视图中有一个 Open cov dir
(见下图)必须放置覆盖率内容(我可以看到 PyDev 设置 --coverage_output_dir
和 --coverage_include
-- https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/launching/PythonRunnerConfig.java#L913 -- 在命令行中设置了 Enable code coverage for new launches?
并且已经选择了要分析的目录,因此,如果您从 PyDev 内部进行 运行ning 测试,它应该开箱即用).
现在,如果你从终端 运行 它,你必须在 运行 测试时从命令行设置它们。
PyDev 覆盖目录中的文件应命名为:.coverage.<xxx>
(然后在 Refresh
PyDev 将收集所有以 .coverage.
开头的多个文件并将它们合并到一个 .coverage
,然后将用于显示 PyDev 内部的覆盖信息。
因此,您需要做的是在正确的位置创建生成的覆盖文件(这应该可以从 PyDev 运行ning 或使用正确的命令行参数创建PyDev 覆盖目录中的文件,稍后手动刷新)。
一切从这里开始:https://github.com/pytest-dev/pytest-cov/issues/425
我现在可以说我的终端上有一个可行的解决方案,所以当我 运行:
pytest --cov views --cov db --cov-report term-missing:skip-covered -sv
==================== test session starts ====================
platform darwin -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 -- /usr/local/Caskroom/miniconda/base/bin/python
cachedir: .pytest_cache
rootdir: /Users/alan/myproject
plugins: xdist-1.33.0, forked-1.2.0, cov-2.10.0
collected 46 items
tests/test_admin.py::test_attempt_create_user PASSED
tests/test_auth.py::test_login_logout * Serving Flask app "views" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
2020-09-03 18:26:26,157-INFO-werkzeug::_internal|113:: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
PASSED
...
---------- coverage: platform darwin, python 3.7.6-final-0 -----------
Name Stmts Miss Cover Missing
-----------------------------------------------------------
views/general.py 52 2 96% 111, 113
views/helpers.py 18 11 39% 10-14, 18-24
views/individual.py 218 113 48% 49-68, 74-125, 129-139, 145-155, 190, 336-382, 386-393, 400-428
views/save_configuration.py 34 23 32% 17-44
views/users.py 128 104 19% 18-37, 52-90, 96-140, 144-155, 159-164, 168-173, 177-184
views/variant.py 61 5 92% 34-36, 74-75
-----------------------------------------------------------
TOTAL 985 258 74%
11 files skipped due to complete coverage.
我可以正确地看到报道。
现在我正试图让它在 Eclipse/PyDev
中工作。
本质上,当运行宁Eclipse:Run:Run As:Python unit-test
使用我的本地 pytest 插件 (fix_api.py) 进行的测试将失败,主要是抱怨它等待应用程序服务启动并且超时。
@pytest.fixture(scope="session")
def app_server():
with TestProcess("python", "application.py") as app_server:
> wait_for_strings(app_server.read, 10, "Running")
../Programmes/myproject/tests/fix_api.py:17:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cb = <bound method BufferingBase.read of TestProcess(pid=78818, is_alive=False)>
seconds = 10, strings = ('Running',), start = 1599149418.9482582
buff = ' File "/usr/local/Caskroom/miniconda/base/lib/python3.7/site.py", line 177\n file=sys.stderr)\n ^\nSyntaxError: invalid syntax\n'
check_strings = ['Running']
def wait_for_strings(cb, seconds, *strings):
"""
This checks that *string appear in cb(), IN THE GIVEN ORDER !
"""
start = time.time()
while True:
buff = cb()
check_strings = list(strings)
check_strings.reverse()
for line in buff.splitlines():
if not check_strings:
break
while check_strings and check_strings[-1] in line:
check_strings.pop()
if not check_strings:
return
if time.time() - start > seconds:
break
time.sleep(0.05)
raise AssertionError("Waited %0.2fsecs but %s did not appear in output in the given order !" % (
> seconds, check_strings
))
E AssertionError: Waited 10.00secs but ['Running'] did not appear in output in the given order !
/usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/process_tests.py:247: AssertionError
对我来说最重要的功能是能够在 Eclipse 中使用“代码覆盖率”视图并能够快速查看未覆盖的代码。
如果我不能用两个独立的进程来制作 pytest 来覆盖,我想知道当 运行 在我的终端中时如何为 PyDev 加载 coverage.xml
文件,比如:
pytest --cov views --cov db --cov-report xml:coverage.xml -sv
代码覆盖率视图有这个按钮“打开 cov”,但它没有按照我希望的方式执行,也没有从我的本地 .coverage
文件执行“刷新”加载。
因此,如果有人可以在这里提供任何关于如何让它工作的提示,我们将不胜感激。
在 PyDev 端,code-coverage 信息从特定目录加载。
在代码覆盖率视图中有一个 Open cov dir
(见下图)必须放置覆盖率内容(我可以看到 PyDev 设置 --coverage_output_dir
和 --coverage_include
-- https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/launching/PythonRunnerConfig.java#L913 -- 在命令行中设置了 Enable code coverage for new launches?
并且已经选择了要分析的目录,因此,如果您从 PyDev 内部进行 运行ning 测试,它应该开箱即用).
现在,如果你从终端 运行 它,你必须在 运行 测试时从命令行设置它们。
PyDev 覆盖目录中的文件应命名为:.coverage.<xxx>
(然后在 Refresh
PyDev 将收集所有以 .coverage.
开头的多个文件并将它们合并到一个 .coverage
,然后将用于显示 PyDev 内部的覆盖信息。
因此,您需要做的是在正确的位置创建生成的覆盖文件(这应该可以从 PyDev 运行ning 或使用正确的命令行参数创建PyDev 覆盖目录中的文件,稍后手动刷新)。