Hi Ronny, Benjamin,  all, 

On Tue, Sep 29, 2009 at 00:33 +0200, Ronny Pfannschmidt wrote:
> Hi,
> 
> after some refactoring in the tests for the new serializer and some chat
> with Benjamin it got appearant that some form of chaining the
> pytest_generate_tests is helpfull and necessart.

I am missing concise code examples to showcase what is missing and to
understand concretely the issues and what you propose.  From what
i understand - for a function like this: 

    def test_function(arg1, arg2):
        ... 

it's currently not easily possible to have a funcarg generator 
for arg1 and arg2 independently.  I believe that this could be 
helped through a new attribute on the request object, like: 

    for call in request.calls: 
        # use call.id, call.param, call.funcargs 
        request.addcall(...) 

If both the 'arg1' and 'arg2' generator are implenented 
this way they would collaborate to create m*n calls of
the function. 

Another bit maybe is how to explicitely set funcarg factories, something
like e.g.:

    @py.test.mark.genfuncarg(arg1=arg1factory, arg2=arg2factory)
    def test_function(arg1, arg2):
        ... 

This can be played with today through a custom pytest_generate_tests hook.  
I think the factories should be called with the request object.  
Experimentation and real-life usage is neccessary to settle details. 

It'd be great if we settled best/proven practises for 
parametrized/generated tests and did a plugin with docs on it.  
Any other comments?  Or am i missing your points entirely? 

cheers,
holger

> Since there are various details lurking around,
> this is a initial try to collect the needs for propperly chaining
> generate_tests calls.
> I will handle each aspect in a separate section.
> For each aspect i will add all items i currenly consider
> intresting/usefull, that might be incomplete and/or more than
> reasonable.
> 
> Necessary Scopes
> ----------------
> 
> conftest/plugin
>     Required to allow comfortable whole-project generators
> package/module
>     the same goes for sub-groups of the tests
> functions
>     doing special cases at the module level hook tends to be a mess
>     see the current serializer tests for reasons

note that you can also have funcargs at class level. 

> Additional dimensions of variation that could proof usefull
> ------------------------------------------------------------
> 
> funcargs
>   choose test generators based on the arguments a function explicitly
> takes, 
>   implicitly used funcargs via request.getfuncargvalue cant be
> considered there
> * marks
>   using decorators to add values and the way to add them to the call
> 
> 
> Chaining order
> --------------
> 
> conftest plugin -> package -> subpackage -> module -> function
> 
> 
> building the test id's
> -------------------------
> 
> for just chaining the tests one can simply append to a tuple of id's for
> each successive add_call invokation per hook
> 
> if variation on funcargs is considered one could show those like
> additional keyword parameters
> 
> funcarg generators shouldn't support chaining themself, just use the
> closest matching test generator
> 
> dealing with the param argument of addcall
> -------------------------------------------
> 
> * provide the value of the most close scope to request objecs 
> * previous values of params could be accessible via linking to the
> precedessor of the current call or by providing a list ordered by scope
> * for funcarg variation it might be helpfull to supple the funcarg
> function with the param the funcarg related generator created
> 
> 
> dealing with the funcargs argument of addcall
> ---------------------------------------------
> 
> * values from more close scope should override vales for less close
> scope
> * warnings could be printed for name-clashes/overrides
> 
> 
> how to actually combine the generators
> --------------------------------------
> 
> Note: early never released versions of the generate_tests feature
> provided implied combinations of all matching test generators, however
> that was fragile and got dumped for 'match most closest hook'
> 
> i thenk we should prefer a explicit combination where for each addcall
> of an outer scope, the complete generate_tests function of the inner
> scope has to be run
> 
> this results in a clean tree of invocations and better controll over the
> actual combinations
> 
> 
> regards Ronny Pfannschmidt
> 
> _______________________________________________
> py-dev mailing list
> py-dev@codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev
> 

-- 
Metaprogramming, Python, Testing: http://tetamap.wordpress.com
Python, PyPy, pytest contracting: http://merlinux.eu 
_______________________________________________
py-dev mailing list
py-dev@codespeak.net
http://codespeak.net/mailman/listinfo/py-dev

Reply via email to