diff --git a/common/test/acceptance/tests/discussion/test_cohort_management.py b/common/test/acceptance/tests/discussion/test_cohort_management.py index 48f452f0fa..ea9bd93176 100644 --- a/common/test/acceptance/tests/discussion/test_cohort_management.py +++ b/common/test/acceptance/tests/discussion/test_cohort_management.py @@ -20,7 +20,7 @@ from ...pages.studio.settings_group_configurations import GroupConfigurationsPag import uuid -@attr('shard_3') +@attr('shard_5') class CohortConfigurationTest(EventsTestMixin, UniqueCourseTest, CohortTestMixin): """ Tests for cohort management on the LMS Instructor Dashboard @@ -619,7 +619,7 @@ class CohortConfigurationTest(EventsTestMixin, UniqueCourseTest, CohortTestMixin self.assertEquals(expected_message, messages[0]) -@attr('shard_3') +@attr('shard_5') class CohortDiscussionTopicsTest(UniqueCourseTest, CohortTestMixin): """ Tests for cohorting the inline and course-wide discussion topics. @@ -910,7 +910,7 @@ class CohortDiscussionTopicsTest(UniqueCourseTest, CohortTestMixin): self.verify_discussion_topics_after_reload(self.inline_key, cohorted_topics_after) -@attr('shard_3') +@attr('shard_5') class CohortContentGroupAssociationTest(UniqueCourseTest, CohortTestMixin): """ Tests for linking between content groups and cohort in the instructor dashboard. diff --git a/common/test/acceptance/tests/discussion/test_cohorts.py b/common/test/acceptance/tests/discussion/test_cohorts.py index 9bc1a3f52f..b83f997fb2 100644 --- a/common/test/acceptance/tests/discussion/test_cohorts.py +++ b/common/test/acceptance/tests/discussion/test_cohorts.py @@ -76,7 +76,7 @@ class DiscussionTabSingleThreadTest(BaseDiscussionTestCase): self.thread_page.wait_for_page() -@attr('shard_1') +@attr('shard_5') class CohortedDiscussionTabSingleThreadTest(DiscussionTabSingleThreadTest, CohortedDiscussionTestMixin): """ Tests for the discussion page displaying a single cohorted thread. @@ -85,7 +85,7 @@ class CohortedDiscussionTabSingleThreadTest(DiscussionTabSingleThreadTest, Cohor pass -@attr('shard_1') +@attr('shard_5') class NonCohortedDiscussionTabSingleThreadTest(DiscussionTabSingleThreadTest, NonCohortedDiscussionTestMixin): """ Tests for the discussion page displaying a single non-cohorted thread. @@ -134,7 +134,7 @@ class InlineDiscussionTest(UniqueCourseTest): self.show_thread(thread_id) -@attr('shard_1') +@attr('shard_5') class CohortedInlineDiscussionTest(InlineDiscussionTest, CohortedDiscussionTestMixin): """ Tests for cohorted inline discussions. @@ -143,7 +143,7 @@ class CohortedInlineDiscussionTest(InlineDiscussionTest, CohortedDiscussionTestM pass -@attr('shard_1') +@attr('shard_5') class NonCohortedInlineDiscussionTest(InlineDiscussionTest, NonCohortedDiscussionTestMixin): """ Tests for non-cohorted inline discussions. diff --git a/common/test/acceptance/tests/lms/test_account_settings.py b/common/test/acceptance/tests/lms/test_account_settings.py index d76a746378..82845d697f 100644 --- a/common/test/acceptance/tests/lms/test_account_settings.py +++ b/common/test/acceptance/tests/lms/test_account_settings.py @@ -3,6 +3,7 @@ End-to-end tests for the Account Settings page. """ from unittest import skip +from nose.plugins.attrib import attr from bok_choy.web_app_test import WebAppTest @@ -13,6 +14,7 @@ from ...pages.lms.dashboard import DashboardPage from ..helpers import EventsTestMixin +@attr('shard_5') class AccountSettingsTestMixin(EventsTestMixin, WebAppTest): """ Mixin with helper methods to test the account settings page. @@ -57,6 +59,7 @@ class AccountSettingsTestMixin(EventsTestMixin, WebAppTest): ) +@attr('shard_5') class DashboardMenuTest(AccountSettingsTestMixin, WebAppTest): """ Tests that the dashboard menu works correctly with the account settings page. @@ -79,6 +82,7 @@ class DashboardMenuTest(AccountSettingsTestMixin, WebAppTest): dashboard_page.click_account_settings_link() +@attr('shard_5') class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest): """ Tests that verify behaviour of the Account Settings page. diff --git a/common/test/acceptance/tests/lms/test_learner_profile.py b/common/test/acceptance/tests/lms/test_learner_profile.py index 73ae7e3f42..7c0552372f 100644 --- a/common/test/acceptance/tests/lms/test_learner_profile.py +++ b/common/test/acceptance/tests/lms/test_learner_profile.py @@ -4,6 +4,7 @@ End-to-end tests for Student's Profile Page. """ from datetime import datetime from bok_choy.web_app_test import WebAppTest +from nose.plugins.attrib import attr from ...pages.common.logout import LogoutPage from ...pages.lms.account_settings import AccountSettingsPage @@ -146,6 +147,7 @@ class LearnerProfileTestMixin(EventsTestMixin): ) +@attr('shard_4') class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest): """ Tests that verify a student's own profile page. @@ -627,6 +629,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest): self.assert_event_emitted_num_times(user_id, 'profile_image_uploaded_at', 2) +@attr('shard_4') class DifferentUserLearnerProfilePageTest(LearnerProfileTestMixin, WebAppTest): """ Tests that verify viewing the profile page of a different user. diff --git a/common/test/acceptance/tests/lms/test_lms.py b/common/test/acceptance/tests/lms/test_lms.py index 4c43ddc94c..93b74aecc6 100644 --- a/common/test/acceptance/tests/lms/test_lms.py +++ b/common/test/acceptance/tests/lms/test_lms.py @@ -37,7 +37,7 @@ from ...pages.lms.course_wiki import CourseWikiPage, CourseWikiEditPage from ...fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc -@attr('shard_1') +@attr('shard_4') class ForgotPasswordPageTest(UniqueCourseTest): """ Test that forgot password forms is rendered if url contains 'forgot-password-modal' @@ -57,7 +57,7 @@ class ForgotPasswordPageTest(UniqueCourseTest): self.assertTrue(self.reset_password_page.is_form_visible()) -@attr('shard_1') +@attr('shard_4') class LoginFromCombinedPageTest(UniqueCourseTest): """Test that we can log in using the combined login/registration page. @@ -153,7 +153,7 @@ class LoginFromCombinedPageTest(UniqueCourseTest): return (email, password) -@attr('shard_1') +@attr('shard_4') class RegisterFromCombinedPageTest(UniqueCourseTest): """Test that we can register a new user from the combined login/registration page. """ @@ -227,7 +227,7 @@ class RegisterFromCombinedPageTest(UniqueCourseTest): self.assertEqual(self.register_page.current_form, "login") -@attr('shard_1') +@attr('shard_4') class PayAndVerifyTest(EventsTestMixin, UniqueCourseTest): """Test that we can proceed through the payment and verification flow.""" def setUp(self): @@ -391,6 +391,7 @@ class PayAndVerifyTest(EventsTestMixin, UniqueCourseTest): self.assertEqual(enrollment_mode, 'verified') +@attr('shard_5') class CourseWikiTest(UniqueCourseTest): """ Tests that verify the course wiki. @@ -444,6 +445,7 @@ class CourseWikiTest(UniqueCourseTest): self.assertEqual(content, actual_content) +@attr('shard_5') class HighLevelTabTest(UniqueCourseTest): """ Tests that verify each of the high-level tabs available within a course. @@ -629,6 +631,7 @@ class PDFTextBooksTabTest(UniqueCourseTest): self.tab_nav.go_to_tab("PDF Book {}".format(i)) +@attr('shard_5') class VideoTest(UniqueCourseTest): """ Navigate to a video in the courseware and play it. @@ -699,6 +702,7 @@ class VideoTest(UniqueCourseTest): self.assertGreaterEqual(self.video.duration, self.video.elapsed_time) +@attr('shard_5') class VisibleToStaffOnlyTest(UniqueCourseTest): """ Tests that content with visible_to_staff_only set to True cannot be viewed by students. @@ -783,6 +787,7 @@ class VisibleToStaffOnlyTest(UniqueCourseTest): self.assertEqual(["Html Child in visible unit"], self.course_nav.sequence_items) +@attr('shard_5') class TooltipTest(UniqueCourseTest): """ Tests that tooltips are displayed @@ -827,6 +832,7 @@ class TooltipTest(UniqueCourseTest): self.assertTrue(self.courseware_page.tooltips_displayed()) +@attr('shard_5') class PreRequisiteCourseTest(UniqueCourseTest): """ Tests that pre-requisite course messages are displayed @@ -911,6 +917,7 @@ class PreRequisiteCourseTest(UniqueCourseTest): self.settings_page.save_changes() +@attr('shard_5') class ProblemExecutionTest(UniqueCourseTest): """ Tests of problems. @@ -989,6 +996,7 @@ class ProblemExecutionTest(UniqueCourseTest): self.assertFalse(problem_page.is_correct()) +@attr('shard_5') class EntranceExamTest(UniqueCourseTest): """ Tests that course has an entrance exam. diff --git a/common/test/acceptance/tests/lms/test_lms_courseware_search.py b/common/test/acceptance/tests/lms/test_lms_courseware_search.py index 9a31f44b62..c077155114 100644 --- a/common/test/acceptance/tests/lms/test_lms_courseware_search.py +++ b/common/test/acceptance/tests/lms/test_lms_courseware_search.py @@ -4,6 +4,8 @@ Test courseware search import os import json +from nose.plugins.attrib import attr + from ..helpers import UniqueCourseTest from ...pages.common.logout import LogoutPage from ...pages.studio.utils import add_html_component, click_css, type_in_codemirror @@ -14,6 +16,7 @@ from ...pages.lms.courseware_search import CoursewareSearchPage from ...fixtures.course import CourseFixture, XBlockFixtureDesc +@attr('shard_5') class CoursewareSearchTest(UniqueCourseTest): """ Test courseware search. diff --git a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py index b9f23863ec..fc78048288 100644 --- a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py +++ b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py @@ -3,6 +3,8 @@ End-to-end tests for the LMS Instructor Dashboard. """ +from nose.plugins.attrib import attr + from ..helpers import UniqueCourseTest, get_modal_alert from ...pages.common.logout import LogoutPage from ...pages.lms.auto_auth import AutoAuthPage @@ -10,6 +12,7 @@ from ...pages.lms.instructor_dashboard import InstructorDashboardPage from ...fixtures.course import CourseFixture +@attr('shard_5') class AutoEnrollmentWithCSVTest(UniqueCourseTest): """ End-to-end tests for Auto-Registration and enrollment functionality via CSV file. @@ -87,6 +90,7 @@ class AutoEnrollmentWithCSVTest(UniqueCourseTest): self.assertEqual(self.auto_enroll_section.first_notification_message(section_type=self.auto_enroll_section.NOTIFICATION_ERROR), "Make sure that the file you upload is in CSV format with no extraneous characters or rows.") +@attr('shard_5') class EntranceExamGradeTest(UniqueCourseTest): """ Tests for Entrance exam specific student grading tasks. diff --git a/common/test/acceptance/tests/lms/test_lms_user_preview.py b/common/test/acceptance/tests/lms/test_lms_user_preview.py index b8f92d5364..ff23534ee3 100644 --- a/common/test/acceptance/tests/lms/test_lms_user_preview.py +++ b/common/test/acceptance/tests/lms/test_lms_user_preview.py @@ -3,7 +3,6 @@ Tests the "preview" selector in the LMS that allows changing between Staff, Student, and Content Groups. """ -from nose.plugins.attrib import attr from ..helpers import UniqueCourseTest, create_user_partition_json from ...pages.studio.auto_auth import AutoAuthPage from ...pages.lms.courseware import CoursewarePage @@ -14,7 +13,6 @@ from xmodule.partitions.partitions import Group from textwrap import dedent -@attr('shard_3') class StaffViewTest(UniqueCourseTest): """ Tests that verify the staff view. @@ -52,7 +50,6 @@ class StaffViewTest(UniqueCourseTest): return staff_page -@attr('shard_3') class CourseWithoutContentGroupsTest(StaffViewTest): """ Setup for tests that have no content restricted to specific content groups. @@ -83,7 +80,6 @@ class CourseWithoutContentGroupsTest(StaffViewTest): ) -@attr('shard_3') class StaffViewToggleTest(CourseWithoutContentGroupsTest): """ Tests for the staff view toggle button. @@ -100,7 +96,6 @@ class StaffViewToggleTest(CourseWithoutContentGroupsTest): self.assertFalse(course_page.has_tab('Instructor')) -@attr('shard_3') class StaffDebugTest(CourseWithoutContentGroupsTest): """ Tests that verify the staff debug info. @@ -232,7 +227,6 @@ class StaffDebugTest(CourseWithoutContentGroupsTest): 'for user {}'.format(self.USERNAME), msg) -@attr('shard_3') class CourseWithContentGroupsTest(StaffViewTest): """ Verifies that changing the "View this course as" selector works properly for content groups. diff --git a/common/test/acceptance/tests/studio/test_studio_library.py b/common/test/acceptance/tests/studio/test_studio_library.py index 87b8f6e2e2..a86d0c95f3 100644 --- a/common/test/acceptance/tests/studio/test_studio_library.py +++ b/common/test/acceptance/tests/studio/test_studio_library.py @@ -3,6 +3,7 @@ Acceptance tests for Content Libraries in Studio """ from ddt import ddt, data from flaky import flaky +from nose.plugins.attrib import attr from .base_studio_test import StudioLibraryTest from ...fixtures.course import XBlockFixtureDesc @@ -12,6 +13,7 @@ from ...pages.studio.library import LibraryEditPage from ...pages.studio.users import LibraryUsersPage +@attr('shard_4') @ddt class LibraryEditPageTest(StudioLibraryTest): """ @@ -183,6 +185,7 @@ class LibraryEditPageTest(StudioLibraryTest): self.assertIn("Checkboxes", problem_block.name) +@attr('shard_4') @ddt class LibraryNavigationTest(StudioLibraryTest): """ diff --git a/common/test/acceptance/tests/studio/test_studio_library_container.py b/common/test/acceptance/tests/studio/test_studio_library_container.py index 927ff829ea..4c68e01417 100644 --- a/common/test/acceptance/tests/studio/test_studio_library_container.py +++ b/common/test/acceptance/tests/studio/test_studio_library_container.py @@ -3,6 +3,7 @@ Acceptance tests for Library Content in LMS """ import ddt from flaky import flaky +from nose.plugins.attrib import attr import textwrap from .base_studio_test import StudioLibraryTest @@ -17,6 +18,7 @@ SUBSECTION_NAME = 'Test Subsection' UNIT_NAME = 'Test Unit' +@attr('shard_5') @ddt.ddt class StudioLibraryContainerTest(StudioLibraryTest, UniqueCourseTest, TestWithSearchIndexMixin): """ diff --git a/common/test/acceptance/tests/studio/test_studio_settings.py b/common/test/acceptance/tests/studio/test_studio_settings.py index 285da25338..4010474b12 100644 --- a/common/test/acceptance/tests/studio/test_studio_settings.py +++ b/common/test/acceptance/tests/studio/test_studio_settings.py @@ -2,8 +2,6 @@ Acceptance tests for Studio's Setting pages """ -from nose.plugins.attrib import attr - from base_studio_test import StudioCourseTest from bok_choy.promise import EmptyPromise from ...fixtures.course import XBlockFixtureDesc @@ -16,7 +14,6 @@ from textwrap import dedent from xmodule.partitions.partitions import Group -@attr('shard_1') class ContentGroupConfigurationTest(StudioCourseTest): """ Tests for content groups in the Group Configurations Page. @@ -228,7 +225,6 @@ class ContentGroupConfigurationTest(StudioCourseTest): ).fulfill() -@attr('shard_1') class AdvancedSettingsValidationTest(StudioCourseTest): """ Tests for validation feature in Studio's advanced settings tab diff --git a/common/test/acceptance/tests/test_cohorted_courseware.py b/common/test/acceptance/tests/test_cohorted_courseware.py index 11097684d5..a893252f89 100644 --- a/common/test/acceptance/tests/test_cohorted_courseware.py +++ b/common/test/acceptance/tests/test_cohorted_courseware.py @@ -20,7 +20,7 @@ from ..tests.lms.test_lms_user_preview import verify_expected_problem_visibility from bok_choy.promise import EmptyPromise -@attr('shard_1') +@attr('shard_5') class EndToEndCohortedCoursewareTest(ContainerBase): def setUp(self, is_staff=True): diff --git a/common/test/acceptance/tests/video/test_studio_video_module.py b/common/test/acceptance/tests/video/test_studio_video_module.py index 48266f1cce..0ac762ae58 100644 --- a/common/test/acceptance/tests/video/test_studio_video_module.py +++ b/common/test/acceptance/tests/video/test_studio_video_module.py @@ -126,7 +126,7 @@ class CMSVideoBaseTest(UniqueCourseTest): self.unit_page.xblocks[1].save_settings() -@attr('shard_2') +@attr('shard_4') class CMSVideoTest(CMSVideoBaseTest): """ CMS Video Test Class diff --git a/common/test/acceptance/tests/video/test_video_handout.py b/common/test/acceptance/tests/video/test_video_handout.py index f1b9f1c030..0b1873adaa 100644 --- a/common/test/acceptance/tests/video/test_video_handout.py +++ b/common/test/acceptance/tests/video/test_video_handout.py @@ -3,9 +3,11 @@ """ Acceptance tests for CMS Video Handout. """ +from nose.plugins.attrib import attr from .test_studio_video_module import CMSVideoBaseTest +@attr('shard_5') class VideoHandoutTest(CMSVideoBaseTest): """ CMS Video Handout Test Class diff --git a/common/test/acceptance/tests/video/test_video_module.py b/common/test/acceptance/tests/video/test_video_module.py index 29d460509d..95902def8f 100644 --- a/common/test/acceptance/tests/video/test_video_module.py +++ b/common/test/acceptance/tests/video/test_video_module.py @@ -30,7 +30,7 @@ HTML5_SOURCES_INCORRECT = [ ] -@attr('shard_2') +@attr('shard_4') @skipIf(is_youtube_available() is False, 'YouTube is not available!') class VideoBaseTest(UniqueCourseTest): """ diff --git a/scripts/all-tests.sh b/scripts/all-tests.sh index d41ed9a8b6..f73a4bd3da 100755 --- a/scripts/all-tests.sh +++ b/scripts/all-tests.sh @@ -179,7 +179,15 @@ END ;; "4") - paver test_bokchoy --extra_args="-a shard_1=False,shard_2=False,shard_3=False --with-flaky" || { EXIT=1; } + paver test_bokchoy --extra_args="-a 'shard_4' --with-flaky" || { EXIT=1; } + ;; + + "5") + paver test_bokchoy --extra_args="-a 'shard_5' --with-flaky" || { EXIT=1; } + ;; + + "6") + paver test_bokchoy --extra_args="-a shard_1=False,shard_2=False,shard_3=False,shard_4=False,shard_5=False --with-flaky" || { EXIT=1; } ;; # Default case because if we later define another bok-choy shard on Jenkins