diff -r 35931243adaa django/test/simple.py
--- a/django/test/simple.py	Mon Jan 18 22:25:30 2010 -0300
+++ b/django/test/simple.py	Tue Jan 19 11:43:19 2010 -0300
@@ -208,11 +208,18 @@
         setup_test_environment()
         settings.DEBUG = False
 
-    def build_suite(self, test_labels, extra_tests=None):
+    def build_suite(self, test_labels, extra_tests=None, exclude_labels=None):
         suite = unittest.TestSuite()
 
+        if exclude_labels is None:
+            exclude_labels = []
+
         if test_labels:
             for label in test_labels:
+                if label in exclude_labels:
+                    if self.verbosity >= 1:
+                        print 'Skipping test %s' % label
+                    continue
                 if '.' in label:
                     suite.addTest(build_test(label))
                 else:
@@ -250,7 +257,7 @@
     def suite_result(self, result):
         return len(result.failures) + len(result.errors)
 
-    def run_tests(self, test_labels, extra_tests=None):
+    def run_tests(self, test_labels, extra_tests=None, exclude_labels=None):
         """
         Run the unit tests for all the test labels in the provided list.
         Labels must be of the form:
@@ -267,11 +274,14 @@
         A list of 'extra' tests may also be provided; these tests
         will be added to the test suite.
 
+        It's also possible to specify a list of labels to exclude from the
+        test suite by using the exclude_labels parameter.
+
         Returns the number of tests that failed.
         """
         self.setup_test_environment()
 
-        suite = self.build_suite(test_labels, extra_tests)
+        suite = self.build_suite(test_labels, extra_tests, exclude_labels)
 
         old_names = self.setup_databases()
 
diff -r 35931243adaa tests/runtests.py
--- a/tests/runtests.py	Mon Jan 18 22:25:30 2010 -0300
+++ b/tests/runtests.py	Tue Jan 19 11:43:19 2010 -0300
@@ -86,9 +86,12 @@
         self.assert_(not unexpected, "Unexpected Errors: " + '\n'.join(unexpected))
         self.assert_(not missing, "Missing Errors: " + '\n'.join(missing))
 
-def django_tests(verbosity, interactive, failfast, test_labels):
+def django_tests(verbosity, interactive, failfast, test_labels, exclude_labels=None):
     from django.conf import settings
 
+    if exclude_labels is None:
+        exclude_labels = []
+
     old_installed_apps = settings.INSTALLED_APPS
     old_root_urlconf = getattr(settings, "ROOT_URLCONF", "")
     old_template_dirs = settings.TEMPLATE_DIRS
@@ -123,13 +126,19 @@
     get_apps()
 
     # Load all the test model apps.
+    test_labels_set = set([label.split('.')[0] for label in test_labels if label not in exclude_labels])
     for model_dir, model_name in get_test_models():
         model_label = '.'.join([model_dir, model_name])
         try:
             # if the model was named on the command line, or
             # no models were named (i.e., run all), import
             # this model and add it to the list to test.
-            if not test_labels or model_name in set([label.split('.')[0] for label in test_labels]):
+            # Also, skip the tests explicitely excluded by the user
+            if not test_labels or model_name in test_labels_set:
+                if model_name in exclude_labels:
+                    if verbosity >= 1:
+                        print "Skipping app %s" % model_name
+                    continue
                 if verbosity >= 1:
                     print "Importing model %s" % model_name
                 mod = load_app(model_label)
@@ -153,7 +162,8 @@
             except ValueError:
                 pass
 
-    # Run the test suite, including the extra validation tests.
+    # Run the test suite, including the extra validation tests and skipping
+    # the test explicitely excluded.
     from django.test.utils import get_runner
     if not hasattr(settings, 'TEST_RUNNER'):
         settings.TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
@@ -198,10 +208,12 @@
         help='Tells Django to stop running the test suite after first failed test.')
     parser.add_option('--settings',
         help='Python path to settings module, e.g. "myproject.settings". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.')
+    parser.add_option('-e', '--exclude', action='append', dest='exclude', default=[],
+        help='Test to exclude (use multiple times to exclude multiple tests).')
     options, args = parser.parse_args()
     if options.settings:
         os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
     elif "DJANGO_SETTINGS_MODULE" not in os.environ:
         parser.error("DJANGO_SETTINGS_MODULE is not set in the environment. "
                       "Set it or use --settings.")
-    django_tests(int(options.verbosity), options.interactive, options.failfast, args)
+    django_tests(int(options.verbosity), options.interactive, options.failfast, args, options.exclude)
