标签: python-coverage

Jinja2模板的代码覆盖率

我有一个金字塔Web应用程序,它使用Jinja2作为模板引擎.它使用Pyramid测试助手以及py.test和coverage插件进行测试.但覆盖仅适用于我的Python代码.有没有办法检查Jinja模板的覆盖范围?

由于Jinja被编译成Python代码,并且Armin会在异常情况下给出精确的行号,所以至少在理论上我是可能的.任何提示都将非常感激.

python testing code-coverage jinja2 python-coverage

7
推荐指数
1
解决办法
492
查看次数

如何确保我的大型Python项目的良好测试覆盖率

我有一个非常大的python项目,有一个非常大的测试套件.最近我们决定量化测试覆盖的质量.

我正在寻找一种自动化测试覆盖率报告生成的工具.理想情况下,我希望有一个有吸引力的,易于阅读的报告,但如果能让它快速发挥作用,我会满足于不太有吸引力的报道.

我试过Nose,这还不够好:它与distribute/setuptools的命名空间包功能不兼容.不幸的是,鼻子覆盖对我们来说永远不会有用,因为我们充分利用了这个功能 这真是一种耻辱,因为Nose似乎在Hudson(大多数)工作得非常好

作为替代方案,我听说有一种方法可以在Eclipse中进行Python覆盖率分析,但我并没有完全锁定完美的技术.

欢迎任何建议!

仅供参考我们在Windows XP 32bit上使用Python 2.4.4

python unit-testing code-coverage python-coverage

6
推荐指数
1
解决办法
379
查看次数

Python:使用coverage运行nose测试时的AssertionError

我对python测试相当绿色,所以这可能是我做错了.

当我运行我的测试时,测试运行器工作正常并且覆盖范围也很好..但是在两者之间我得到一个断言错误:

Traceback (most recent call last):
  File "/usr/local/bin/coverage", line 9, in <module>
    load_entry_point('coverage==3.5.1', 'console_scripts', 'coverage')()
  File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 657, in main
    status = CoverageScript().command_line(argv)
  File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 526, in command_line
    self.coverage.stop()
  File "/usr/local/lib/python2.7/dist-packages/coverage/control.py", line 389, in stop
    self.collector.stop()
  File "/usr/local/lib/python2.7/dist-packages/coverage/collector.py", line 262, in stop
    assert self._collectors[-1] is self
AssertionError
Run Code Online (Sandbox Code Playgroud)

为了使事情变得更加困难,我正在尝试测试命令行实用程序.这意味着我必须告诉覆盖范围以涵盖子进程调用.

我认为我已经完成了这部分工作,因为报道现在正在报告正在运行的脚本的覆盖百分比.但是自从我完成覆盖工作后,我无法摆脱AssertionError.

有些人帮助理解真正意义上的错误.我的所有代码都可以在github上找到:

快速运行:

cd /tmp/ && git clone git://github.com/h3/django-duke-client.git 
cd django-duke-client && chmod a+x run_tests && ./run_tests
Run Code Online (Sandbox Code Playgroud)

谢谢

更新

我在另一台计算机上运行测试,我得到了相同的AssertionError ..加上一个新的TypeError.测试再次正确运行,即使出现这些错误,覆盖范围似乎也能正常运行.

...
Ran 9 tests …
Run Code Online (Sandbox Code Playgroud)

python unit-testing nose coverage.py python-coverage

6
推荐指数
1
解决办法
1712
查看次数

是否可以在Python中进行代码覆盖率断言?

当我编写测试或调试代码时,我希望能够添加一行Python,如果该行从未执行过,它将通知我.这可能吗?

例如,我希望能够编写如下代码:

def f(x):
   if x==0:
      check_covered()
      return 1
   elif x==1:
      check_covered()
      return 2
   else:
      check_covered()
   return 3

f(1)
f(2)
print_all_missing_cases()
Run Code Online (Sandbox Code Playgroud)

我希望输出告诉我其中一个分支从未被覆盖过.

我试过的

方法1

我可以使用装饰器执行此操作,如下所示:

missing_fns = set()

def covered(h):
    missing_fns.add(h.func_name)
    def h2(*args):
        missing_fns.remove(h.func_name)
        return h(*args)
    return h2 

@covered
def f(a):
    return a+1

@covered
def g(a):
    return a+2

f(0)
for x in missing_fns:
    print x,'is never called'
Run Code Online (Sandbox Code Playgroud)

但我正在努力寻找在编译函数时激活的东西,我可以将其挂钩.

方法2

如果我将递增值传递给每个实例(例如check_covered(0),check_covered(1),check_covered(2),...),这也很简单,但是当我复制或删除代码时,这会变得很混乱.

方法3

可以通过运行代码覆盖率工具来获取此信息,但如果可能的话,我更愿意使用一些我有机会理解的简单Python代码来完成此操作.

