diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
index e1edd3c..fcdee8d 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
@@ -20,8 +20,8 @@ class MigrateCommentEntityDisplayTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
       'd7_comment_field',
       'd7_comment_field_instance',
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
index f8c4a07..e09bf0e 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
@@ -20,8 +20,8 @@ class MigrateCommentEntityFormDisplaySubjectTest extends MigrateDrupal7TestBase
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
       'd7_comment_entity_form_display_subject',
     ]);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
index 1332a67..c62b1cc 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
@@ -20,8 +20,8 @@ class MigrateCommentEntityFormDisplayTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
       'd7_comment_field',
       'd7_comment_field_instance',
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
index c7d8959..e6ce97b 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
@@ -23,8 +23,8 @@ class MigrateCommentFieldInstanceTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
       'd7_comment_field',
       'd7_comment_field_instance',
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
index e6f8e28..2af4dd5 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
@@ -22,8 +22,8 @@ class MigrateCommentFieldTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
       'd7_comment_field',
     ]);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php
index 4d4df03..a9e8bef 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTest.php
@@ -14,36 +14,14 @@
  */
 class MigrateCommentTest extends MigrateDrupal7TestBase {
 
-  public static $modules = ['filter', 'node', 'comment', 'text'];
-
   /**
    * {@inheritdoc}
    */
   protected function setUp() {
     parent::setUp();
 
-    $this->installConfig(static::$modules);
-    $this->installEntitySchema('node');
-    $this->installEntitySchema('comment');
-
-    $this->executeMigrations([
-      'd7_filter_format',
-      'd7_user_role',
-      'd7_user',
-    ]);
-    $this->executeMigration('d7_node_type');
-    // We only need the test_content_type node migration to run for real, so
-    // mock all the others.
-    $this->prepareMigrations(array(
-      'd7_node' => array(
-        array(array(0), array(0)),
-      ),
-    ));
-    $this->executeMigrations([
-      'd7_node',
-      'd7_comment_type',
-      'd7_comment',
-    ]);
+    $this->migrateContent();
+    $this->executeMigrations(['d7_comment_type', 'd7_comment']);
   }
 
   /**
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
index 3f8fe4c..4977822 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
@@ -21,8 +21,8 @@ class MigrateCommentTypeTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
+    $this->migrateContentTypes();
     $this->executeMigrations([
-      'd7_node_type',
       'd7_comment_type',
     ]);
   }
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
index 14f37cb..48d4716 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
@@ -148,12 +148,7 @@ protected function setUp() {
       ->condition('field_name', 'body')
       ->execute();
 
-    $this->executeMigrations([
-      'd7_field',
-      'd7_field_instance',
-      'd7_view_modes',
-      'd7_field_formatter_settings',
-    ]);
+    $this->migrateFields();
   }
 
   /**
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
index 7f2e024..35b3168 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
@@ -42,14 +42,7 @@ protected function setUp() {
     $this->installEntitySchema('taxonomy_term');
     $this->installConfig(static::$modules);
 
-    $this->executeMigrations([
-      'd7_node_type',
-      'd7_comment_type',
-      'd7_taxonomy_vocabulary',
-      'd7_field',
-      'd7_field_instance',
-      'd7_field_instance_widget_settings',
-    ]);
+    $this->migrateFields();
   }
 
   /**
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7TestBase.php b/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7TestBase.php
index 3afa82d..f316013 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7TestBase.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7TestBase.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\migrate_drupal\Kernel\d7;
 
+use Drupal\migrate\Entity\Migration;
 use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
 
 /**
@@ -9,6 +10,8 @@
  */
 abstract class MigrateDrupal7TestBase extends MigrateDrupalTestBase {
 
+  public static $modules = [];
+
   /**
    * {@inheritdoc}
    */
@@ -24,4 +27,143 @@ protected function getFixtureFilePath() {
     return __DIR__ . '/../../../fixtures/drupal7.php';
   }
 
+  /**
+   * Executes all user migrations.
+   *
+   * @param bool $include_pictures
+   *   If TRUE, migrates user pictures.
+   */
+  protected function migrateUsers($include_pictures = TRUE) {
+    $this->installMigrations('Drupal 7');
+    $this->executeMigrations(['d7_filter_format', 'd7_user_role']);
+
+    if ($include_pictures) {
+      // The d7_file source plugin depends on source_base_path being set in
+      // the destination configuration. This is evil and horrifying, but
+      // necessary for the time being.
+      // @see https://www.drupal.org/node/2577871
+      /** @var \Drupal\migrate\Entity\MigrationInterface $d7_file */
+      $d7_file = Migration::load('d7_file');
+      $destination = $d7_file->get('destination');
+      $destination['source_base_path'] = $this->siteDirectory;
+      $d7_file->set('destination', $destination);
+      $d7_file->save();
+
+      $this->executeMigrations([
+        'd7_file',
+        'user_picture_field',
+        'user_picture_field_instance',
+        'user_picture_entity_display',
+        'user_picture_entity_form_display',
+      ]);
+    }
+    else {
+      // These are optional dependencies of d7_user, but we don't need them if
+      // we're not migrating user pictures.
+      Migration::load('user_picture_entity_display')->delete();
+      Migration::load('user_picture_entity_form_display')->delete();
+    }
+
+    $this->executeMigration('d7_user');
+  }
+
+  /**
+   * Migrates node types.
+   */
+  protected function migrateContentTypes() {
+    $this->installConfig(['node']);
+    $this->executeMigration('d7_node_type');
+  }
+
+  /**
+   * Executes all field migrations.
+   */
+  protected function migrateFields() {
+    $modules = [
+      'comment',
+      'datetime',
+      'entity_reference',
+      'filter',
+      'image',
+      'link',
+      'node',
+      'taxonomy',
+      'telephone',
+      'text',
+    ];
+    $this->enableModules($modules);
+    $this->installEntitySchema('comment');
+    $this->installEntitySchema('file');
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
+
+    $this->installMigrations('Drupal 7');
+    $this->migrateContentTypes();
+    $this->installConfig(['comment']);
+    $this->executeMigrations([
+      // Comments can also have fields.
+      'd7_comment_type',
+      'd7_field',
+      'd7_field_instance',
+      'd7_field_instance_widget_settings',
+      'd7_view_modes',
+      'd7_field_formatter_settings',
+    ]);
+  }
+
+  /**
+   * Executes all content migrations.
+   *
+   * @param bool $include_revisions
+   *   If TRUE, migrates node revisions.
+   */
+  protected function migrateContent($include_revisions = FALSE) {
+    $modules = [
+      'comment',
+      'datetime',
+      'entity_reference',
+      'filter',
+      'image',
+      'link',
+      'node',
+      'taxonomy',
+      'telephone',
+      'text',
+    ];
+    $this->enableModules($modules);
+    $this->installEntitySchema('comment');
+    $this->installEntitySchema('file');
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
+    $this->installMigrations('Drupal 7');
+    $this->migrateUsers(FALSE);
+    $this->migrateFields();
+    $this->executeMigrations(['d7_node_settings', 'd7_node:*']);
+
+    if ($include_revisions) {
+      $this->executeMigrations(['d7_node_revision:*']);
+    }
+  }
+
+  /**
+   * Executes all taxonomy migrations.
+   */
+  protected function migrateTaxonomy() {
+
+    $modules = [
+      'node',
+      'taxonomy',
+    ];
+    $this->enableModules($modules);
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
+    $this->installMigrations('Drupal 7');
+
+    $this->migrateContentTypes();
+    $this->executeMigrations([
+      'd7_taxonomy_vocabulary',
+      'd7_taxonomy_term',
+    ]);
+  }
+
 }
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
index 8b98ec3..acc5315 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
@@ -27,8 +27,7 @@ class MigrateNodeTypeTest extends MigrateDrupal7TestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->installConfig(array('node'));
-    $this->executeMigration('d7_node_type');
+    $this->migrateContentTypes();
   }
 
   /**
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
index 214e784..8403874 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
@@ -36,16 +36,14 @@ class MigrateTaxonomyTermTest extends MigrateDrupal7TestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->installEntitySchema('taxonomy_term');
+    $this->migrateTaxonomy();
     $this->installConfig(static::$modules);
 
     $this->executeMigrations([
       'd7_node_type',
       'd7_comment_type',
       'd7_field',
-      'd7_taxonomy_vocabulary',
       'd7_field_instance',
-      'd7_taxonomy_term'
     ]);
   }
 
diff --git a/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerNodeTest.php b/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerNodeTest.php
index 7045f45..277069c 100644
--- a/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerNodeTest.php
+++ b/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerNodeTest.php
@@ -32,10 +32,10 @@ protected function setUp() {
     $this->installSchema('node', ['node_access']);
     $this->installSchema('tracker', ['tracker_node', 'tracker_user']);
 
+    $this->migrateContentTypes();
     $this->executeMigrations([
       'd7_user_role',
       'd7_user',
-      'd7_node_type',
       'd7_node',
       'd7_tracker_node',
     ]);
diff --git a/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerUserTest.php b/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerUserTest.php
index 0acc4e5..70e4a75 100644
--- a/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerUserTest.php
+++ b/core/modules/tracker/tests/src/Kernel/Migrate/d7/MigrateTrackerUserTest.php
@@ -32,10 +32,10 @@ protected function setUp() {
     $this->installSchema('node', ['node_access']);
     $this->installSchema('tracker', ['tracker_node', 'tracker_user']);
 
+    $this->migrateContentTypes();
     $this->executeMigrations([
       'd7_user_role',
       'd7_user',
-      'd7_node_type',
       'd7_node',
       'd7_tracker_node',
     ]);
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
index d18d071..c5fc439 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
@@ -41,24 +41,7 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
 
-    // Prepare to migrate user pictures as well.
-    $this->installEntitySchema('file');
-    $this->createType('page');
-    $this->createType('article');
-    $this->createType('blog');
-    $this->createType('book');
-    $this->createType('forum');
-    $this->createType('test_content_type');
-    Vocabulary::create(['vid' => 'test_vocabulary'])->save();
-    $this->executeMigrations([
-      'language',
-      'user_picture_field',
-      'user_picture_field_instance',
-      'd7_user_role',
-      'd7_field',
-      'd7_field_instance',
-      'd7_user',
-    ]);
+    $this->migrateUsers();
   }
 
   /**
