Nosetests和Coverage不排除行

时间:2016-07-29 17:29:43

标签: python django coverage.py

使用nosetests和使用Django Web应用程序进行覆盖,遇到一些代码覆盖问题。我创建了一个.coveragerc文件来排除大量的代码(比如类声明),但我仍然得到一些奇怪的结果。

这是我的.coveragerc文件:

[run]
omit = ../*migrations*, ../*admin.py

[report]
show_missing = True
exclude_lines =
         pragma: no cover
         from
         = models\.

这是models.py文件之一的示例:

from django.db import models

class Query(models.Model):
    variable1 = models.CharField(max_length=100)
    variable2 = models.CharField(max_length=100)
    variable3 = models.CharField(max_length=100)
    variable4 = models.CharField(max_length=100)
    variable5 = models.CharField(max_length=100)
    id = models.AutoField(primary_key=True)

def some_function(self):
     self.variable1 = self.variable2 + self.variable3 + self.variable4 + self.variable 5
     return self.variable1

因此,当我运行代码覆盖时,我遇到的问题是尽管我告诉覆盖范围明确地用字符串“= models。”排除任何内容,但它仍然说通过命令行给出的报告中缺少这些行。这使我很难确定在我的测试用例中我实际上未能涵盖哪些行。任何人都可以提供一些见解吗?

2 个答案:

答案 0 :(得分:0)

您的.coveragerc文件应列出要从目录根目录中排除的内容。

例如:

proj |-- app1 | -- models.py -- migrations.py |-- app2

然后您的coverage.rc文件应如下所示:

[run] omit = app1/migrations.py, app1/admin.py

[run] omit = proj/*/migrations.py, proj/*/admin.py

答案 1 :(得分:0)

找到解决我问题的方法。事实证明,我根本不需要使用nosetests。我可以使用coverage.py测试运行manage.py并传入测试模块。代码覆盖率很好,我的覆盖率高达96%: - )