python code-coverage coverage.py python-coverage

6
推荐指数
1
解决办法
149
查看次数

Python unittest分支覆盖似乎错过了zip中执行的生成器

我不太明白Python的分支覆盖统计数据试图告诉我什么.给出表单的代码

def f(a, b):
    c = (i for i in a)
    d = (j for j in b)  # Line of interest
    return dict(zip(c, d))

print(f(['a', 'b'], [1, 2]))
Run Code Online (Sandbox Code Playgroud)

在单元测试期间导入的,Python的标准分支覆盖率告诉我该# Line of interest行仅被部分覆盖(n->-n在CLI输出中,漂亮的HTML报告中的"n↛exit[?]").

返回的dict清楚地打印出来,用空列表执行仍会产生未覆盖的行.

我是否误解了覆盖范围输出?这闻起来像臭虫吗?

Python 3.5.1,Coverage 4.0.3

python unit-testing code-coverage python-coverage

6
推荐指数
1
解决办法
517
查看次数

我的Python测试套件文件覆盖何时不是100%?

我们使用Hudson和coverage.py来报告测试套件的代码覆盖率.哈德森将报道分解为:

  • 线
  • 条件语句

Coverage.py仅报告测试期间执行/导入的文件的覆盖范围,因此在测试期间执行的任何文件似乎都无视.是否存在文件无法报告100%覆盖率的实例?

python code-coverage hudson coverage.py python-coverage

5
推荐指数
1
解决办法
444
查看次数

为什么python报道说错过了线?

我正在尝试使用Django覆盖,但我似乎得到了不正确的结果.我的应用名为"stats",我有这个测试:

class ListSchoolsTest(TestCase):
    def test_initial_list(self):
        self.client.login(username='skeezy', password='skeezy')
        resp = self.client.get("/stats/list_schools/")
        self.assertEqual(resp.status_code, 200)
Run Code Online (Sandbox Code Playgroud)

在命令行上,我运行:

coverage run --source="." manage.py test stats
Run Code Online (Sandbox Code Playgroud)

测试通过了.我的所有观点目前都在stats/views.py中

但是,当我运行"报道报告"时,我得到这一行:

Name                 Stmts   Miss  Cover
----------------------------------------
<snip>
stats/views            110    110     0%
Run Code Online (Sandbox Code Playgroud)

任何想法我(不)这样做会导致报告报告stats/views.py中遗漏的所有行,即使它必须被击中以便测试通过?(就像腰带和吊带一样,我在我的视图中放了一个印刷声明,它肯定会被击中.)

django coverage.py python-coverage

5
推荐指数
1
解决办法
796
查看次数

子条件的python条件覆盖

我试图找到一个python代码覆盖率工具,该工具可以衡量语句中是否包含子表达式:

例如,我想看看在下面的示例中是否涵盖了condition1 / condition2 / condtion3?

if condition1 or condition2 or condition3: x = true_value
Run Code Online (Sandbox Code Playgroud)

python code-coverage python-coverage

5
推荐指数
1
解决办法
497
查看次数

Python unittest:如何满足导入包的鼻子覆盖范围

对于给定的python文件,其顶部有以下行:

import traceback
import datetime
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.conf import settings
Run Code Online (Sandbox Code Playgroud)

如何编写单元测试,导致鼻子没有显示"缺失"的那些线?

python django nose coverage.py python-coverage

5
推荐指数
1
解决办法
402
查看次数

Jenkins 在带有生成报告的 docker 容器中构建

我是 Jenkins 和 Docker 的新手,即使经过一些研究,我也没有找到做这些事情的方法。

我想要 :

  • 在 docker 容器内对我的项目执行 pytest 和 python-coverage。
  • 这应该生成测试和覆盖率报告
  • 访问生成的报告并使用一些 Jenkins 插件阅读它们。

当我在本地使用 Docker 尝试时,它正在工作。我创建了一个 Dockerfile,它使用所需的库和其中的源代码创建一个 docker 镜像,然后在创建容器并运行测试时调用一个脚本。我可以看到它正在工作,因为我使用了 cat 并且能够在我的终端中看到生成的报告。

我的问题是:如何访问 Jenkins 容器内生成的报告,并在之后使用插件读取它们。

编辑:所以这里有一个我正在尝试做的例子,这样你就可以有一个更好的主意。

首先,我的 Dockerfile 示例:

# starting from debian image
FROM debian

# install pytest and coverage to execute my tests
RUN apt-get update && apt-get install -y \
    python-pytest \
    python-coverage

# add source files to the image
ADD . /HelloPython/

WORKDIR /HelloPython/

# execute shell script which run tests
CMD sh …
Run Code Online (Sandbox Code Playgroud)

pytest jenkins docker python-coverage

5
推荐指数
1
解决办法
7912
查看次数