[py-dev] pytest-cov

holger krekel holger at merlinux.eu
Tue Aug 3 14:17:00 CEST 2010


Hi Meme,

On Tue, Aug 03, 2010 at 21:57 +1000, meme dough wrote:
> On 3 August 2010 18:14, holger krekel <holger at merlinux.eu> wrote:
> > On Mon, Aug 02, 2010 at 16:05 +0200, holger krekel wrote:
> >> Hum, how does the "out-of-the-box" work exactly?
> >> It won't always be enabled just because pytest-cov is installed, will it?
> >> (if so, i'd rather suggest to do an indirection and only perform coverage
> >> if a certain environment varialbe like PYTEST_COV_AUTOSUB=1 or so it st).
> >
> > FYI i think pytest-cov begins to work better than pytest-figleaf
> > in some cases! :)
> >
> > However, i consider it crucial that installing pytest-cov has no side effects
> > by default.  With the above suggestion we could make py.test set the environment
> > variable when a coverage-run is selected and otherwise avoid any side effects,
> > particularly when py.test is not even run.  IOW, i'd be very happy with a
> > pytest-cov-1.1 streamlining this issue so it's safe to point people to it :)
> 
> When pytest-cov installed (well really cov-core) an init_cov_core.pth
> will be created. During python site initialisation this will cause
> coverage to start only if appropriate.  From the doc string:
> 
> Activate coverage at python startup if appropriate.
> 
> The python site initialisation will ensure that anything we import
> will be removed and not visible at the end of python startup.  However
> we minimise all work by putting these init actions in this separate
> module and only importing what is needed when needed.
> 
> For normal python startup when coverage should not be activated we
> only import os, look for one env var and get out.
> 
> For python startup when an ancestor process has set the env indicating
> that code coverage is being collected we activate coverage based on
> info passed via env vars.
 
If i understand correctly you are describing the situation as is. 
Sorry, i didn't look at the content of cov_core_init.py which would
have revealed the mechanics that you describe. 

> So I completely agree with you.
> 
> One issue is creating the pth file during installation.  It works for
> me with what I have to test with.  If it can't find site-packages /
> dist-packages then it outputs a message describing what file to create
> and content to go in it.
> 
> Another issue is uninstalling.  I added a big note indicating that the
> pth file must be uninstalled manually.

I guess somehow "pip" should be better able to uninstall.  But ok,
cov_core_init.py is hopefully not causing trouble so it's not so bad. 
 
> >> * --cov=path ... the help string should say what path, file-system or
> >>   python import-path?
> 
> I was tying to be consistent with other pytest options and path looked
> the best as used by others.  Under hood it is currently morf (modules
> or files coverage speak) but will change to source option which is a
> root of a source tree so I think path is the good like following.
> Suggestions?
> 
> --junitxml=path
> --ignore=path
> --genscript=path

these are all file system paths.   

> >> * when i ran "py.test --cov=py._code" it worked fine, i.e. only showed
> >>   results for the py._code subpackage.  When i mistype the path,
> >>   e.g. "py.test --cov=py._code2" it will give me *all* results which
> >>   is wrong: i'd expect "no coverage data for import path "py._code2" found
> >>   or something like this.
> 
> If all --cov options don't give something valid then everything
> collected is dumped (and everything was collect unless you use omit
> option in config file and omit is changing a lot with new source /
> include / omit).

This remains then the only issue i guess: rather give information 
that the specified "--cov=XYZ" restriction was used and turn up
*no* results (even if coverage defaults disagree).  Seeing everything 
is almost never what wants to see if "--cov=MORF" was specified. 
Do you agree and see a way to implement this within pytest-cov? 

Another minor note: when using --cov-report=html no information
is printed at all.  Like the junitxml or figleaf plugin i suggest
to print the location of the generated html directory or directly
the index.html file. 

best & thanks for your nice work!
holger
 
> This is where source option comes in.  With source option specify the
> roots of trees then limited to those roots since measurement itself is
> not done outside of those trees.
> 
> :)
> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev
> 

-- 



More information about the Pytest-dev mailing list