From 2f63d8bd70241e0db725e60734762a785a84da56 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Thu, 9 Nov 2017 14:49:21 -0500 Subject: [PATCH] Capture a bunch of labelled screenshots of Galaxy durings tests. During pull requests reviews this allows easy visual inspection of various components to augment the automated testing. --- .ci/jenkins/selenium/run_tests.sh | 16 ++++++++++-- test/selenium_tests/framework.py | 26 +++++++++++++++++++ .../test_collection_builders.py | 6 ++--- .../test_history_dataset_state.py | 2 ++ test/selenium_tests/test_history_sharing.py | 4 ++- test/selenium_tests/test_library_contents.py | 2 ++ test/selenium_tests/test_library_landing.py | 5 ++++ .../test_published_histories_grid.py | 3 ++- test/selenium_tests/test_saved_histories.py | 1 + test/selenium_tests/test_tool_form.py | 1 + test/selenium_tests/test_workflow_editor.py | 5 ++++ .../test_workflow_management.py | 5 +++- test/selenium_tests/test_workflow_run.py | 2 ++ 13 files changed, 70 insertions(+), 8 deletions(-) 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