2010-06-25 45 views
6

我有一個非常大的測試套件的python項目。最近我們決定量化我們測試覆蓋的質量。我如何確保我的大Python項目的良好測試覆蓋率

我正在尋找一種工具來自動生成測試覆蓋率報告。理想情況下,我希望獲得有吸引力的,易於閱讀的報告,但如果我能夠快速開展工作,我會盡力減少吸引力。

我試過鼻子,這不夠好:它與distribute/setuptools的命名空間包功能不兼容。不幸的是,由於我們充分利用了這個功能,鼻子覆蓋面對我們來說永遠不會有效。這是一個真正的恥辱,因爲鼻子似乎在哈德遜很好地工作(主要是)

作爲替代方案,我聽說有一種方法可以在Eclipse中進行Python覆蓋率分析,但是我沒有鎖定完美的技術。

歡迎任何建議!

僅供參考,我們使用Python 2.4.4在Windows XP 32位

+0

我試圖重現這個問題,不能。薩利姆,如果你需要幫助,請給我一條線。 – 2010-06-28 01:28:02

回答

4

您是否嘗試過使用coverage.py?它是「鼻子覆蓋範圍」的基礎,但如果需要,可以在鼻子外部完美地運行。

如果您使用(假設)python run_my_tests.py運行測試,那麼您可以使用coverage run run_my_tests.py來測量覆蓋率,然後使用coverage html獲取HTML報告。

從您的描述中,我不確定您的鼻子有什麼問題,特別是它是鼻子問題還是coverage.py問題。提供一些更多細節,我相信我們可以通過它們來完成。

1

奈德已經提到了他的優秀coverage.py模塊。

如果您遇到的問題是鼻子特定的問題,您可能需要考慮使用另一個測試運行器。我已經使用py.test以及pytest_coverage插件,可讓您生成覆蓋率統計信息。它也有一個pytest_nose插件來幫助你遷移。

但是,我不明白你面臨的問題是什麼。你能否詳細介紹一下你提到的「distribute/setuptools命名空間包功能」?我很想知道問題是什麼。

+0

我們使用setuptools的命名空間包功能,它允許多個egg在signle命名空間中提供東西,例如,如果myproduct_foo_1.0.egg可能提供命名空間myproduct和myproduct.foo,並且myproduct_bar_1.0.egg會提供命名空間myproduct.bar。當我嘗試對我的產品進行覆蓋率分析時,覆蓋率工具需要檢測兩個雞蛋中哪一個實際包含每個相關模塊的來源。此刻nose/cover.py似乎做錯了。 – 2010-06-25 14:40:01

+1

Salim,我很想修復coverage.py來獲得這個權利。你有我可以嘗試自己的樣本嗎? – 2010-06-25 17:38:27

+1

BTW:我爲這個問題添加了一個coverage.py票據:http://bitbucket.org/ned/coveragepy/issue/75/namespace-packages-break-coveragepys-ability-to-find-source – 2010-06-25 19:03:49