[py-dev] [RFC] tox combinatorial environments V0.1

Ronny Pfannschmidt Ronny.Pfannschmidt at gmx.de
Sat Jul 7 12:37:34 CEST 2012


Hi all,

After some recent thought I think I grasped the beginning of
a good base idea for combinatoric tox envs

Various users including myself have a need for better expression of
more combinatoric dimensions in tox testenv listings

example ranges from simple products
like `python version X database backends`
up to more diverse requirement setups
like having different versions of different backends
(for example different versions of the python scm bindings in anyvc)


In order to express those i think 2 concepts are necessary.

1. Variations
2. Templates/blocks

Variations express dimensions of variantion,
for example python versions or database backends

Blocks express a "base" for a testenv that will be enriched
by the actual testenv to express the final testenv

Blocks may extend/enrich upon other blocks
(using the same mro algorithm python uses for inheritance)



examples
==========

Expressing the current python testenvs::

     [part:pythons]
     variantions =
         python_version 24 25 26 27 30 31 32 22
     python = python[${python_version}] #XXX: needs a sane way to evaluate
     python[24] = python2.4
     python[25] = python2.5
     python[26] = python2.6
     python[27] = python2.7
     python[30] = python3.0
     python[31] = python3.1
     python[32] = python3.1
     python[33] = python3.3

     [testenv:py${python_version}]
     use = pythons


expressing multiple database backends::

     [part:sqlite]
     depends = sqlite

     [part:mysql]
     depends = mysqldb

     [testenv:py$python_version-$backend]
     use = pythons ${backend}
     variantion =
         backend sqlite mysql postgres

     depends =
         ${previous}
         pytest
     commands = py.test --database ${backend}


expressing more complex nested variation::

     [part:mercurial]
     variation = version 2.0 2.1 2.2
     depends =
         mercurial==${version}
     vcs = hg

     [part:subvertpy]
     version = latest
     depends =
         suvertpy==dev
     vcs = svn

     [testenv:py${python_version}-${backend}-{$version}]
     variations =
         backend subvertpy mercurial
         # override the variations of the pythons part
         python_version 26 27 33
     use = pythons $backend
     depends =
         ${previous}
         pytest

     commands = py.test --vcs ${vcs}



More information about the Pytest-dev mailing list