[py-dev] How can I use py.test in trytond

holger krekel holger at merlinux.eu
Mon Apr 4 09:37:36 CEST 2011


Hi Nicolas,

On Sun, Apr 03, 2011 at 23:51 +0200, Nicolas Évrard wrote:
> Hello,
> 
> I develop on tryton[1] and I'd like to use py.test to test the new
> modules I am writing for it.
> 
> This framework has a concept of modularity that allows some module to
> override the definition of objects. An example will probably help
> understanding the situation.
> 
> So we have the base trytond module which contains a `modules`
> directory with the list of available modules (they are all imported
> but not necessarily installed).
> 
> project/
>      bin/
>      trytond/
>          modules/
>              ...
>              sale/
>              sale_cost/
>              ...
> 
> So when you install the sale_cost module the object defined on the
> sale module are extended with more fields and the methods might be
> extended to fit the business case.
> 
> Currently I use a conftest.py file in the top directory in order to
> define funcargs for my tests. But it looks like a suboptimal solution.
> 
> I think I can use plugins in order to do the following:
> 
>      1. Define a funcarg `sale` in the sale module
>      2. Define a funcarg `sale` in the sale_cost module. This funcarg
>         should ideally use the funcarg from `sale` and extend it with
>         various information (if allowed to do so by the business rule).
>      3. Calling py.test trytond/modules/sale_cost from the project/
>         directory should work
> 
> This setup would allow me to provide funcargs for use to other
> developers on which they can base their own tests.
> 
> Right now I noticed that the funcargs are loaded recursively. Do you
> think it is possible to write a plugin that would read the dependency
> information in the sale_cost module and use it to setup the conftests
> file found in those modules to be imported *before* the conftest.py
> from sale_cost ?
> 
> If it is, do you have any pointers on how I can do this ?

request.getfuncargvalue() can be called to decorate an existing funcarg,
see http://bit.ly/eiByLF 

However, i guess you could just have a single conftest.py which provides different 
values for your funcargs depending on which directory they are requested from.
(``request.module.fspath`` gives you the file system path of the python module.)
This way you would encode all the logic in one place.

HTH,
holger

> BTW, py.test is a really nice piece of software and I really enjoy
> using it.

BTW, nice to hear :)


> 
> [1]: http://www.tryton.org/
> 
> -- 
> (°> Nicolas Évrard
> ( ) Liège
>> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev



More information about the Pytest-dev mailing list