diff --git a/core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php b/core/modules/dblog/tests/src/Functional/Rest/DbLogResourceTest.php
similarity index 73%
rename from core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php
rename to core/modules/dblog/tests/src/Functional/Rest/DbLogResourceTest.php
index 44dbe99dd1..5685f78a4d 100644
--- a/core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php
+++ b/core/modules/dblog/tests/src/Functional/Rest/DbLogResourceTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\dblog\Tests\Rest;
+namespace Drupal\Tests\system\Functional\System;
 
+use Drupal\Tests\BrowserTestBase;
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Url;
-use Drupal\rest\Tests\RESTTestBase;
 
 /**
  * Tests the watchdog database log resource.
  *
  * @group dblog
  */
-class DbLogResourceTest extends RESTTestBase {
+class DbLogResourceTest extends BrowserTestBase {
 
   /**
    * Modules to enable.
@@ -22,8 +22,6 @@ class DbLogResourceTest extends RESTTestBase {
 
   protected function setUp() {
     parent::setUp();
-    // Enable REST API for the watchdog resource.
-    $this->enableService('dblog');
   }
 
   /**
@@ -41,7 +39,7 @@ public function testWatchdog() {
     $account = $this->drupalCreateUser(['restful get dblog']);
     $this->drupalLogin($account);
 
-    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => $id, '_format' => $this->defaultFormat]), 'GET');
+    $response = $this->drupalGet(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => $id, '_format' => $this->defaultFormat]));
     $this->assertResponse(200);
     $this->assertHeader('content-type', $this->defaultMimeType);
     $log = Json::decode($response);
@@ -50,13 +48,13 @@ public function testWatchdog() {
     $this->assertEqual($log['message'], 'Test message', 'Log message text is correct.');
 
     // Request an unknown log entry.
-    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 9999, '_format' => $this->defaultFormat]), 'GET');
+    $response = $this->drupalGet(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 9999, '_format' => $this->defaultFormat]));
     $this->assertResponse(404);
     $decoded = Json::decode($response);
     $this->assertEqual($decoded['message'], 'Log entry with ID 9999 was not found', 'Response message is correct.');
 
     // Make a bad request (a true malformed request would never be a route match).
-    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 0, '_format' => $this->defaultFormat]), 'GET');
+    $response = $this->drupalGet(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 0, '_format' => $this->defaultFormat]));
     $this->assertResponse(400);
     $decoded = Json::decode($response);
     $this->assertEqual($decoded['message'], 'No log entry ID was provided', 'Response message is correct.');
diff --git a/core/modules/system/src/Tests/System/ResponseGeneratorTest.php b/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
similarity index 82%
rename from core/modules/system/src/Tests/System/ResponseGeneratorTest.php
rename to core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
index a535b66c42..d11d8e79c6 100644
--- a/core/modules/system/src/Tests/System/ResponseGeneratorTest.php
+++ b/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
@@ -1,15 +1,16 @@
 <?php
 
-namespace Drupal\system\Tests\System;
+namespace Drupal\Tests\system\Functional\System;
 
-use Drupal\rest\Tests\RESTTestBase;
+use Drupal\rest\Entity\RestResourceConfig;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests to see if generator header is added.
  *
  * @group system
  */
-class ResponseGeneratorTest extends RESTTestBase {
+class ResponseGeneratorTest extends BrowserTestBase {
 
   /**
    * Modules to install.
@@ -25,7 +26,7 @@ protected function setUp() {
     parent::setUp();
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $permissions = $this->entityPermissions('node', 'view');
+    $permissions = ['access content'];
     $account = $this->drupalCreateUser($permissions);
     $this->drupalLogin($account);
   }
@@ -54,14 +55,14 @@ public function testGeneratorHeaderAdded() {
 
     // Enable cookie-based authentication for the entity:node REST resource.
     /** @var \Drupal\rest\RestResourceConfigInterface $resource_config */
-    $resource_config = $this->resourceConfigStorage->load('entity.node');
+    $resource_config = RestResourceConfig::load('entity.node');
     $configuration = $resource_config->get('configuration');
     $configuration['authentication'][] = 'cookie';
     $resource_config->set('configuration', $configuration)->save();
-    $this->rebuildCache();
+    \Drupal::service('router.builder')->rebuildIfNeeded();
 
     // Tests to see if this also works for a non-html request
-    $this->httpRequest($node->urlInfo()->setOption('query', ['_format' => 'hal_json']), 'GET');
+    $this->drupalGet($node->urlInfo()->setOption('query', ['_format' => 'hal_json']));
     $this->assertResponse(200);
     $this->assertEqual('application/hal+json', $this->drupalGetHeader('Content-Type'));
     $this->assertEqual($expectedGeneratorHeader, $this->drupalGetHeader('X-Generator'));
diff --git a/core/modules/user/src/Tests/RestRegisterUserTest.php b/core/modules/user/tests/src/Functional/RestRegisterUserTest.php
similarity index 70%
rename from core/modules/user/src/Tests/RestRegisterUserTest.php
rename to core/modules/user/tests/src/Functional/RestRegisterUserTest.php
index 62e6bbc687..b6844b35ad 100644
--- a/core/modules/user/src/Tests/RestRegisterUserTest.php
+++ b/core/modules/user/tests/src/Functional/RestRegisterUserTest.php
@@ -1,17 +1,25 @@
 <?php
 
-namespace Drupal\user\Tests;
+namespace Drupal\Tests\user\Functional;
 
-use Drupal\rest\Tests\RESTTestBase;
+use Drupal\Core\Test\AssertMailTrait;
+use Drupal\rest\Entity\RestResourceConfig;
+use Drupal\rest\RestResourceConfigInterface;
+use Drupal\Tests\BrowserTestBase;
 use Drupal\user\Entity\Role;
 use Drupal\user\RoleInterface;
+use GuzzleHttp\RequestOptions;
 
 /**
  * Tests user registration via REST resource.
  *
  * @group user
  */
-class RestRegisterUserTest extends RESTTestBase {
+class RestRegisterUserTest extends BrowserTestBase {
+
+  use AssertMailTrait {
+    getMails as drupalGetMails;
+  }
 
   /**
    * {@inheritdoc}
@@ -24,7 +32,21 @@ class RestRegisterUserTest extends RESTTestBase {
   public function setUp() {
     parent::setUp();
 
-    $this->enableService('user_registration', 'POST', 'hal_json');
+    RestResourceConfig::create([
+      'id' => 'user_registration',
+      'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
+      'configuration' => [
+        'POST' => [
+          'supported_formats' => [
+            'json',
+          ],
+          'supported_auth' => [
+            'cookie',
+          ]
+        ],
+      ],
+    ])->save();
+    \Drupal::service('router.builder')->rebuildIfNeeded();
 
     Role::load(RoleInterface::ANONYMOUS_ID)
       ->grantPermission('restful post user_registration')
@@ -45,8 +67,8 @@ public function testRegisterUser() {
     // can POST a new user to the "user" REST resource.
     $user = $this->createUser();
     $this->drupalLogin($user);
-    $this->registerRequest('palmer.eldritch');
-    $this->assertResponse('403', 'Only anonymous users can register users.');
+    $response = $this->registerRequest('palmer.eldritch');
+    $this->assertSame(403, $response->getStatusCode(), 'Only anonymous users can register users.');
     $this->drupalLogout();
 
     $user_settings = $this->config('user.settings');
@@ -63,8 +85,8 @@ public function testRegisterUser() {
     $this->assertEqual(0, $email_count);
 
     // Attempt to register without sending a password.
-    $this->registerRequest('Rick.Deckard', FALSE);
-    $this->assertResponse('422', 'No password provided');
+    $response = $this->registerRequest('Rick.Deckard', FALSE);
+    $this->assertSame(422, $response->getStatusCode(), 'No password provided');
 
     // Allow visitors to register with email verification.
     $user_settings->set('register', USER_REGISTER_VISITORS);
@@ -76,8 +98,8 @@ public function testRegisterUser() {
     $this->assertMailString('body', 'You may now log in by clicking this link', 1);
 
     // Attempt to register with a password when e-mail verification is on.
-    $this->registerRequest('Estraven', TRUE);
-    $this->assertResponse('422', 'A Password cannot be specified. It will be generated on login.');
+    $response = $this->registerRequest('Estraven', TRUE);
+    $this->assertSame(422, $response->getStatusCode(), 'A Password cannot be specified. It will be generated on login.');
 
     // Allow visitors to register with Admin approval and e-mail verification.
     $user_settings->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
@@ -90,8 +112,8 @@ public function testRegisterUser() {
     $this->assertMailString('body', 'Bob.Arctor has applied for an account', 2);
 
     // Attempt to register with a password when e-mail verification is on.
-    $this->registerRequest('Ursula', TRUE);
-    $this->assertResponse('422', 'A Password cannot be specified. It will be generated on login.');
+    $response = $this->registerRequest('Ursula', TRUE);
+    $this->assertSame(422, $response->getStatusCode(), 'A Password cannot be specified. It will be generated on login.');
 
     // Allow visitors to register with Admin approval and no email verification.
     $user_settings->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
@@ -104,8 +126,8 @@ public function testRegisterUser() {
     $this->assertMailString('body', 'Argaven has applied for an account', 2);
 
     // Attempt to register without sending a password.
-    $this->registerRequest('Tibe', FALSE);
-    $this->assertResponse('422', 'No password provided');
+    $response = $this->registerRequest('Tibe', FALSE);
+    $this->assertSame(422, $response->getStatusCode(), 'No password provided');
   }
 
   /**
@@ -151,8 +173,8 @@ protected function createSerializedUser($name, $include_password = TRUE) {
    */
   protected function registerUser($name, $include_password = TRUE) {
     // Verify that an anonymous user can register.
-    $this->registerRequest($name, $include_password);
-    $this->assertResponse('200', 'HTTP response code is correct.');
+    $response = $this->registerRequest($name, $include_password);
+    $this->assertSame(200, $response->getStatusCode());
     $user = user_load_by_name($name);
     $this->assertFalse(empty($user), 'User was create as expected');
     return $user;
@@ -166,7 +188,15 @@ protected function registerUser($name, $include_password = TRUE) {
    */
   protected function registerRequest($name, $include_password = TRUE) {
     $serialized = $this->createSerializedUser($name, $include_password);
-    $this->httpRequest('/user/register', 'POST', $serialized, 'application/hal+json');
+
+    $request_options = [
+      RequestOptions::HEADERS => ['Content-Type' => 'application/json'],
+      RequestOptions::BODY => $serialized,
+    ];
+    /** @var \GuzzleHttp\ClientInterface $client */
+    $client = $this->getSession()->getDriver()->getClient()->getClient();
+    $response = $client->request('POST', $this->buildUrl('serialization_test', ['query' => ['_format' => 'json']]), $request_options);
+    return $response;
   }
 
 }
