From 1cd2f51eb43f9ed043982770b4efd5f28f53f302 Mon Sep 17 00:00:00 2001 From: Zbigniew Siciarz Date: Sat, 23 Feb 2013 17:10:48 +0100 Subject: [PATCH] Added test runner option to skip Selenium tests (#19854). --- django/contrib/admin/tests.py | 4 ++++ .../internals/contributing/writing-code/unit-tests.txt | 9 +++++++++ tests/regressiontests/views/tests/i18n.py | 5 +++++ tests/runtests.py | 10 +++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/tests.py b/django/contrib/admin/tests.py index c99488cd41..30d63e4486 100644 --- a/django/contrib/admin/tests.py +++ b/django/contrib/admin/tests.py @@ -1,3 +1,5 @@ +import os + from django.test import LiveServerTestCase from django.utils.module_loading import import_by_path from django.utils.unittest import SkipTest @@ -8,6 +10,8 @@ class AdminSeleniumWebDriverTestCase(LiveServerTestCase): @classmethod def setUpClass(cls): + if os.environ.get('DJANGO_SKIP_SELENIUM_TESTS', False): + raise SkipTest('Selenium tests skipped by explicit request') try: cls.selenium = import_by_path(cls.webdriver_class)() except Exception as e: diff --git a/docs/internals/contributing/writing-code/unit-tests.txt b/docs/internals/contributing/writing-code/unit-tests.txt index a03951d141..59f4c97c92 100644 --- a/docs/internals/contributing/writing-code/unit-tests.txt +++ b/docs/internals/contributing/writing-code/unit-tests.txt @@ -136,6 +136,15 @@ Then, run the tests normally, for example: ./runtests.py --settings=test_sqlite admin_inlines +If you have Selenium installed but for some reason don't want to run these tests +(for example to speed up the test suite), use the ``--skip-selenium`` option +of the test runner. + +.. code-block:: bash + + ./runtests.py --settings=test_sqlite --skip-selenium admin_inlines + + .. _running-unit-tests-dependencies: Running all the tests diff --git a/tests/regressiontests/views/tests/i18n.py b/tests/regressiontests/views/tests/i18n.py index 0a091ed1b7..206cf3d256 100644 --- a/tests/regressiontests/views/tests/i18n.py +++ b/tests/regressiontests/views/tests/i18n.py @@ -2,6 +2,7 @@ from __future__ import absolute_import import gettext +import os from os import path from django.conf import settings @@ -176,6 +177,10 @@ class JsI18NTestsMultiPackage(TestCase): javascript_quote('este texto de app3 debe ser traducido')) +skip_selenium = os.environ.get('DJANGO_SKIP_SELENIUM_TESTS', False) + + +@unittest.skipIf(skip_selenium, 'Selenium tests skipped by explicit request') @unittest.skipUnless(firefox, 'Selenium not installed') class JavascriptI18nTests(LiveServerTestCase): urls = 'regressiontests.views.urls' diff --git a/tests/runtests.py b/tests/runtests.py index c23737ed14..b9de137ea2 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -301,7 +301,12 @@ if __name__ == "__main__": '--liveserver', action='store', dest='liveserver', default=None, help='Overrides the default address where the live server (used with ' 'LiveServerTestCase) is expected to run from. The default value ' - 'is localhost:8081.'), + 'is localhost:8081.') + parser.add_option( + '--skip-selenium', action='store_true', dest='skip_selenium', + default=False, + help='Skip running Selenium tests even it Selenium itself is ' + 'installed. By default these tests are not skipped.') options, args = parser.parse_args() if options.settings: os.environ['DJANGO_SETTINGS_MODULE'] = options.settings @@ -314,6 +319,9 @@ if __name__ == "__main__": if options.liveserver is not None: os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = options.liveserver + if options.skip_selenium: + os.environ['DJANGO_SKIP_SELENIUM_TESTS'] = '1' + if options.bisect: bisect_tests(options.bisect, options, args) elif options.pair: