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 >> > >