11

我正在使用Hudson不断构建Python项目。单元测试和代码覆盖率工作得很好,但是当我为我的不是单元测试的文件钻取Cobertura 覆盖率报告时会出现此消息:

Source code is unavailable.Some possible reasons are:

* This is not the most recent build (to save on disk space, this plugin only keeps the most recent builds source code).
* Cobertura found the source code but did not provide enough information to locate the source code.
* Cobertura could not find the source code, so this plugin has no hope of finding it.

奇怪的是找到并显示了单元测试的源代码。我试图手动将其他 .py 文件的源文件复制到~/.hudson/jobs/<projectname>/cobertura(单元测试被复制的地方),但它不起作用。

有什么建议么?

4

5 回答 5

7

Cobertura 报告文件(此时位于 中的某处$HUDSON/jobs/foo/workspace)需要在开头包含以下内容:

<sources>
  <source>/path/to/source</source>
  <source>/another/path</source>
</sources>

它有吗?路径是否指向正确的位置?

另一个问题:当它说“最近的构建”时,它实际上意味着“最近的稳定构建”(即状态球是蓝色的,而不是黄色的)。

于 2010-02-19T19:05:57.867 回答
6

这是一个非常丑陋的黑客,但它是我唯一能想出最终让它发挥作用的东西......经过数小时的谷歌搜索和黑客攻击试图获得结果,这是我想出的唯一东西.

coverage run manage.py test
coverage xml
sed 's/filename="/filename="my\/path\//g' coverage.xml > coverage2.xml

这只是对类 xml 标记的文件名属性进行 relpacing,并在开头添加源文件的完整路径。只需确保将 Cobertura xml 报告模式更新为 coverage2.xml(如果这是您将 sed 的输出传送到的位置)。

如果 Cobertura 插件允许您输入类似于 Violations 插件的源路径,那就太好了 - 不幸的是,据我所知,它没有。

我希望这有帮助!

于 2010-05-26T19:09:14.793 回答
6

对我来说,其他两种解决方案不能独立工作,但它们的组合可以:

...
coverage xml
sed 's/<!-- Generated by coverage.py: http:\/\/nedbatchelder.com\/code\/coverage -->/<sources><source>\/path\/to\/sourcefolder<\/source><\/sources>/g'

这只是用有关源位置的信息替换了由coverage.py插入的注释。

于 2010-08-13T12:29:47.467 回答
1

我们的解决方案是改变我们对 cobertura-report ant 任务的使用,以包含源目录的完整路径而不是相对路径。

 <cobertura-report format="xml" destdir="${coverage.dir}" srcdir="${basedir}/${src.dir}"/>

基本上,cobertura xml 报告中包含的相对路径跨越了 Hudson,因此 Cobertura 插件无法使用它来查找源代码。在我们的案例中,这是 Hudson 为单模块项目和多模块项目的路径不同的症状。

于 2010-10-19T15:25:49.587 回答
-1

解决此问题的“正确”方法是将您的项目放在 PYTHONPATH 上并从您的存储库外部运行测试/覆盖。因为看起来你正在使用 Django,所以 django-admin.py test --settings=myproject.settings 会让你这样做。

-- 最初由Pete在评论中发布,转为回答。

于 2012-01-31T18:11:18.913 回答