相关疑难解决方法(0)

将py.test与coverage一起使用不包括导入

对于Jedi,我们想要生成我们的测试覆盖率.stackoverflow中有一个相关的问题,但它没有帮助.

我们使用py.test作为测试运行器.但是,我们无法将导入和其他"导入"内容添加到报表中.例如__init__.py,始终报告为未被发现:

Name                           Stmts   Miss  Cover
--------------------------------------------------
jedi/__init__                      5      5     0%
[..]
Run Code Online (Sandbox Code Playgroud)

显然,此文件正在导入,因此应报告为已测试.

我们开始这样的测试[*]:

py.test --cov jedi
Run Code Online (Sandbox Code Playgroud)

如你所见,我们正在使用pytest-coverage.

那么如何正确计算文件的覆盖范围__init__.py呢?

[*]我们还尝试在没有--doctest-modules(从中删除pytest.ini)的情况下启动测试并在之前激活覆盖模块py.test -p pytest_cov --cov jedi.它们都不起作用.

我提供了赏金.请尝试在Jedi内修复它.它是公开的.

python coverage.py pytest

42
推荐指数
3
解决办法
2万
查看次数

如果py.test从另一个目录执行它,则coverage.py不包括脚本

我有一个python脚本,它接受命令行参数,使用一些文件.我正在编写成功的测试,py.test将这个脚本放在其脚本中,并执行它subprocess.call.

现在我想分析代码覆盖率coverage.py.覆盖范围,通过使用时pytest-cov的插件(其中有子装卸内置),没有看到/覆盖我的剧本时,它从创建一个临时目录测试名为py.testtmpdir夹具.Coverage 在其所在的目录中调用时会看到我的脚本(并且filename参数指向远程路径).

在这两种情况下,我的测试通过!覆盖范围3.6,pytest-2.3.5,pytest-cov 1.6,全部来自PyPi.

问题:即使在另一个目录中执行脚本,如何识别我的脚本?这是覆盖范围内的错误,还是一些无法做到的事情?如果后者毕竟tmpdir是py.test的股票机制,那会感到惊讶......

最小的例子:

我有一个脚本my_script.py,它只是回应arg_file.txt通过命令行参数提供的文件的内容.在两个不同的测试中,这一次在a中调用tmpdir,一次在脚本的位置调用.两个测试都通过了,但是在tmpdir测试中,我没有得到任何覆盖信息!

测试运行:

~/pytest_experiment$ py.test -s
=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 2 items 

tests/test_in_scriptdir.py 
set_up: In directory /tmp/pytest-52/test_10
Running in directory /home/cbuchner/pytest_experiment
Command: ./my_script.py /tmp/pytest-52/test_10/arg_file.txt
--Contents of arg_file.txt--

.
tests/test_in_tmpdir.py 
set_up: In directory /tmp/pytest-52/test_11
Running in directory /tmp/pytest-52/test_11 …
Run Code Online (Sandbox Code Playgroud)

python coverage.py pytest

32
推荐指数
2
解决办法
2万
查看次数

标签 统计

coverage.py ×2

pytest ×2

python ×2