[py-dev] funcarg name clash / conftest load behaviour
Frank Hempel
red_socks at gmx.de
Fri Jun 25 11:44:18 CEST 2010
Am 25.06.2010 10:55, schrieb holger krekel:
>> There is just one little thing left where i'm not sure what the benefit
>> is in it. Consider the dir structure as meant in the last mails:
>>
>> a/conftest.py
>> b/conftest.py
>>
>> If py.test is started from within the "a"-directory not only the
>> conftest.py's of parent directories of "a" are loaded (as stated in the
>> docs), also the conftest.py of the "b"-directory is loaded. I
>> intuitively wouldn't consider "b" a parent of "a". Also the tests from
>> "b" are not run of course. Does it makes sense to load "b"'s conftest.py
>> too in this situation?
>
> I agree it's a bit suprising. I'll explain why also to clarify it for myself :)
>
> * py.test sees the command line arg b/test_hello.py
> * it performs collection starting from the directory where 'b' is contained, call it ROOTDIR
> * collecting ROOTDIR will collect all matching subdirs and files, so 'a' and 'b'
> * [HERE] collecting the 'b' subdir will consult b/conftest.py to allow it to influence the
> directory collection objects (it will call the pytest_collect_directory(...) hook to be precise)
> * after all subdirs/files have been collected the one matching the name 'b' is dived into
> * ...
This process I was expecting when calling "py.test" (without arguments
or with 'b/test_hello.py') from the ROOTDIR, as i think in your
explaination you meant having py.test being called from ROOTDIR because
the argument 'b/test_hello.py' you mentioned has 'b/' in it, right?.
When calling py.test (without arguments or 'test_hello.py') from within
the 'b'-directory i would expect that the collecting will only be done
for that 'b'-directory and its child directories.
To make sure we are talking about the same a's and b's ;)
the dir structure is:
~/ROOTDIR/
a/
conftest.py
test_hello.py
b/
contest.py
test_hello.py
on the cmd line i do:
~$ cd ROOTDIR/b
~/ROOTDIR/b$ py.test
================ test session starts ================
platform linux2 -- Python 2.5.5 -- pytest-1.3.1
test object 1: ~/ROOTDIR/b
test_hello.py .
============= 1 passed in 0.01 seconds ==============
if both conftest.py's have a pytest_configure and pytest_unconfigure,
they will be called in this order:
configure of b
configure of a
unconfigure of a
unconfigure of b
I agree that both 'a' and 'b' should be inspected when calling py.test
from ROOTDIR, but when calling it within 'a' or 'b'...?
...i hope i don't bother you if i misunderstood your explaination (sorry
in that case). but that you wrote "* py.test sees the command line arg
b/test_hello.py" made me wonder whether you misunderstood me in the way
that you thought i meant calling py.test from ROOTDIR.
Thank you,
Best regards,
Frank
More information about the Pytest-dev
mailing list