You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stratos.apache.org by Chamila De Alwis <ch...@wso2.com> on 2014/10/20 12:25:03 UTC

Unit tests for Python carrtridge agent

Hi,

I started writing unit tests for the Python cartridge agent with the
intention of keeping code aligned to the requirements that can change in
the Java cartridge agent.

I started with the Py.Test module to write and run unit tests. Py.Test is
one of the most used testing libraries in Python and because of the wide
spread use, a lot of handy tools are packed along with it, like test
collection and reporting. There is also another library called Nose, but
there seems to be a lot of online resources for Py.Test.

I expect to bring up the code coverage level up to at least 60% with unit
tests alone.

Any inputs, suggestions? :) I think we can use Py.Test for other Python
code in the Stratos project too.

Regards,
Chamila de Alwis
Software Engineer | WSO2 | +94772207163
Blog: code.chamiladealwis.com

Re: Unit tests for Python carrtridge agent

Posted by Imesh Gunaratne <im...@apache.org>.
Great! Thanks Chamila for the detailed explanation!

On Thu, Oct 23, 2014 at 3:36 PM, Chamila De Alwis <ch...@wso2.com> wrote:

> Hi Imesh,
>
> Python has two standard libraries for unit testing called unittest and
> doctest. Doctest is a simple library which allows expressing the standard
> use cases for each method in their documentation. It is not as extensive to
> be used for a unit testing framework alone. 'unittest' is good but it tends
> to demand some boilerplate work to be done in order to get the tests
> running. And in the community the way unittest tests are written is
> considered un-pythonic, since unittest is more like jUnit and is inspired
> from jUnit rather than being developed from ground up for Python. These are
> very useful indeed, however they tend to have a lot of rough edges in terms
> of usability and extensibility.
>
> Py.Test[1] and Nose[2] are the two most used unit testing tools that are
> built on top of the standard libraries. Out of them, Py.Test is the more
> mature, extensible framework. It is also easier start working with since no
> pre-configuration is needed. Both of them have the basic plugins such as
> test coverage reports, mocking etc. Because of its maturity, Py.Test tends
> to have more plugins and documentation resources available. Py.Test also
> has a good in-built mocking component, for "monkeypatching" values from
> environment variables to functions and methods.
>
> There is another part of Py.Test called Fixtures[3] which I'm still
> investigating in to. It basically allows writing powerful setup and
> teardown functions. This will hopefully help us to come up with a good
> foundation for automated integration and end to end testing.
>
> There are other additional tools such as tox, and unittest2 which I didn't
> look deep in to. They tend to be relatively new and might have few ugly
> surprises down the road.
>
> [1] - http://pytest.org/latest/
> [2] - https://nose.readthedocs.org/en/latest/
> [3] - http://pytest.org/latest/fixture.html
>
> Regards,
> Chamila de Alwis
> Software Engineer | WSO2 | +94772207163
> Blog: code.chamiladealwis.com
>
>
>
> On Thu, Oct 23, 2014 at 1:07 AM, Imesh Gunaratne <im...@apache.org> wrote:
>
>> +1 A great thought Chamila, could you please provide a list of available
>> python test libraries and reasons for selecting pytest?
>>
>> Thanks
>>
>> On Tue, Oct 21, 2014 at 12:47 PM, Gayan Gunarathne <ga...@wso2.com>
>> wrote:
>>
>>>
>>> +1 for pytest. I guess Nose also derived from the pytest.
>>>
>>> Pytest has good testing fixture mechanism which we can use to make our
>>> unit test fixture.
>>>
>>>
>>> [1] http://pytest.org/latest/xunit_setup.html#xunitsetup
>>> [2] http://pytest.org/latest/fixture.html
>>>
>>> Thanks,
>>> Gayan
>>>
>>> On Mon, Oct 20, 2014 at 3:55 PM, Chamila De Alwis <ch...@wso2.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I started writing unit tests for the Python cartridge agent with the
>>>> intention of keeping code aligned to the requirements that can change in
>>>> the Java cartridge agent.
>>>>
>>>> I started with the Py.Test module to write and run unit tests. Py.Test
>>>> is one of the most used testing libraries in Python and because of the wide
>>>> spread use, a lot of handy tools are packed along with it, like test
>>>> collection and reporting. There is also another library called Nose, but
>>>> there seems to be a lot of online resources for Py.Test.
>>>>
>>>> I expect to bring up the code coverage level up to at least 60% with
>>>> unit tests alone.
>>>>
>>>> Any inputs, suggestions? :) I think we can use Py.Test for other Python
>>>> code in the Stratos project too.
>>>>
>>>> Regards,
>>>> Chamila de Alwis
>>>> Software Engineer | WSO2 | +94772207163
>>>> Blog: code.chamiladealwis.com
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> Gayan Gunarathne
>>> Technical Lead
>>> WSO2 Inc. (http://wso2.com)
>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>
>>>
>>
>>
>>
>> --
>> Imesh Gunaratne
>>
>> Technical Lead, WSO2
>> Committer & PMC Member, Apache Stratos
>>
>
>


-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PMC Member, Apache Stratos

Re: Unit tests for Python carrtridge agent

Posted by Chamila De Alwis <ch...@wso2.com>.
Hi Imesh,

Python has two standard libraries for unit testing called unittest and
doctest. Doctest is a simple library which allows expressing the standard
use cases for each method in their documentation. It is not as extensive to
be used for a unit testing framework alone. 'unittest' is good but it tends
to demand some boilerplate work to be done in order to get the tests
running. And in the community the way unittest tests are written is
considered un-pythonic, since unittest is more like jUnit and is inspired
from jUnit rather than being developed from ground up for Python. These are
very useful indeed, however they tend to have a lot of rough edges in terms
of usability and extensibility.

Py.Test[1] and Nose[2] are the two most used unit testing tools that are
built on top of the standard libraries. Out of them, Py.Test is the more
mature, extensible framework. It is also easier start working with since no
pre-configuration is needed. Both of them have the basic plugins such as
test coverage reports, mocking etc. Because of its maturity, Py.Test tends
to have more plugins and documentation resources available. Py.Test also
has a good in-built mocking component, for "monkeypatching" values from
environment variables to functions and methods.

There is another part of Py.Test called Fixtures[3] which I'm still
investigating in to. It basically allows writing powerful setup and
teardown functions. This will hopefully help us to come up with a good
foundation for automated integration and end to end testing.

There are other additional tools such as tox, and unittest2 which I didn't
look deep in to. They tend to be relatively new and might have few ugly
surprises down the road.

[1] - http://pytest.org/latest/
[2] - https://nose.readthedocs.org/en/latest/
[3] - http://pytest.org/latest/fixture.html

Regards,
Chamila de Alwis
Software Engineer | WSO2 | +94772207163
Blog: code.chamiladealwis.com



On Thu, Oct 23, 2014 at 1:07 AM, Imesh Gunaratne <im...@apache.org> wrote:

> +1 A great thought Chamila, could you please provide a list of available
> python test libraries and reasons for selecting pytest?
>
> Thanks
>
> On Tue, Oct 21, 2014 at 12:47 PM, Gayan Gunarathne <ga...@wso2.com>
> wrote:
>
>>
>> +1 for pytest. I guess Nose also derived from the pytest.
>>
>> Pytest has good testing fixture mechanism which we can use to make our
>> unit test fixture.
>>
>>
>> [1] http://pytest.org/latest/xunit_setup.html#xunitsetup
>> [2] http://pytest.org/latest/fixture.html
>>
>> Thanks,
>> Gayan
>>
>> On Mon, Oct 20, 2014 at 3:55 PM, Chamila De Alwis <ch...@wso2.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I started writing unit tests for the Python cartridge agent with the
>>> intention of keeping code aligned to the requirements that can change in
>>> the Java cartridge agent.
>>>
>>> I started with the Py.Test module to write and run unit tests. Py.Test
>>> is one of the most used testing libraries in Python and because of the wide
>>> spread use, a lot of handy tools are packed along with it, like test
>>> collection and reporting. There is also another library called Nose, but
>>> there seems to be a lot of online resources for Py.Test.
>>>
>>> I expect to bring up the code coverage level up to at least 60% with
>>> unit tests alone.
>>>
>>> Any inputs, suggestions? :) I think we can use Py.Test for other Python
>>> code in the Stratos project too.
>>>
>>> Regards,
>>> Chamila de Alwis
>>> Software Engineer | WSO2 | +94772207163
>>> Blog: code.chamiladealwis.com
>>>
>>>
>>>
>>
>>
>> --
>>
>> Gayan Gunarathne
>> Technical Lead
>> WSO2 Inc. (http://wso2.com)
>> email  : gayang@wso2.com  | mobile : +94 766819985
>>
>>
>
>
>
> --
> Imesh Gunaratne
>
> Technical Lead, WSO2
> Committer & PMC Member, Apache Stratos
>

Re: Unit tests for Python carrtridge agent

Posted by Imesh Gunaratne <im...@apache.org>.
+1 A great thought Chamila, could you please provide a list of available
python test libraries and reasons for selecting pytest?

Thanks

On Tue, Oct 21, 2014 at 12:47 PM, Gayan Gunarathne <ga...@wso2.com> wrote:

>
> +1 for pytest. I guess Nose also derived from the pytest.
>
> Pytest has good testing fixture mechanism which we can use to make our
> unit test fixture.
>
>
> [1] http://pytest.org/latest/xunit_setup.html#xunitsetup
> [2] http://pytest.org/latest/fixture.html
>
> Thanks,
> Gayan
>
> On Mon, Oct 20, 2014 at 3:55 PM, Chamila De Alwis <ch...@wso2.com>
> wrote:
>
>> Hi,
>>
>> I started writing unit tests for the Python cartridge agent with the
>> intention of keeping code aligned to the requirements that can change in
>> the Java cartridge agent.
>>
>> I started with the Py.Test module to write and run unit tests. Py.Test is
>> one of the most used testing libraries in Python and because of the wide
>> spread use, a lot of handy tools are packed along with it, like test
>> collection and reporting. There is also another library called Nose, but
>> there seems to be a lot of online resources for Py.Test.
>>
>> I expect to bring up the code coverage level up to at least 60% with unit
>> tests alone.
>>
>> Any inputs, suggestions? :) I think we can use Py.Test for other Python
>> code in the Stratos project too.
>>
>> Regards,
>> Chamila de Alwis
>> Software Engineer | WSO2 | +94772207163
>> Blog: code.chamiladealwis.com
>>
>>
>>
>
>
> --
>
> Gayan Gunarathne
> Technical Lead
> WSO2 Inc. (http://wso2.com)
> email  : gayang@wso2.com  | mobile : +94 766819985
>
>



-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PMC Member, Apache Stratos

Re: Unit tests for Python carrtridge agent

Posted by Gayan Gunarathne <ga...@wso2.com>.
+1 for pytest. I guess Nose also derived from the pytest.

Pytest has good testing fixture mechanism which we can use to make our unit
test fixture.


[1] http://pytest.org/latest/xunit_setup.html#xunitsetup
[2] http://pytest.org/latest/fixture.html

Thanks,
Gayan

On Mon, Oct 20, 2014 at 3:55 PM, Chamila De Alwis <ch...@wso2.com> wrote:

> Hi,
>
> I started writing unit tests for the Python cartridge agent with the
> intention of keeping code aligned to the requirements that can change in
> the Java cartridge agent.
>
> I started with the Py.Test module to write and run unit tests. Py.Test is
> one of the most used testing libraries in Python and because of the wide
> spread use, a lot of handy tools are packed along with it, like test
> collection and reporting. There is also another library called Nose, but
> there seems to be a lot of online resources for Py.Test.
>
> I expect to bring up the code coverage level up to at least 60% with unit
> tests alone.
>
> Any inputs, suggestions? :) I think we can use Py.Test for other Python
> code in the Stratos project too.
>
> Regards,
> Chamila de Alwis
> Software Engineer | WSO2 | +94772207163
> Blog: code.chamiladealwis.com
>
>
>


-- 

Gayan Gunarathne
Technical Lead
WSO2 Inc. (http://wso2.com)
email  : gayang@wso2.com  | mobile : +94 766819985