Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best practices for getting the most testing coverage with Django/Python?

My tests are seriously lacking and I don't have a whole lot of faith in them. What are some of the best practices for getting the most testing coverage I can using Django/Python? I've been taking a look at Freshen and Lettuce, which look pretty promising, but I can't use them for everything, can I? I'm looking for advice on how to structure my workflow/project with testing so that I can feel confident when deploying new code in a production environment.

like image 950
Liam Avatar asked May 05 '11 16:05

Liam


People also ask

How can I get better test coverage?

Tips to perform test coverageMake appropriate test cases that cover the maximum test scenarios required based on the current release. Perform testing before the release so that the focus is provided to cover more scenarios in less time on a scheduled basis.

How do you increase code coverage in Python?

Increase coverage by adding more tests The code coverage has increased to 78% on adding another test case. It can be increased further to 100% in a similar fashion.


1 Answers

  1. Stop coding.

  2. Write the tests for the things your application is supposed to do.

First, use the built-in Django testing. Write model tests as TestCase classes inside your models.py.

Do that now. Before reading any further. Add django.test.TestCase classes right now that create, modify and retrieve model objects. Be sure you have a test method for each property, attribute, or extra method you defined.

I'll wait until you've finished that.


Model tests complete? Good.

Now create a tests.py file in each application. Every single one. All empty.

In each tests.py file create django.test.TestCase classes for each Form.

Do it now. Create good and bad forms. Create forms with each individual field validation problem.

Don't create all possible permutations of bad data. Just one test case for each individual validation rule.

Do that now. Before reading any further. Add django.test.TestCase classes to tests.py for each Form.

I'll wait until you've finished that.


Now, you have to test each view function. They also go in the tests.py file. Each view function has at least two test cases, perhaps more, depending on the various decorators you're using.

If a view function requires a login, you have two cases: logged in and not logged in.

If a view function requires a permission, you have at least three cases: not logged in, logged in as the wrong user, logged in as the right user.

For now, you just need to be sure that the view function did something and returns the correct HTML template with any piece of correct data. Don't go crazy. You just want to be sure all view functions actually return an expected page. Nothing more.

Do that now. Before reading any further. Add django.test.TestCase classes to tests.py for each view function.

I'll wait until you've finished that.


Those are the tests you should write first before writing any application code.

This will give you a testing baseline that confirms that your application will minimall sort-of run.

One you have that finished, you can start to consider unit tests that reflect the real purpose and value behind your application.

like image 163
S.Lott Avatar answered Oct 03 '22 22:10

S.Lott