Divick
Divick

Reputation: 1273

Code coverage with django debug server

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

Answers (1)

Ned Batchelder
Ned Batchelder

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

Related Questions