[Freeipa-devel] Switching to pytest

Petr Viktorin pviktori at redhat.com
Tue Oct 7 08:37:26 UTC 2014


On 10/06/2014 11:21 PM, John Dennis wrote:
> On 10/03/2014 09:24 AM, Petr Viktorin wrote:
>> https://fedorahosted.org/freeipa/ticket/4610
>>
>> Our test suite is currently not very maintainable. I want to dedicate
>> some time to improve this.
>> The biggest part of this effort will be switching to a different test
>> framework, [pytest]. Compared to Nose, it makes complicated tests easier
>> to write -- at the expense of using more "magic".
>
> Just looking for information, why pytest?

Nose is not enough, and knowing nothing clearly better (easier, more 
supportable, more popular*) than pytest, I went with what I know.

* unittest/nose is more popular than pytest, of course

> Here is why I'm asking. After leaving IPA I went to another large Python
> based project, OpenStack. OpenStack is really a number of loosely
> affiliated autonomous projects, each of which gets to decide how they
> are going to write and run their unit tests. As might be expected it's a
> bit of a mess. But there has been some convergence lately using tox,
> testr and testtools in combination.Python like Java has no shortage of
> test frameworks and that diversity is actually a pain point. What
> happens is very few folks actually understand the intricacies of test
> construction and execution (because there are so many options, it can be
> convoluted, there are many layers and each project does things
> differently). The net result is a lot of wasted time, I groan every time
> tests get ported to the test framework de jour, which seems to happen
> with alarming frequency.
>
> I'd really like to see some convergence in the Python community on test
> frameworks so as a developer you only have to be an expert in one
> framework because debugging test failures (including simply reproducing
> the failure) is currently a time sink and just when you think you
> understand what the heck is going on someone announces we're moving to
> the next big thing. The proliferation of test frameworks is further
> compounded by weak documentation. If something goes "boom" it can
> literally take days to piece together enough information to diagnose the
> issue (often because there are so many layers).

I sympathize.
Do you have a solution, though? Staying with Nose is not one at this 
point. I'm not too convinced by convergence in OpenStack; it's still 
just one project. If you have some other arguments for testr/testtools, 
let me know; I don't see the advantages over pytest.

> So how does pytest fit in with everything else? Is stable, long term and
> widely adopted? What about mocking? Is there a consensus on fixtures vs.
> mocks (that isn't religious). Can pytest handle both?

I'm not sure I understand correctly what you mean, but you can wrap 
mocks/monkeypatching in fixtures. So yes, pytest can handle both.

> I guess what I'm asking is there some convergence with Python test
> tools? Or with testing are we in the equivalent of the SCM wars of 5-7
> years ago until most everyone figured out git was superior and had the
> most traction?

Yeah, I guess you could say the testing war is raging on.
But even the SCM situation is not clear-cut; e.g. Mozilla or Python use 
Mercurial, and given the availability of bridge tools, they aren't 
likely to switch any time soon. And the Linux package manager war is 
also raging on, with no clear winner.

> Picking the test framework other than the one that bubbles to the top
> and becomes the de facto standard has consequences. I clearly do not
> have enough information to make a judgment here and any additional
> information would be very much appreciated.

Perhaps it's because I'm in Europe, but every major Python conference I 
go to has one or two pytest talks. Also, pytest was written by the same 
people as tox, which (I dare say) is the de-facto standard for test 
*orchestration* in Python.
So in the test framework war I'm betting on this one.

-- 
Petr³




More information about the Freeipa-devel mailing list