Thanks for writing this up, very useful! Cheers,
Leo > On 18 Mar 2015, at 08:17, Gaurav Aradhye <gaurav.arad...@clogeny.com> wrote: > > 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