[TIP] Can pytest identify python code that has no test

DZIOBEK, JOE jd5948 at att.com
Fri Jan 11 07:01:14 PST 2019


Hi Ned,

The skip_covered is interesting, but in case there are developer written .py files that are 100% covered – I do want them in the repot.

Where there is a will … there is a way:

Static method:
This is not pretty, but I just added an omit for an up to 10 level deep folder structure;
I just ran this and it worked. For now I am sticking with this

coverage report -m '--omit=.tox/*,*/__init__.py,*/*/__init__.py,*/*/*/__init__.py,*/*/*/*/__init__.py,*/*/*/*/*/__init__.py,*/*/*/*/*/*/__init__.py,*/*/*/*/*/*/*/__init__.py,*/*/*/*/*/*/*/*/__init__.py,*/*/*/*/*/*/*/*/*/__init__.py,*/*/*/*/*/*/*/*/*/*/__init__.py'

Dynamic method:
I earlier created a list of all __init__.py files that I created, in order to find the .py files in lower folder structure.
I also used this list to delete the files once my tox command is done.
This list could be turned into a .coveragerc file – and I could omit exactly those files.
This is slightly more complex, but I tried it with a manually created .coveragerc, and it worked.

Thanks - Joe

From: Ned Batchelder [mailto:nedbat at gmail.com] On Behalf Of Ned Batchelder
Sent: Thursday, January 10, 2019 7:30 PM
To: DZIOBEK, JOE <jd5948 at att.com>; testing-in-python at lists.idyll.org
Subject: Re: [TIP] Can pytest identify python code that has no test


There isn't a way to omit __init__.py files, but you can omit any file that has 100% coverage, which should include all your __init__.py files:

[report]
skip_covered = True

--Ned.
On 1/10/19 2:57 PM, DZIOBEK, JOE wrote:
Hey Ned,

I wrote a script to create a __pytest__.py file in every subfolder
Then I execute my tox/pytest/coverage command
Then I delete the __init__.py files I created
This all works, except I would like to omit all the __init__.py files in the coverage report, there are too many.

Is there a way to omit all __init__.py files, no matter how many subdirectories are in its path?
I have tried various combinations and am still looking online for solutions.

This is what I have right now:

coverage run -m --source=. pytest --ignore=virtualenv-15.1.0/ --ignore=.tox
coverage report -m  --omit=.tox/*

Thanks - Joe

From: Ned Batchelder [mailto:nedbat at gmail.com] On Behalf Of Ned Batchelder
Sent: Friday, January 04, 2019 4:07 PM
To: DZIOBEK, JOE <jd5948 at att.com><mailto:jd5948 at att.com>; testing-in-python at lists.idyll.org<mailto:testing-in-python at lists.idyll.org>
Subject: Re: [TIP] Can pytest identify python code that has no test


Coverage will only find files that it considers importable.  It's essential that you have __init__.py files in the subdirectories.  Those files can be empty, no one needs to update them.

Your original output showed a __init__.py file, but this latest run does not.

--Ned.
On 1/4/19 2:31 PM, DZIOBEK, JOE wrote:
Hi Ned,

Yes, my tox.ini file is as described earlier:
commands =
    coverage run -m --source=. pytest --ignore=virtualenv-15.1.0/ --ignore=.tox
    coverage report -m --omit=.tox/*

For additional debugging, I added another py file to my root folder, so now I have:

script.py
test_script.py
scriptB2.py ( which does not have an associated test script! )

Then a subfolder (actually 5 levels deep, see below)
scriptA.py
test_scriptA.py
scriptB.py ( which does not have an associated test script! )

Executing the tox command again, I now get an improved picture:
Name                                                                      Stmts   Miss  Cover   Missing
-------------------------------------------------------------------------------------------------------
sub/sub2/sub3/sub4/sub5/scriptA.py            2      0   100%
sub/sub2/sub3/sub4/sub5/test_scriptA.py       3      0   100%
script.py                                                                     4      1    75%   3
scriptB2.py                                                          142    142     0%   3-322
test_script.py                                                                3      0   100%
-------------------------------------------------------------------------------------------------------

So we found the UNTESTED scriptB2.py in root folder – exactly what we want.
It did not find the UNTESTED script.py in the deeper folder.
Any ideas? BTW, I don’t have any __init__.py files in any folder.

PS: Bruno, your idea with adding the import to the __init__.py file is good, but requires someone to update that file, probably the same person that forgot to write the test.py;

Thanks for your help,
Regards - Joe

From: testing-in-python-bounces at lists.idyll.org<mailto:testing-in-python-bounces at lists.idyll.org> [mailto:testing-in-python-bounces at lists.idyll.org] On Behalf Of Ned Batchelder
Sent: Friday, January 04, 2019 11:59 AM
To: testing-in-python at lists.idyll.org<mailto:testing-in-python at lists.idyll.org>
Subject: Re: [TIP] Can pytest identify python code that has no test


Joe, since you have specified "--source=.", coverage will search your tree for importable Python files, and report on them even if they are never imported.  So you are already doing the right thing. I'm not sure why it wouldn't show you that file.  Are you sure you are running the commands you showed?

--Ned.
On 1/4/19 11:42 AM, Bruno Oliveira wrote:
Hi Joe,
On Fri, Dec 21, 2018 at 5:06 PM DZIOBEK, JOE <jd5948 at att.com<mailto:jd5948 at att.com>> wrote:
Is there a way to have this file included in the report?

You are not seeing coverage information for scriptB.py not because it does not have an associated test file, but because it was never imported during the run (I'm assuming).

One way to have it to appear on the report is to import scriptB on your __init__.py file, this way its coverage will be tracked.

Hope this helps,
Bruno





_______________________________________________

testing-in-python mailing list

testing-in-python at lists.idyll.org<mailto:testing-in-python at lists.idyll.org>

http://lists.idyll.org/listinfo/testing-in-python<https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.idyll.org_listinfo_testing-2Din-2Dpython&d=DwMDaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=HqXpIkByGFw24obqdoDmDw&m=pzoCcDdzPm0JZq_KFlE4flon2ylEw7Wn8WlOaZn3xgc&s=LZn-2waQlWLtBfotLco8eIxWEeII9mXtCXPlJ8rxaos&e=>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20190111/bbc17d2f/attachment-0001.htm>


More information about the testing-in-python mailing list