diff --git a/.ci/jenkins/selenium/run_tests.sh b/.ci/jenkins/selenium/run_tests.sh index 24df53232cf..789a0e3a02d 100644 --- a/.ci/jenkins/selenium/run_tests.sh +++ b/.ci/jenkins/selenium/run_tests.sh @@ -2,10 +2,22 @@ # Enable retries on tests to reduce chances of transient failures. : ${GALAXY_TEST_SELENIUM_RETRIES:=1} -: ${GALAXY_TEST_ERRORS_DIRECTORY:=database/test-errors} + +# If in Jenkins environment, use it for artifacts. +if [ -n "$BUILD_NUMBER" ]; +then + : ${GALAXY_TEST_ERRORS_DIRECTORY:=${BUILD_NUMBER}-test-errors} + : ${GALAXY_TEST_SCREENSHOTS_DIRECTORY:=${BUILD_NUMBER}-test-screenshots} +else + : ${GALAXY_TEST_ERRORS_DIRECTORY:=database/test-errors} + : ${GALAXY_TEST_SCREENSHOTS_DIRECTORY:=database/test-screenshots} +fi + +mkdir -p "$GALAXY_TEST_ERRORS_DIRECTORY" +mkdir -p "$GALAXY_TEST_SCREENSHOTS_DIRECTORY" # Start Selenium server in the test Docker container. -DOCKER_RUN_EXTRA_ARGS="-e USE_SELENIUM=1 -e GALAXY_TEST_SELENIUM_RETRIES=${GALAXY_TEST_SELENIUM_RETRIES} -e GALAXY_TEST_ERRORS_DIRECTORY=${GALAXY_TEST_ERRORS_DIRECTORY} ${DOCKER_RUN_EXTRA_ARGS}" +DOCKER_RUN_EXTRA_ARGS="-e USE_SELENIUM=1 -e GALAXY_TEST_SELENIUM_RETRIES=${GALAXY_TEST_SELENIUM_RETRIES} -e GALAXY_TEST_ERRORS_DIRECTORY=${GALAXY_TEST_ERRORS_DIRECTORY} -e GALAXY_TEST_SCREENSHOTS_DIRECTORY=${GALAXY_TEST_SCREENSHOTS_DIRECTORY} ${DOCKER_RUN_EXTRA_ARGS}" export DOCKER_RUN_EXTRA_ARGS ./run_tests.sh --dockerize --db postgres --external_tmp --clean_pyc --selenium "$@" diff --git a/test/selenium_tests/framework.py b/test/selenium_tests/framework.py index b2d91676f19..a2574bbe7f1 100644 --- a/test/selenium_tests/framework.py +++ b/test/selenium_tests/framework.py @@ -42,6 +42,7 @@ DEFAULT_ADMIN_PASSWORD = "testpass" TIMEOUT_MULTIPLIER = float(os.environ.get("GALAXY_TEST_TIMEOUT_MULTIPLIER", DEFAULT_TIMEOUT_MULTIPLIER)) GALAXY_TEST_ERRORS_DIRECTORY = os.environ.get("GALAXY_TEST_ERRORS_DIRECTORY", DEFAULT_TEST_ERRORS_DIRECTORY) +GALAXY_TEST_SCREENSHOTS_DIRECTORY = os.environ.get("GALAXY_TEST_SCREENSHOTS_DIRECTORY", None) # Test browser can be ["CHROME", "FIREFOX", "OPERA", "PHANTOMJS"] GALAXY_TEST_SELENIUM_BROWSER = os.environ.get("GALAXY_TEST_SELENIUM_BROWSER", DEFAULT_SELENIUM_BROWSER) GALAXY_TEST_SELENIUM_REMOTE = os.environ.get("GALAXY_TEST_SELENIUM_REMOTE", DEFAULT_SELENIUM_REMOTE) @@ -225,8 +226,33 @@ class SeleniumTestCase(FunctionalTestCase, NavigatesGalaxy, UsesApiTestCaseMixin raise exception def snapshot(self, description): + """Create a debug snapshot (DOM, screenshot, etc...) that is written out on tool failure. + + This information will be automatically written to a per-test directory created for all + failed tests. + """ self.snapshots.append(TestSnapshot(self.driver, len(self.snapshots), description)) + def screenshot(self, label): + """If GALAXY_TEST_SCREENSHOTS_DIRECTORY is set create a screenshot there named