2011-08-07 29 views
3

我使用的coverage.py獲取我的django unittests的覆蓋率數據,但我似乎無法弄清楚如何在django調試服務器上運行覆蓋率。我想用運行Django的服務器:django調試服務器的代碼覆蓋率

coverage -x manage.py runserver 0.0.0.0:8080 

,並停止該服務器時,我應該使用覆蓋數據,我可以生成覆蓋報告獲得。但是在用CTRL-c關閉服務器時,我得到了

^CCoverage.py警告:沒有收集到數據。

如果無法使用此coverage.py腳本,則可以使用任何其他工具。

UPDATE:

隨着--noreload它似乎工作,但生成HTML覆蓋率報告時,我得到了下面的堆棧跟蹤:

traceback (most recent call last): 
    File "/usr/local/bin/coverage", line 8, in <module> 
    load_entry_point('coverage==3.5.1', 'console_scripts', 'coverage')() 
    File "/usr/local/lib/python2.6/dist-packages/coverage/cmdline.py", line 657, in main 
    status = CoverageScript().command_line(argv) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/cmdline.py", line 549, in command_line 
    directory=options.directory, **report_args) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/control.py", line 599, in html_report 
    reporter.report(morfs, config=self.config) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/html.py", line 83, in report 
    self.report_files(self.html_file, morfs, config, config.html_dir) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/report.py", line 86, in report_files 
    report_fn(cu, self.coverage._analyze(cu)) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/html.py", line 198, in html_file 
    self.write_html(html_path, html) 
    File "/usr/local/lib/python2.6/dist-packages/coverage/html.py", line 103, in write_html 
    write_encoded(fname, html, 'ascii', 'xmlcharrefreplace') 
    File "/usr/local/lib/python2.6/dist-packages/coverage/backward.py", line 137, in write_encoded 
    f.write(text.decode('utf8')) 
    File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xdf in position 59130: invalid continuation byte 

回答

3

嗯,不知道該做出什麼。當我創建一個全新的Django項目,我得到一些覆蓋測量:

$ django-admin.py startproject mysite 
$ cd mysite 
$ coverage run manage.py runserver 
Validating models... 

0 errors found 
Django version 1.3, using settings 'mysite.settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CTRL-BREAK. 
^C 
$ coverage report 
Name  Stmts Miss Cover 
------------------------------ 
__init__  0  0 100% 
manage  11  4 64% 
settings  24  0 100% 
------------------------------ 
TOTAL   35  4 89% 

什麼操作系統,Django和覆蓋版本,等?你的項目中還有什麼不尋常的東西?

單獨測量runserver可能不是您想要的,您只能測量監視文件更改並重新啓動服務器的代碼。支持覆蓋支持的Django測試運行人員可能更適合您的需求。

更新:

提供--noreload開關使覆蓋測量您的所有代碼。

+0

不,在我的項目中沒有什麼不尋常的。我擁有的版本是:Ubuntu 10.10,django 1.3,覆蓋率3.5。 – Divick

+0

我發現只有在我的.coveragerc中設置include = */views.py時,它才能收集數據。如果我刪除這一行,我確實收集了數據,但它顯示代碼的覆蓋率爲0%(我的.coveragerc具有source =。)。如果我刪除了source =。設置,我沒有看到我的項目中的應用程序內存在的文件的名稱。我期望在沒有unittests的情況下收集數據的原因是,使用單元測試的覆蓋範圍只能說明測試的覆蓋範圍統計信息,這是人爲的,並且不會告訴您某個用戶交互的真實場景中的覆蓋範圍。 – Divick

+0

我會首先運行它,不包含任何包含或源代碼指令,以查看測量結果的全貌。 –