Reputation: 1273
I am using coverage.py from http://nedbatchelder.com/code/coverage/ for getting coverage data for my django unittests but I can't seem to figure out how can I run the coverage on the django debug server. I would want to run the django server using:
coverage -x manage.py runserver 0.0.0.0:8080
and when stopping this server, I should get the coverage data using which I can generate the coverage report. But on shutting down the server with CTRL-c, I get
^CCoverage.py warning: No data was collected.
I am ready to use any other tool if it is not possible using this coverage.py script.
UPDATE:
With --noreload it does seem to work but I get the following stack trace when generating html coverage report:
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
Upvotes: 3
Views: 1671
Reputation: 375574
Hmm, not sure what to make of that. When I create a brand new Django project, I get some coverage measurement:
$ 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%
What OS, Django and coverage versions, etc? Anything else unusual in your project?
Measuring runserver
alone may not be what you want, you may only measure the code that watches for file changes and relaunches the server. A Django test runner with coverage support may suit your needs better.
UPDATE:
Providing the --noreload switch makes coverage measure all your code.
Upvotes: 3