[TIP] coverage.py and pyramid web framework?

Ben Cohen cohen.ben at gmail.com
Fri Aug 24 09:21:21 PDT 2012

Thanks for all the responses so far!

For completeness heres the project link for venusian decorators:


Venusian style decorators add attributes to function/methods/classes including a callback which is invoked by a later 'scan' stage -- the pyramid framework uses this system to mark function/methods as web request handlers in a nice/flexible fashion.  But Tres's links have convinced me that there's nothing inherently 'magic' about this process which would lead to coverage.py missing function/method calls.

I tried running coverage conventionally like so:

coverage run /path/to/my/pythonenv/bin/pserve development.ini

pserve is a script that's part of the pyramid web framework.  The high level view of what it does is:

1. create the wsgi object representing a web application
2. setup a wsgi server 
3. pass the application object to the server for serving.  

After starting the server thusly, then invoking my test suite, I kill the serve process and run:

coverage html

to generate the html report.  The report is essentially the same as the one generated by the api calls and shows that none of my application's view methods are being called...

I had mentioned earlier that I was using the single-threaded waitress http server -- however that's not true -- waitress is a multi-threaded server -- I'm using it in its default configuration.  There's a little bit of magic with threads happening largely behind the scenes within the framework/http server -- my functions/methods will all be called in a thread from a thread worker pool -- would it be expected for coverage to fail to trace methods called in a thread other than the MainThread?

On Aug 24, 2012, at 7:48 AM, Tres Seaver <tseaver at palladion.com> wrote:

> Hash: SHA1
> On 08/24/2012 10:35 AM, Tres Seaver wrote:
>> On 08/23/2012 08:34 PM, Ben Cohen wrote:
>>> The most obvious shared feature of the functions/methods that
>>> report no coverage is the use of a venusian callback method
>>> decorator -- this decorator marks functions/methods with declarative
>>> attributes, subsequently modules are scanned for methods with those
>>> attributes and then ingested by the pyramid web framework's
>>> web-publishing machinery.
>>> Is there some magic happening within the pyramid framework that 
>>> causes coverage to fail to register when these methods are called?
>>> Is anybody using coverage and pyramid together without issue …?  I
>>> didn't expect so fundamental an issue with the two as the pyramid 
>>> documentation has a chapter describing the use of coverage in unit 
>>> tests …
>> Pyramid itself runs tests with the coverage package without issues
>> (run via 'setup.py nosetests --with-xunit --with-xcoverage' -- see the
>> 'cover' environment in its tox.ini).  We use it routinely for apps
>> built on Pyramid as well.  The venusian decorator does not do anything
>> to interfere with coverage:  the attributes it adds to the decorated 
>> function are used to populate Pyramid's registry during the later
>> "scan" phase.
> Pyramid's Jenkins:
> http://jenkins.pylonsproject.org/job/pyramid/
> and the instance for SubstanceD, an app written on top of Pyramide:
> http://jenkins.pylonsproject.org/job/substanced/
> Tres.
> - -- 
> ===================================================================
> Tres Seaver          +1 540-429-0999          tseaver at palladion.com
> Palladion Software   "Excellence by Design"    http://palladion.com
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> iEYEARECAAYFAlA3lB8ACgkQ+gerLs4ltQ4tmQCgx9jQjZPXJJlme1ZrNqm46rMb
> KEIAn2SE/Cz43KS/f+61XVb6HcqtiHzK
> =vlKO
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20120824/7c479549/attachment-0001.htm>

More information about the testing-in-python mailing list