Thanks Gaurav for putting up this guidelines page. Good work! ~Talluri
On 19/03/15 10:59 am, "Gaurav Aradhye" <gaurav.arad...@clogeny.com> wrote: >I have added Wiki page for this in QA section. > >https://cwiki.apache.org/confluence/display/CLOUDSTACK/Guidelines+for+test >+developers > >Not a very polished one, but I will be adding and polishing it soon. > >Regards, >Gaurav > >On Thu, Mar 19, 2015 at 9:52 AM, Gaurav Aradhye ><gaurav.arad...@clogeny.com> >wrote: > >> Paul, >> >> Some pages on wiki talk about general guidelines to Dev, but there is no >> page stating detailed guidelines for test developers. >> I would like to add a new page in QA section for this. Will drop >>separate >> mail for write access to wiki. >> >> Daan, >> >> I will have to check on this. I will find out how we can include static >> analysis for tests similar to that it is in place for dev code >>(findbugs). >> >> Regards, >> Gaurav >> >> On Wed, Mar 18, 2015 at 8:22 PM, Daan Hoogland <daan.hoogl...@gmail.com> >> wrote: >> >>> good write-up Gaurav, I hope that most of these can be >>> validated/verified checkstyle-style. pep8 can of course. Some others >>> must remain judged by humanoids, like the one where functions are >>> pulled up to higher abstraction layers. Maybe you could shine your >>> light on what we can automate? i.e. can pyflakes be added to a target? >>> >>> > -----Original Message----- >>> > From: Gaurav Aradhye [mailto:gaurav.arad...@clogeny.com] >>> > Sent: 18 March 2015 07:16 >>> > To: dev@cloudstack.apache.org >>> > Subject: Guidelines for test developers >>> > >>> > Hello all, >>> > >>> > Last year after improving Marvin framework, we have been continuously >>> spending time in improving old test cases which are written in old >>>style or >>> they don't abide to certain guidelines, also which don't use new >>>functions >>> available in marvin. Many times a test developer who is adding test >>>case >>> for the first time or feature developers adding Basic Validation Tests >>> > (BVTs) tend to copy paste the code available in certain test case and >>> try to modify it according to feature and commit it. This adds to >>> inconsistencies. >>> > >>> > As and when I touch a file for fixing an issue or adding/editing it, >>>I >>> try to incorporate below guidelines and improve the existing code. But >>> still few test files are not up to the mark. Our final goal is to have >>>good >>> code in every file.So writing this mail to consolidate few rules that >>> should be known/considered by everyone adding tests to Marvin. Also, >>>if you >>> touch a file, feel free to remove any inconsistencies that are already >>> present in the file. >>> > >>> > *1. Import * should always be avoided*. When I started two years >>>back, >>> and tried to understand the code flow/ test cases, I could not easily >>> understand from where the particular module is imported. The imports >>>must >>> be specific. >>> > >>> > When the imports are specific, it eliminates the possibility of test >>> case failure due to invalid import when specific import is removed from >>> dependent module. >>> > >>> > E.g. If your test case has following import. >>> > >>> > from A import * >>> > >>> > And it uses time module which is not imported explicitly in test case >>> and comes from module A. Then the test case will start failing when >>>"import >>> time"is removed from module A. You certainly don't want this to happen. >>> > >>> > *2. Maintaining Pep8 standards for python code.* >>> > >>> > The code is read more often that it is written. Pep8 standards >>>improve >>> the readability of the code making it consistent in style. There is a >>>tool >>> named "*autopep8*" which you can install with pip install and then you >>>can >>> run following command on your test file. >>> > >>> > autopep8 -i -a -a testFile.py >>> > >>> > This will make the file pep8 consistent and will also remove the >>>white >>> spaces. But some issues need human intervention and can't be fixed with >>> tool. For fixing those, check the pep8 issues with "pep8 testFile.py" >>>and >>> fix manually. >>> > >>> > *3. Keep only imports which are used* in the test suite and remove >>> unwanted imports. >>> > >>> > *4. Keep all the configuration parameters* (such as data which is >>> passed to API while creating Network offering, Service offering, >>>account >>> etc...) *in tools/marvin/marvin/config/test_data.py file*. Don't >>>include >>> them in test suite itself. >>> > >>> > Many of the dictionaries are reusable and if you are adding a new >>>test, >>> there are only a few dictionaries you will have to add in the file. >>> > >>> > If any of the data contains URLs or any data which should be changed >>> according to setup/env, then include the dict in "*configurableData*" >>> > section in test_data.py file. This makes it easier to identify which >>> data needs to be dynamic according to the setup and which data doesn't >>>need >>> to be touched when env is changed. >>> > >>> > *5. Before committing a test case, run it* with the latest branch >>> against which you are adding the test case and attach the results in >>>Pull >>> Request. >>> > If in case change is very small, and doesn't need to be run, then at >>> least check syntactical errors with python command and also with the >>>help >>> of tools such as pyflakes. >>> > >>> > 6. If you add a new function in your test case and you think it can >>>be >>> used in future by other test cases, then please *add that function to >>> common or utils file* in Marvin. Don't keep it local to test case. This >>> will prevent multiple contributors adding same functions in their test >>>case >>> to achieve a particular goal. >>> > >>> > *7. Please make sure all the resources created through the test cases >>> are deleted *when test case execution completes, or even when the test >>>case >>> fails. >>> > >>> > 8. If same test case is to be run with different configuration or >>> setting, you can *make use of ddt library*. For example, if you have >>>added >>> test case for isolated networks, and you need to run the same code for >>> shared and VPC networks, then you don't need to add 3 test cases. Just >>>add >>> relevant tags to the test case and you are good to go. Although you >>>will >>> need to write code for handling those tags. It is already used in few >>>test >>> cases. A simple grep over component folder and you can see how it is >>>used. >>> > >>> > This blog explains how it works. >>> > >>> >>>https://technomilk.wordpress.com/2012/02/12/multiplying-python-unit-test >>>-cases-with-different-sets-of-data/ >>> > >>> > I will check if this is in any wiki page currently, and edit it. Or >>> will add a new page. >>> > I hope everyone adding test cases follows above guidelines. Feel free >>> to add more. >>> > >>> > Regards, >>> > Gaurav >>> >>> -- >>> Daan >>> >> >>