diff --git a/.gitignore b/.gitignore
index a34f512..f0090b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
 *.pot
 *.py[co]
 docs/_build/
+tests/coverage_html/
+tests/.coverage
\ No newline at end of file
diff --git a/.hgignore b/.hgignore
index 765a29d..3dc253a 100644
--- a/.hgignore
+++ b/.hgignore
@@ -4,3 +4,5 @@ syntax:glob
 *.pot
 *.py[co]
 docs/_build/
+tests/coverage_html/
+tests/.coverage
\ No newline at end of file
diff --git a/docs/internals/contributing/writing-code/unit-tests.txt b/docs/internals/contributing/writing-code/unit-tests.txt
index cffcbd9..7c58b3e 100644
--- a/docs/internals/contributing/writing-code/unit-tests.txt
+++ b/docs/internals/contributing/writing-code/unit-tests.txt
@@ -166,3 +166,8 @@ To run tests for just one contrib app (e.g. ``markup``), use the same
 method as above::
 
     ./runtests.py --settings=settings markup
+
+Code coverage
+~~~~~~~~~~~~~
+
+[A short guide may go here...]
\ No newline at end of file
diff --git a/tests/.coveragerc b/tests/.coveragerc
new file mode 100644
index 0000000..e03dbd1
--- /dev/null
+++ b/tests/.coveragerc
@@ -0,0 +1,5 @@
+[run]
+omit = runtests,test_sqlite,regressiontests*,modeltests*,*/django/contrib/*/tests*,*/django/utils/unittest*,*/django/utils/simplejson*,*/django/utils/importlib.py,*/django/test/_doctest.py,*/django/core/servers/fastcgi.py,*/django/utils/autoreload.py,*/django/utils/dictconfig.py
+
+[html]
+directory = coverage_html
\ No newline at end of file
