On the other hand, if you add another test_ function there will be no
changes in total duration because pytest is actually running both tests in
parallel:

#!/usr/bin/env python

import pytest
import time

@pytest.fixture(scope="function", params=["a1", "a2"])
def fix_dummy(request):
    print "fix_dummy: parameter: %s" % (request.param, )
    return request.param

def test_dummy1(fix_dummy):
    print "parameter from fix_dummy: %s" %(fix_dummy, )
    time.sleep(2)

def test_dummy2(fix_dummy):
    print "parameter from fix_dummy: %s" %(fix_dummy, )
    time.sleep(2)




$ py.test -vs test_dummy.py -n 2
======================================================================================
test session starts
=======================================================================================
platform linux2 -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4 --
/usr/bin/python
plugins: xdist
[gw0] linux2 Python 2.7.3 cwd: /home/gmagno/Desktop/pytest
[gw1] linux2 Python 2.7.3 cwd: /home/gmagno/Desktop/pytest
[gw1] Python 2.7.3 (default, Feb 27 2014, 20:00:17)  -- [GCC 4.6.3]
[gw0] Python 2.7.3 (default, Feb 27 2014, 20:00:17)  -- [GCC 4.6.3]
gw0 [4] / gw1 [4]
scheduling tests via LoadScheduling

test_dummy.py::test_dummy2[a1]
test_dummy.py::test_dummy1[a1]
[gw1] PASSED test_dummy.py::test_dummy1[a1]
[gw0] PASSED test_dummy.py::test_dummy2[a1]
test_dummy.py::test_dummy1[a2]
test_dummy.py::test_dummy2[a2]
[gw1] PASSED test_dummy.py::test_dummy1[a2]
[gw0] PASSED test_dummy.py::test_dummy2[a2]

====================================================================================
4 passed in 4.66 seconds
====================================================================================


I hope I am not confusing you guys.

Cheers,
Gonçalo







On Sat, Dec 6, 2014 at 9:29 PM, Goncalo Morgado <goncalo.ma...@gmail.com>
wrote:

>
>
> I might be missing something very fundamental here, but tests are not
> running in parallel on my side, as you may see tests are taking 4
> seconds-ish:
>
> $ py.test -vs test_dummy.py -n 2
> ======================================================================================
> test session starts
> =======================================================================================
> platform linux2 -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4 --
> /usr/bin/python
> plugins: xdist
> [gw0] linux2 Python 2.7.3 cwd: /home/gmagno/Desktop/pytest
> [gw1] linux2 Python 2.7.3 cwd: /home/gmagno/Desktop/pytest
> [gw0] Python 2.7.3 (default, Feb 27 2014, 20:00:17)  -- [GCC 4.6.3]
> [gw1] Python 2.7.3 (default, Feb 27 2014, 20:00:17)  -- [GCC 4.6.3]
> gw0 [2] / gw1 [2]
> scheduling tests via LoadScheduling
>
> test_dummy.py::test_dummy1[a1]
> [gw1] PASSED test_dummy.py::test_dummy1[a1]
> test_dummy.py::test_dummy1[a2]
> [gw1] PASSED test_dummy.py::test_dummy1[a2]
>
> ====================================================================================
> 2 passed in 4.47 seconds
> ====================================================================================
>
> Cheers,
> Gonçalo
>
>
>
> On Sat, Dec 6, 2014 at 8:52 PM, Bruno Oliveira <nicodde...@gmail.com>
> wrote:
>
>> Thanks for the example.
>>
>> I tried and it seems that xdist is running the tests in parallel: the
>> more CPUs I use, the fastest the test suite runs. Do you see a different
>> behavior?
>>
>> Cheers,
>>
>> On Sat, Dec 6, 2014 at 5:12 PM, Goncalo Morgado <goncalo.ma...@gmail.com>
>> wrote:
>>
>>> To better depict what I am saying follows some code.
>>>
>>> $ sudo pip install pytest
>>> $ sudo pip install pytest-xdist
>>> $ py.test -vs test_dummy.py -n 2
>>>
>>>
>>> #!/usr/bin/env python
>>>
>>> """
>>> This is test_dummy.py
>>> """
>>> import pytest
>>> import time
>>>
>>> @pytest.fixture(scope="function", params=["a1", "a2"])
>>> def fix_dummy(request):
>>>     print "fix_dummy: parameter: %s" % (request.param, )
>>>     return request.param
>>>
>>> def test_dummy1(fix_dummy):
>>>     print "parameter from fix_dummy: %s" %(fix_dummy, )
>>>     time.sleep(2)
>>>
>>>
>>> Cheers,
>>> Gonçalo
>>>
>>>
>>>
>>> On Sat, Dec 6, 2014 at 6:45 PM, Goncalo Morgado <goncalo.ma...@gmail.com
>>> > wrote:
>>>
>>>>
>>>> pytest-xdist helped me to run different tests in multiple CPUs, for
>>>> instance test_foo() and test_bar() would easily be run in two CPUs with
>>>> pytest-xdist. The problem is when you have test_foobar(some_fixture), where
>>>> some_fixture is parametrized with, let's say two parameters ["a", "b"],
>>>> which will lead to two different test runs of test_foobar(). The challenge
>>>> is to have these two test runs running in two CPUs.
>>>>
>>>> Cheers
>>>> Gonçalo
>>>>
>>>>
>>>> On Sat, Dec 6, 2014 at 6:30 PM, Bruno Oliveira <nicodde...@gmail.com>
>>>> wrote:
>>>>
>>>>> Have you tried using pytest-xdist?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> On Sat, Dec 6, 2014 at 4:26 PM, Goncalo Morgado <
>>>>> goncalo.ma...@gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> Hi pytest community,
>>>>>>
>>>>>> I am not sure this is the right place to ask this, and I am sorry if
>>>>>> it's not.
>>>>>> I am trying to make use of multiple CPUs to run my tests, which I can
>>>>>> for separately defined tests (different test_ functions for instance). 
>>>>>> *The
>>>>>> challenge is to run tests, generated from one single test_ function which
>>>>>> fixture it depends on is parametrized with multiple parameters, on 
>>>>>> multiple
>>>>>> CPUs*.
>>>>>> Currently I have this test that generates more than a thousand tests
>>>>>> (because of the parametrized fixture it depends on) and ends up being 
>>>>>> very
>>>>>> time consuming to run in one single CPU.
>>>>>>
>>>>>> Thanks for this great tool that is pytest!
>>>>>>
>>>>>> Cheers,
>>>>>> Gonçalo
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> pytest-dev mailing list
>>>>>> pytest-dev@python.org
>>>>>> https://mail.python.org/mailman/listinfo/pytest-dev
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org
https://mail.python.org/mailman/listinfo/pytest-dev

Reply via email to