diff --git a/frontend/test/__runner__/run_cypress_tests.js b/frontend/test/__runner__/run_cypress_tests.js
index 217684ea2c35959f79735eac6771c3f63e61d026..9cb9f0149e20653f074376d3c8cd9275908cd266 100644
--- a/frontend/test/__runner__/run_cypress_tests.js
+++ b/frontend/test/__runner__/run_cypress_tests.js
@@ -152,7 +152,7 @@ async function generateSnapshots() {
       "cypress",
       "run",
       "--config-file",
-      "frontend/test/cypress-snapshots.json",
+      "frontend/test/__support__/e2e/cypress-snapshots.json",
       "--config",
       `baseUrl=${server.host}`,
     ],
diff --git a/frontend/test/__support__/commands.js b/frontend/test/__support__/e2e/commands.js
similarity index 99%
rename from frontend/test/__support__/commands.js
rename to frontend/test/__support__/e2e/commands.js
index 96813f1107dea2eaca2da7d16762f98ba094ea9b..5764dbaff38268f5ed7e672e807f17a9a63f4ac5 100644
--- a/frontend/test/__support__/commands.js
+++ b/frontend/test/__support__/e2e/commands.js
@@ -1,4 +1,4 @@
-import { USERS } from "__support__/cypress_data";
+import { USERS } from "__support__/e2e/cypress_data";
 
 Cypress.Commands.add("createUser", user => {
   cy.log(`Create ${user} user`);
diff --git a/frontend/test/cypress-plugins.js b/frontend/test/__support__/e2e/cypress-plugins.js
similarity index 95%
rename from frontend/test/cypress-plugins.js
rename to frontend/test/__support__/e2e/cypress-plugins.js
index 4953db5f2d596381f2e7273c53ecdaac2cb1819b..5a1f84d985d9628325251c34b4a23ac12b20613a 100644
--- a/frontend/test/cypress-plugins.js
+++ b/frontend/test/__support__/e2e/cypress-plugins.js
@@ -19,7 +19,7 @@ module.exports = (on, config) => {
   /********************************************************************
    **                          WEBPACK                               **
    ********************************************************************/
-  const { resolve } = require("../../webpack.config.js");
+  const { resolve } = require("../../../../webpack.config.js");
   const options = {
     webpackOptions: { resolve },
     watchOptions: {},
diff --git a/frontend/test/__support__/e2e/cypress-snapshots.json b/frontend/test/__support__/e2e/cypress-snapshots.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c97cc8adfaf88cb6aab69229331b3b4a95c9a61
--- /dev/null
+++ b/frontend/test/__support__/e2e/cypress-snapshots.json
@@ -0,0 +1,6 @@
+{
+  "testFiles": "**/*.cy.snap.js",
+  "pluginsFile": "frontend/test/__support__/e2e/cypress-plugins.js",
+  "integrationFolder": "frontend/test",
+  "supportFile": "frontend/test/__support__/e2e/cypress.js"
+}
diff --git a/frontend/test/__support__/cypress.js b/frontend/test/__support__/e2e/cypress.js
similarity index 98%
rename from frontend/test/__support__/cypress.js
rename to frontend/test/__support__/e2e/cypress.js
index a159961636b78e8f9416e929bdb40dfccbb4a2a1..074465f8d403316a18846bffa742525e250eac12 100644
--- a/frontend/test/__support__/cypress.js
+++ b/frontend/test/__support__/e2e/cypress.js
@@ -2,7 +2,7 @@ import "@testing-library/cypress/add-commands";
 import "@cypress/skip-test/support";
 import "./commands";
 
-export const version = require("../../../version.json");
+export const version = require("../../../../version.json");
 
 export function snapshot(name) {
   cy.request("POST", `/api/testing/snapshot/${name}`);
@@ -209,7 +209,7 @@ export function expectedRouteCalls({ route_alias, calls } = {}) {
 
 export function remapDisplayValueToFK({ display_value, name, fk } = {}) {
   // Both display_value and fk are expected to be field IDs
-  // You can get them from frontend/test/__support__/cypress_sample_dataset.json
+  // You can get them from frontend/test/__support__/e2e/cypress_sample_dataset.json
   cy.request("POST", `/api/field/${display_value}/dimension`, {
     field_id: display_value,
     name,
diff --git a/frontend/test/cypress.json b/frontend/test/__support__/e2e/cypress.json
similarity index 60%
rename from frontend/test/cypress.json
rename to frontend/test/__support__/e2e/cypress.json
index ee063e2a784e23a326163fb93fa2e3a68ad5f473..7efc9abc53bf615c90be7c6ade4996de6b2df943 100644
--- a/frontend/test/cypress.json
+++ b/frontend/test/__support__/e2e/cypress.json
@@ -1,8 +1,8 @@
 {
   "testFiles": "**/*.cy.spec.js",
-  "pluginsFile": "frontend/test/cypress-plugins.js",
+  "pluginsFile": "frontend/test/__support__/e2e/cypress-plugins.js",
   "integrationFolder": ".",
-  "supportFile": "frontend/test/__support__/cypress.js",
+  "supportFile": "frontend/test/__support__/e2e/cypress.js",
   "videoUploadOnPasses": false,
   "viewportHeight": 800,
   "viewportWidth": 1280,
diff --git a/frontend/test/__support__/cypress_data.js b/frontend/test/__support__/e2e/cypress_data.js
similarity index 100%
rename from frontend/test/__support__/cypress_data.js
rename to frontend/test/__support__/e2e/cypress_data.js
diff --git a/frontend/test/__support__/cypress_sample_dataset.js b/frontend/test/__support__/e2e/cypress_sample_dataset.js
similarity index 100%
rename from frontend/test/__support__/cypress_sample_dataset.js
rename to frontend/test/__support__/e2e/cypress_sample_dataset.js
diff --git a/frontend/test/cypress-snapshots.json b/frontend/test/cypress-snapshots.json
deleted file mode 100644
index 50e1915b89fd814fd6adbd0ae06c1cea195a1feb..0000000000000000000000000000000000000000
--- a/frontend/test/cypress-snapshots.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-	"testFiles": "**/*.cy.snap.js",
-	"pluginsFile": "frontend/test/cypress-plugins.js",
-	"integrationFolder": "frontend/test",
-	"supportFile": "frontend/test/__support__/cypress.js"
-}
diff --git a/frontend/test/metabase-db/mongo/add.cy.spec.js b/frontend/test/metabase-db/mongo/add.cy.spec.js
index b2508513620d3e00d90b1d0ee36607593999021b..fdfeb29beb5994a51a0b68ac36cdbecf4051b339 100644
--- a/frontend/test/metabase-db/mongo/add.cy.spec.js
+++ b/frontend/test/metabase-db/mongo/add.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal, typeAndBlurUsingLabel } from "__support__/cypress";
+import { restore, modal, typeAndBlurUsingLabel } from "__support__/e2e/cypress";
 
 describe("mongodb > admin > add", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase-db/mongo/query.cy.spec.js b/frontend/test/metabase-db/mongo/query.cy.spec.js
index 2cffc20a7d3e51f5a260a76b3fcaa9278751e1b4..aaa2bc1f5352825771fd3b34a98db3baa8b7fef5 100644
--- a/frontend/test/metabase-db/mongo/query.cy.spec.js
+++ b/frontend/test/metabase-db/mongo/query.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal, addMongoDatabase } from "__support__/cypress";
+import { restore, modal, addMongoDatabase } from "__support__/e2e/cypress";
 
 const MONGO_DB_NAME = "QA Mongo4";
 
diff --git a/frontend/test/metabase-db/mysql/add.cy.spec.js b/frontend/test/metabase-db/mysql/add.cy.spec.js
index 9e640bd76e0f8fce33e69f76ea152fb5b3619842..13c67b563f21afca9d20567152e28404734ce7c0 100644
--- a/frontend/test/metabase-db/mysql/add.cy.spec.js
+++ b/frontend/test/metabase-db/mysql/add.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal, typeAndBlurUsingLabel } from "__support__/cypress";
+import { restore, modal, typeAndBlurUsingLabel } from "__support__/e2e/cypress";
 
 describe("mysql > admin > add", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase-db/mysql/custom-column.cy.spec.js b/frontend/test/metabase-db/mysql/custom-column.cy.spec.js
index ff2daf2c4363dd4a8220675515953c5c7c9539f3..6e3d7be21d662cd9d2bd50426747b38d06c2f11e 100644
--- a/frontend/test/metabase-db/mysql/custom-column.cy.spec.js
+++ b/frontend/test/metabase-db/mysql/custom-column.cy.spec.js
@@ -1,4 +1,8 @@
-import { restore, addMySQLDatabase, withDatabase } from "__support__/cypress";
+import {
+  restore,
+  addMySQLDatabase,
+  withDatabase,
+} from "__support__/e2e/cypress";
 
 const MYSQL_DB_NAME = "QA MySQL8";
 
diff --git a/frontend/test/metabase-db/mysql/query.cy.spec.js b/frontend/test/metabase-db/mysql/query.cy.spec.js
index a88b5d686d977ec3c981e0bf9bb685e27b17eec8..0aff11dc8f0400144380a0fe4e2a1ebb21e44e93 100644
--- a/frontend/test/metabase-db/mysql/query.cy.spec.js
+++ b/frontend/test/metabase-db/mysql/query.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal, addMySQLDatabase } from "__support__/cypress";
+import { restore, modal, addMySQLDatabase } from "__support__/e2e/cypress";
 
 const MYSQL_DB_NAME = "QA MySQL8";
 
diff --git a/frontend/test/metabase-db/postgres/add.cy.spec.js b/frontend/test/metabase-db/postgres/add.cy.spec.js
index e2e5a9acc2cf96f27a522dec40cb36e0e5ff1683..4377084b02826cecb726c00ff63b76d507d6fe66 100644
--- a/frontend/test/metabase-db/postgres/add.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/add.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal, typeAndBlurUsingLabel } from "__support__/cypress";
+import { restore, modal, typeAndBlurUsingLabel } from "__support__/e2e/cypress";
 
 describe("postgres > admin > add", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase-db/postgres/custom-column.cy.spec.js b/frontend/test/metabase-db/postgres/custom-column.cy.spec.js
index 14b6b09fab59885ca03a512b9a284adab152d941..9e59ea1c6e39f3d811356551319ce0101148b27e 100644
--- a/frontend/test/metabase-db/postgres/custom-column.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/custom-column.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, addPostgresDatabase, popover } from "__support__/cypress";
+import { restore, addPostgresDatabase, popover } from "__support__/e2e/cypress";
 
 const PG_DB_NAME = "QA Postgres12";
 
diff --git a/frontend/test/metabase-db/postgres/native.cy.spec.js b/frontend/test/metabase-db/postgres/native.cy.spec.js
index 72bbd274b1696a3459da2ebc7f3a05553a4d0a3d..887f902cd6efefb885f1c83ca2a9be4049e3a86e 100644
--- a/frontend/test/metabase-db/postgres/native.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/native.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, addPostgresDatabase, modal } from "__support__/cypress";
+import { restore, addPostgresDatabase, modal } from "__support__/e2e/cypress";
 
 const PG_DB_NAME = "QA Postgres12";
 
diff --git a/frontend/test/metabase-db/postgres/permissions.cy.spec.js b/frontend/test/metabase-db/postgres/permissions.cy.spec.js
index d1b013027764f2a7b28df0a328bba4d41f53cb2f..8a00a92049a82f40cfc3bb5041ac8b6dff3d8cab 100644
--- a/frontend/test/metabase-db/postgres/permissions.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/permissions.cy.spec.js
@@ -2,8 +2,8 @@ import {
   restore,
   addPostgresDatabase,
   withDatabase,
-} from "__support__/cypress";
-import { USER_GROUPS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USER_GROUPS } from "__support__/e2e/cypress_data";
 
 const { ALL_USERS_GROUP } = USER_GROUPS;
 const PG_DB_NAME = "QA Postgres12";
diff --git a/frontend/test/metabase-db/postgres/query.cy.spec.js b/frontend/test/metabase-db/postgres/query.cy.spec.js
index 69d4ebd314630387b37f5637d8cec1e285d0da38..e2702a07869e0d9cbfec87155c464975cb67a729 100644
--- a/frontend/test/metabase-db/postgres/query.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/query.cy.spec.js
@@ -3,7 +3,7 @@ import {
   addPostgresDatabase,
   withDatabase,
   visitQuestionAdhoc,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
 const PG_DB_NAME = "QA Postgres12";
 const PG_DB_ID = 2;
diff --git a/frontend/test/metabase-db/postgres/sandboxes.cy.spec.js b/frontend/test/metabase-db/postgres/sandboxes.cy.spec.js
index 477ae7fd9f98bdbd31f7ce61e0724b3a2a08d024..3738f2d9eb32d7ce42b0521db9bf995fbd3502f6 100644
--- a/frontend/test/metabase-db/postgres/sandboxes.cy.spec.js
+++ b/frontend/test/metabase-db/postgres/sandboxes.cy.spec.js
@@ -3,8 +3,8 @@ import {
   addPostgresDatabase,
   withDatabase,
   describeWithToken,
-} from "__support__/cypress";
-import { USER_GROUPS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USER_GROUPS } from "__support__/e2e/cypress_data";
 
 const PG_DB_NAME = "QA Postgres12";
 const PG_DB_ID = 2;
diff --git a/frontend/test/metabase-smoketest/admin.cy.spec.js b/frontend/test/metabase-smoketest/admin.cy.spec.js
index 55fd28c87049d60dd586cc06d52826437e59a1d7..82bafb0f6c4acbdb4bcf02a4de3268bd54355d57 100644
--- a/frontend/test/metabase-smoketest/admin.cy.spec.js
+++ b/frontend/test/metabase-smoketest/admin.cy.spec.js
@@ -1,6 +1,6 @@
 import path from "path";
-import { restore, sidebar } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { restore, sidebar } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 const { admin } = USERS;
 const new_user = {
diff --git a/frontend/test/metabase-smoketest/admin_setup.cy.spec.js b/frontend/test/metabase-smoketest/admin_setup.cy.spec.js
index 590d46eced3b7ede686da7dd29e08eb50cd97596..b9f75e05dc48d0547502a32eea4a4787c1ff6f75 100644
--- a/frontend/test/metabase-smoketest/admin_setup.cy.spec.js
+++ b/frontend/test/metabase-smoketest/admin_setup.cy.spec.js
@@ -3,8 +3,8 @@ import {
   popover,
   restore,
   setupLocalHostEmail,
-} from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 const { admin, normal, nocollection, nodata } = USERS;
 const new_user = {
diff --git a/frontend/test/metabase-smoketest/user.cy.spec.js b/frontend/test/metabase-smoketest/user.cy.spec.js
index 484dcf6069c35593e97d9b4382f6c6b4b365e6e8..4b93306c5d56a757b960e2094220a96d5d541db4 100644
--- a/frontend/test/metabase-smoketest/user.cy.spec.js
+++ b/frontend/test/metabase-smoketest/user.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, sidebar, popover } from "__support__/cypress";
+import { restore, sidebar, popover } from "__support__/e2e/cypress";
 
 describe("smoketest > user", () => {
   // Goal: user can use all the features of the simple question and notebook editor
diff --git a/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js b/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js
index ca0a06be1aee7c7028cab7b10c1c901ac65505bb..8c79f80cc7e7b63a755834b4c8b6df4929ba8d98 100644
--- a/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover } from "__support__/cypress";
+import { restore, popover } from "__support__/e2e/cypress";
 
 function typeField(label, value) {
   cy.findByLabelText(label)
diff --git a/frontend/test/metabase/scenarios/admin/databases/edit.cy.spec.js b/frontend/test/metabase/scenarios/admin/databases/edit.cy.spec.js
index ce643b0c59da1d005cff87eef9b1b1e7b04299a2..921231f849d5d594e6d9d12df582bd4dd3155b0a 100644
--- a/frontend/test/metabase/scenarios/admin/databases/edit.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/databases/edit.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover, modal } from "__support__/cypress";
+import { restore, popover, modal } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > databases > edit", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/databases/list.cy.spec.js b/frontend/test/metabase/scenarios/admin/databases/list.cy.spec.js
index 1dcc4cd86efcd228f52cdcd0da0234b69fa34ad0..945b334184a4fff59d571bc24ab6a1786e57cebe 100644
--- a/frontend/test/metabase/scenarios/admin/databases/list.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/databases/list.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > databases > list", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/editor.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/editor.cy.spec.js
index 626f2faaf6ec423240a19ad05c34ec0505fc4f16..0298a7771185d6c49a9db37d2b192f06f360c4cf 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/editor.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/editor.cy.spec.js
@@ -1,6 +1,6 @@
-import { restore, popover, visitAlias } from "__support__/cypress";
+import { restore, popover, visitAlias } from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/field.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/field.cy.spec.js
index f0d7afd844ae1981fb20b0aad620e395e3ad96fd..3255c3c463373f7de6eeef7e58b0e47c12f982b7 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/field.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/field.cy.spec.js
@@ -3,9 +3,9 @@ import {
   withDatabase,
   visitAlias,
   popover,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
index 45cba50d7e87551ad3cd26054c903a9515b24b04..eaa3cb787f0b4b0e70c6a288d8047d1e23d3f1f2 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 const ORDERS_URL = "/admin/datamodel/database/1/table/2";
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/metadata.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/metadata.cy.spec.js
index bd00bd70e0f19ae46c9e3f57a01541ffb474b73f..6ebde7c0c0de56a6d566ca4da302561aa963d8ef 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/metadata.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/metadata.cy.spec.js
@@ -3,8 +3,8 @@ import {
   openOrdersTable,
   openReviewsTable,
   popover,
-} from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+} from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, REVIEWS } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
index 9284b656fde2fce90eef88d5cf6615183fc77259..51c41ccfac024716d1968d9565f9ee30790ebd57 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, popover, modal } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, popover, modal } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/segments.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/segments.cy.spec.js
index f9e0c0e8ac89799f34522d1268cc6706dc2a5a38..fc7d5371b50a37abdec6cd4ce91f4af8b8fc9a49 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/segments.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/segments.cy.spec.js
@@ -1,7 +1,7 @@
 // Ported from `segments.e2e.spec.js`
-import { restore, popover, modal, sidebar } from "__support__/cypress";
+import { restore, popover, modal, sidebar } from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/table.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/table.cy.spec.js
index 2ce130e5f89315a19bc526606aace68c4bf4a995..7121556979b4040e255ae5c775eb1e1c5d1b06cd 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/table.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/table.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > databases > table", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/people/people.cy.spec.js b/frontend/test/metabase/scenarios/admin/people/people.cy.spec.js
index 6e9ada8567b4a09f9e8d96362b43c5780da03d31..da4cc360eef4f46205709b337acbefe8e8d6a90d 100644
--- a/frontend/test/metabase/scenarios/admin/people/people.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/people/people.cy.spec.js
@@ -1,8 +1,8 @@
 // Includes migrations from integration tests:
 // https://github.com/metabase/metabase/pull/14174
 
-import { restore, popover, setupDummySMTP } from "__support__/cypress";
-import { USERS, USER_GROUPS } from "__support__/cypress_data";
+import { restore, popover, setupDummySMTP } from "__support__/e2e/cypress";
+import { USERS, USER_GROUPS } from "__support__/e2e/cypress_data";
 const { normal, admin } = USERS;
 const { DATA_GROUP } = USER_GROUPS;
 const TOTAL_USERS = Object.entries(USERS).length;
diff --git a/frontend/test/metabase/scenarios/admin/permissions/permissions.cy.spec.js b/frontend/test/metabase/scenarios/admin/permissions/permissions.cy.spec.js
index cb4bb24b28ef6dd19d0af0f111e2f641582f8e68..f197db29e159172ef6c6d5e62f7eab76a32d6c84 100644
--- a/frontend/test/metabase/scenarios/admin/permissions/permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/permissions/permissions.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > permissions", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/permissions/sandboxes.cy.spec.js b/frontend/test/metabase/scenarios/admin/permissions/sandboxes.cy.spec.js
index 2f3493451d7fcca78d461f99cb58f1d0ee1231a5..e0776dba995d9dc7700502afa9096b7384427bfe 100644
--- a/frontend/test/metabase/scenarios/admin/permissions/sandboxes.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/permissions/sandboxes.cy.spec.js
@@ -8,10 +8,10 @@ import {
   restore,
   remapDisplayValueToFK,
   sidebar,
-} from "__support__/cypress";
-import { USER_GROUPS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USER_GROUPS } from "__support__/e2e/cypress_data";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/admin/settings/localization.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/localization.cy.spec.js
index 55d19b0f325598781a5c91cd8344db3ed7b179f3..c05e33875e5efa1a58929dedaafb5fda4751f2fe 100644
--- a/frontend/test/metabase/scenarios/admin/settings/localization.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/settings/localization.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/admin/settings/settings.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/settings.cy.spec.js
index 853265e4641da5185ca2694cc627b50a1c417a03..5450c6a677622a5c8f016b29592444a7149e47ad 100644
--- a/frontend/test/metabase/scenarios/admin/settings/settings.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/settings/settings.cy.spec.js
@@ -4,7 +4,7 @@ import {
   version,
   popover,
   setupDummySMTP,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
 describe("scenarios > admin > settings", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/settings/spinner.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/spinner.cy.spec.js
index e87e6896e777e029b5bd45ada88ae1d63ac80937..e1abff7f0b0efa85e91f47eadeed41926792aa58 100644
--- a/frontend/test/metabase/scenarios/admin/settings/spinner.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/settings/spinner.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > spinner", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/admin/settings/whitelabel.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/whitelabel.cy.spec.js
index d5ce938b21189871e64b605aee92f1df3ddde120..4eb70a05acb8fc9f2581faa3eb85bd7e8c9d6100 100644
--- a/frontend/test/metabase/scenarios/admin/settings/whitelabel.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/settings/whitelabel.cy.spec.js
@@ -2,7 +2,7 @@ import {
   restore,
   openOrdersTable,
   describeWithToken,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
 // Define colors that we use for whitelabeling
 // If rbg values exist, it's because we explicit test those
diff --git a/frontend/test/metabase/scenarios/admin/troubleshooting/tasks.cy.spec.js b/frontend/test/metabase/scenarios/admin/troubleshooting/tasks.cy.spec.js
index 490a197275898ebb91d97100607ff19c38e4e607..c5ab908a149e9d634d1c709cd24404189d9acc35 100644
--- a/frontend/test/metabase/scenarios/admin/troubleshooting/tasks.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/troubleshooting/tasks.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > admin > troubleshooting > tasks", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/alert/alert.cy.spec.js b/frontend/test/metabase/scenarios/alert/alert.cy.spec.js
index 13640ba7c1dfa39dac34ae2a41660591dd073104..dde401f5860a3512b00216b1e8d8f241d5cec6bb 100644
--- a/frontend/test/metabase/scenarios/alert/alert.cy.spec.js
+++ b/frontend/test/metabase/scenarios/alert/alert.cy.spec.js
@@ -4,7 +4,7 @@ import {
   createBasicAlert,
   popover,
   openPeopleTable,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 // Ported from alert.e2e.spec.js
 // *** We should also check that alerts can be set up through slack
 
diff --git a/frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js b/frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js
index 94c235adf15f99fef4319de8011e05b67985bb69..15f6c480f9152cec92117a962af7cf457edb6f0c 100644
--- a/frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js
+++ b/frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js
@@ -2,7 +2,7 @@ import {
   restore,
   setupLocalHostEmail,
   createBasicAlert,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 // Port from alert.e2e.spec.js
 
 // [quarantine]: cannot run tests that rely on email setup in CI (yet)
diff --git a/frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js b/frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js
index dbf3eda452ae450fbb62d01350cdbe340aafc4c7..614b41471ffd80ef01a330383241184964515977 100644
--- a/frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js
+++ b/frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, setupLocalHostEmail } from "__support__/cypress";
+import { restore, setupLocalHostEmail } from "__support__/e2e/cypress";
 
 function setUpHourlyAlert(question_num) {
   cy.visit(`/question/${question_num}`);
diff --git a/frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js b/frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js
index 59c1e9e01658bc1d5495a684ba8fdbb75fc486b0..abca15342ef60881d55119c9376f9065fc41b466 100644
--- a/frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js
+++ b/frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, describeWithToken } from "__support__/cypress";
+import { restore, describeWithToken } from "__support__/e2e/cypress";
 
 describeWithToken("audit > ad-hoc", () => {
   describe("native query with JOIN", () => {
diff --git a/frontend/test/metabase/scenarios/audit/auditing.cy.spec.js b/frontend/test/metabase/scenarios/audit/auditing.cy.spec.js
index a8fb02034eb6a89e09a6c22d37c91183922a438c..e895e9897b321413caf50cfe5b1053ca24e0fbca 100644
--- a/frontend/test/metabase/scenarios/audit/auditing.cy.spec.js
+++ b/frontend/test/metabase/scenarios/audit/auditing.cy.spec.js
@@ -1,6 +1,6 @@
-import { restore, describeWithToken } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, describeWithToken } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 const { normal } = USERS;
 const { PRODUCTS } = SAMPLE_DATASET;
 const TOTAL_USERS = Object.entries(USERS).length;
diff --git a/frontend/test/metabase/scenarios/auth/search.cy.spec.js b/frontend/test/metabase/scenarios/auth/search.cy.spec.js
index 6afe2c8d571c88d5c621f27b0676b9c04ba57053..e7a3a47070ea401d7157e90adc84aebb70123431 100644
--- a/frontend/test/metabase/scenarios/auth/search.cy.spec.js
+++ b/frontend/test/metabase/scenarios/auth/search.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > auth > search", () => {
   beforeEach(restore);
diff --git a/frontend/test/metabase/scenarios/auth/signin.cy.spec.js b/frontend/test/metabase/scenarios/auth/signin.cy.spec.js
index 1137acab52a541f293bd993d4dfc36f3d6589f74..324edb1b94619d46a60b7fcf35fce6bdc1b2c30d 100644
--- a/frontend/test/metabase/scenarios/auth/signin.cy.spec.js
+++ b/frontend/test/metabase/scenarios/auth/signin.cy.spec.js
@@ -1,5 +1,5 @@
-import { browse, restore } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { browse, restore } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 const sizes = [[1280, 800], [640, 360]];
 const { admin } = USERS;
diff --git a/frontend/test/metabase/scenarios/auth/sso.cy.spec.js b/frontend/test/metabase/scenarios/auth/sso.cy.spec.js
index 6a8dcc3e6836bb11384de4048452709a35287d36..001ee92f7c7f9f3ae5948e31ba0cb44262f55ecd 100644
--- a/frontend/test/metabase/scenarios/auth/sso.cy.spec.js
+++ b/frontend/test/metabase/scenarios/auth/sso.cy.spec.js
@@ -1,4 +1,4 @@
-import { describeWithToken, restore } from "__support__/cypress";
+import { describeWithToken, restore } from "__support__/e2e/cypress";
 
 describe("scenarios > auth > signin > SSO", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/collections/collections.cy.spec.js b/frontend/test/metabase/scenarios/collections/collections.cy.spec.js
index ad7fc110ed3756b0492086d40ec7a727c18d00d8..443ab74938ec2ea78d0e5bfe9b879c2f36d15fbe 100644
--- a/frontend/test/metabase/scenarios/collections/collections.cy.spec.js
+++ b/frontend/test/metabase/scenarios/collections/collections.cy.spec.js
@@ -4,8 +4,8 @@ import {
   modal,
   popover,
   openOrdersTable,
-} from "__support__/cypress";
-import { USERS, USER_GROUPS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USERS, USER_GROUPS } from "__support__/e2e/cypress_data";
 
 const { nocollection } = USERS;
 const { DATA_GROUP } = USER_GROUPS;
diff --git a/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js b/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js
index 92764da7fb8421471f07ccdfd41c68ec207cd391..719ceabb97516403cdd32cbf2c9413f12ee65097 100644
--- a/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/collections/permissions.cy.spec.js
@@ -1,6 +1,6 @@
 import { onlyOn } from "@cypress/skip-test";
-import { restore, popover } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { restore, popover } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 const PERMISSIONS = {
   curate: ["admin", "normal", "nodata"],
diff --git a/frontend/test/metabase/scenarios/collections/personal-collections.cy.spec.js b/frontend/test/metabase/scenarios/collections/personal-collections.cy.spec.js
index 12120c966419d0e9395cf1c352520de3d821e875..02343631500ed901062300a3d20f27c28ce3d51a 100644
--- a/frontend/test/metabase/scenarios/collections/personal-collections.cy.spec.js
+++ b/frontend/test/metabase/scenarios/collections/personal-collections.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, popover, modal } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { restore, popover, modal } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 describe("personal collections", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/dashboard/chained-filters.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/chained-filters.cy.spec.js
index 1771c44b50e158c40435753d65ca95b8baf13c2f..ddcd1f1d3feaa77337fecf756691c418bce45820 100644
--- a/frontend/test/metabase/scenarios/dashboard/chained-filters.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/chained-filters.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, popover } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, popover } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PEOPLE, PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
index bc29892379a0884b19a090b7cc8c7a3e5f413010..cc3c51a333f4ebaa41dc985aecfd207253564209 100644
--- a/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
@@ -3,9 +3,9 @@ import {
   modal,
   popover,
   createNativeQuestion,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/dashboard/dashboard.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/dashboard.cy.spec.js
index f5a76da50ed4f51885a89dd082c18a5e7baa1469..3ebfcc0b568ec98aa79bb46dcdcc6deb7b0b290f 100644
--- a/frontend/test/metabase/scenarios/dashboard/dashboard.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/dashboard.cy.spec.js
@@ -5,9 +5,9 @@ import {
   restore,
   selectDashboardFilter,
   expectedRouteCalls,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/dashboard/dashboard_data_permissions.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/dashboard_data_permissions.cy.spec.js
index c84621ff46561f01aabaa215088534d5bfc81aae..d230989bc40c2e6e17b01568490689e0e60ae78a 100644
--- a/frontend/test/metabase/scenarios/dashboard/dashboard_data_permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/dashboard_data_permissions.cy.spec.js
@@ -1,4 +1,8 @@
-import { restore, popover, selectDashboardFilter } from "__support__/cypress";
+import {
+  restore,
+  popover,
+  selectDashboardFilter,
+} from "__support__/e2e/cypress";
 
 function filterDashboard(suggests = true) {
   cy.visit("/dashboard/1");
diff --git a/frontend/test/metabase/scenarios/dashboard/dashboard_local-only.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/dashboard_local-only.cy.spec.js
index b0ca2200499f52832941001aff8065a7babc77c0..4fde9cabc762e534fd22735cf968d2c959a7588d 100644
--- a/frontend/test/metabase/scenarios/dashboard/dashboard_local-only.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/dashboard_local-only.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PEOPLE, PEOPLE_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js
index fc5cb346a62a8c572bbad836211f0ecc482c92ac..c1795972b15cba050ce2dd9c39d45cd3ae9558a0 100644
--- a/frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover, modal } from "__support__/cypress";
+import { restore, popover, modal } from "__support__/e2e/cypress";
 
 describe("scenarios > dashboard > embed", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/dashboard/nested-cards.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/nested-cards.cy.spec.js
index 11de497b2e6da5b5213f7467ceeb8205b45f4c90..8dda123a7db312f7389bbb203ea94f4c39e7d486 100644
--- a/frontend/test/metabase/scenarios/dashboard/nested-cards.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/nested-cards.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover } from "__support__/cypress";
+import { restore, popover } from "__support__/e2e/cypress";
 
 describe("scenarios > dashboard > nested cards", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/dashboard/old-parameters.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/old-parameters.cy.spec.js
index d0c8b501e98d37114ec22643abe1c8d17b787c9d..fcc662884ae15f494428f848dd6a84cf37890925 100644
--- a/frontend/test/metabase/scenarios/dashboard/old-parameters.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/old-parameters.cy.spec.js
@@ -1,4 +1,4 @@
-import { popover, restore, mockSessionProperty } from "__support__/cypress";
+import { popover, restore, mockSessionProperty } from "__support__/e2e/cypress";
 // NOTE: some overlap with parameters-embedded.cy.spec.js
 
 describe("scenarios > dashboard > parameters", () => {
diff --git a/frontend/test/metabase/scenarios/dashboard/parameters-embedded.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/parameters-embedded.cy.spec.js
index fa7a05679bd9b24fe15493d6ffdcbce06ff82fd1..796a481c60d2b96e3375a7cd9c6320da7c1135c0 100644
--- a/frontend/test/metabase/scenarios/dashboard/parameters-embedded.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/parameters-embedded.cy.spec.js
@@ -1,6 +1,6 @@
-import { restore, popover } from "__support__/cypress";
+import { restore, popover } from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, PEOPLE } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/dashboard/parameters.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/parameters.cy.spec.js
index 0c5aa5c481476cfb0aff17673eed46d07fea4c5a..27e770401260374f32c660e0f37a04cddb3f1b3d 100644
--- a/frontend/test/metabase/scenarios/dashboard/parameters.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/parameters.cy.spec.js
@@ -1,4 +1,4 @@
-import { modal, popover, restore } from "__support__/cypress";
+import { modal, popover, restore } from "__support__/e2e/cypress";
 // NOTE: some overlap with parameters-embedded.cy.spec.js
 
 describe("scenarios > dashboard > parameters", () => {
diff --git a/frontend/test/metabase/scenarios/dashboard/permissions.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/permissions.cy.spec.js
index e5a9a003192ef0f22b570abf89b074a71df71a83..1046b26b7663ad0d012a76f137759d3c5ec167b6 100644
--- a/frontend/test/metabase/scenarios/dashboard/permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/permissions.cy.spec.js
@@ -1,6 +1,6 @@
 import _ from "underscore";
 import { assoc } from "icepick";
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > dashboard > permissions", () => {
   let dashboardId;
diff --git a/frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js
index 263391f5ee25fc390b965d80c4131933320c44a3..abd206c879b6ec0e686704ad31c2d35d5008a4da 100644
--- a/frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js
@@ -4,8 +4,8 @@ import {
   describeWithToken,
   popover,
   mockSessionProperty,
-} from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 const { admin } = USERS;
 
 describe("scenarios > dashboard > subscriptions", () => {
diff --git a/frontend/test/metabase/scenarios/dashboard/text-box.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/text-box.cy.spec.js
index 4986b99b018e3b33c4d23f356c244fe8527a40ae..a4d4b5111346a3d13963185ff574bda62e37899f 100644
--- a/frontend/test/metabase/scenarios/dashboard/text-box.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/text-box.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 function addTextBox(string) {
   cy.icon("pencil").click();
diff --git a/frontend/test/metabase/scenarios/dashboard/title-drill.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/title-drill.cy.spec.js
index 89b4bf4f84070ac53bf087fda37faf48f1a6d38f..7a01783079fcbb94a1c1ff36097fbea877cbebac 100644
--- a/frontend/test/metabase/scenarios/dashboard/title-drill.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/title-drill.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > dashboard > title drill", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/dashboard/x-rays.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/x-rays.cy.spec.js
index 794ca1f69ffe41ba2cb06c0e7d8de9dd07a43543..74f32ec053041a62075085324663cfcc24d8730c 100644
--- a/frontend/test/metabase/scenarios/dashboard/x-rays.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/x-rays.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, visitQuestionAdhoc } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/home/activity-page.cy.spec.js b/frontend/test/metabase/scenarios/home/activity-page.cy.spec.js
index 4c07041b0187ebea0f30fae8b7a5275ca5a6a77f..09cf4a2b5111d76b3cfc2df0b4d9ca6ba6efca76 100644
--- a/frontend/test/metabase/scenarios/home/activity-page.cy.spec.js
+++ b/frontend/test/metabase/scenarios/home/activity-page.cy.spec.js
@@ -1,5 +1,5 @@
 //Replaces HomepageApp.e2e.spec.js
-import { restore, openProductsTable, popover } from "__support__/cypress";
+import { restore, openProductsTable, popover } from "__support__/e2e/cypress";
 
 describe("metabase > scenarios > home > activity-page", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/home/overworld.cy.spec.js b/frontend/test/metabase/scenarios/home/overworld.cy.spec.js
index 09fc9717a0a87d282dd7b0e24db850717f8a4929..a379d49a9f5d90b67a738d4d4e62521d926406cc 100644
--- a/frontend/test/metabase/scenarios/home/overworld.cy.spec.js
+++ b/frontend/test/metabase/scenarios/home/overworld.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > home > overworld", () => {
   beforeEach(restore);
diff --git a/frontend/test/metabase/scenarios/home/search.cy.spec.js b/frontend/test/metabase/scenarios/home/search.cy.spec.js
index ddb573b49f144e4b41c166a04407140343c2a7ce..b6e468a42fcf737f9cf551e1f9500df0f566ef10 100644
--- a/frontend/test/metabase/scenarios/home/search.cy.spec.js
+++ b/frontend/test/metabase/scenarios/home/search.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { restore } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 
 ["admin", "normal"].forEach(user => {
   describe(`search > ${user} user`, () => {
diff --git a/frontend/test/metabase/scenarios/internal/question.cy.spec.js b/frontend/test/metabase/scenarios/internal/question.cy.spec.js
index 3d6830d28045d70e626d41ce9ad91dd6e2b45f2c..537706d49dc690ff6ce212f624a6cd4b9e11c67c 100644
--- a/frontend/test/metabase/scenarios/internal/question.cy.spec.js
+++ b/frontend/test/metabase/scenarios/internal/question.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, adhocQuestionHash } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, adhocQuestionHash } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 // This is really a test of the QuestionLoader component
 // It's used on /_internal/question among other places and loads questions by ID or url hash.
diff --git a/frontend/test/metabase/scenarios/permissions.cy.spec.js b/frontend/test/metabase/scenarios/permissions.cy.spec.js
index 4171f6df5590d5dcc4bd5273b7c4a0a7d6f0b213..8d15614b9a4b8de21fece8d9afc905a3bb1ead95 100644
--- a/frontend/test/metabase/scenarios/permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/permissions.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > permissions", () => {
   beforeEach(restore);
diff --git a/frontend/test/metabase/scenarios/public/public.cy.spec.js b/frontend/test/metabase/scenarios/public/public.cy.spec.js
index cfa24860edbe978bad6ef038e0c2d62e8cd08b47..d360fd5e8b9b815f4a4c8b8fb6e472a2ace75675 100644
--- a/frontend/test/metabase/scenarios/public/public.cy.spec.js
+++ b/frontend/test/metabase/scenarios/public/public.cy.spec.js
@@ -1,6 +1,6 @@
-import { restore, popover, modal } from "__support__/cypress";
+import { restore, popover, modal } from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PRODUCTS } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js b/frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js
index bf597cfa9b0a57b61320c53b5892f5403006b736..ea7e4d9254bf3709c0b6af2f1342a4b594fb8680 100644
--- a/frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js
+++ b/frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 const MOCK_PULSE_FORM_INPUT = {
   channels: {
diff --git a/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js b/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js
index ab65e8a6f233ad7e1f23f30e2f7830fcc9ce7f3a..14e836e244102b8b2b5fbfdf0ea026ee36201d23 100644
--- a/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js
@@ -6,9 +6,9 @@ import {
   openOrdersTable,
   openPeopleTable,
   visitQuestionAdhoc,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/question/data_ref.cy.spec.js b/frontend/test/metabase/scenarios/question/data_ref.cy.spec.js
index 088fbe13cec7ba887d77bf901d846eb71844d5c7..4239e7b61f28f4d81c553c70cdd33719f7dc34d8 100644
--- a/frontend/test/metabase/scenarios/question/data_ref.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/data_ref.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > native question > data reference sidebar", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/downloads.cy.spec.js b/frontend/test/metabase/scenarios/question/downloads.cy.spec.js
index 5610dce09bed9b09c9d6407e5127ad8ee20f387b..c85cc73b6e9cc2db0229bf0112dc738f41ea97dd 100644
--- a/frontend/test/metabase/scenarios/question/downloads.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/downloads.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 const xlsx = require("xlsx");
 
diff --git a/frontend/test/metabase/scenarios/question/filter.cy.spec.js b/frontend/test/metabase/scenarios/question/filter.cy.spec.js
index c8254602f1c9ccb96ec8bfcaf8715285a1bf67e3..8165e7187e7875d28029c47297c46b8af74c8c71 100644
--- a/frontend/test/metabase/scenarios/question/filter.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/filter.cy.spec.js
@@ -6,9 +6,9 @@ import {
   openPeopleTable,
   popover,
   visitQuestionAdhoc,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/question/joins.cy.spec.js b/frontend/test/metabase/scenarios/question/joins.cy.spec.js
index 3563079e95161de47bbd5174c3eb8899b31088d0..103bf53c921cb1be6547863c4bcc0ee08ab999c8 100644
--- a/frontend/test/metabase/scenarios/question/joins.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/joins.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, openProductsTable, popover } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, openProductsTable, popover } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/question/loading.cy.spec.js b/frontend/test/metabase/scenarios/question/loading.cy.spec.js
index 5200d27608f034ac983d7c9b4f59090e9a70ada7..e9b89214885bcd93863b0d6ea85965e06bed269b 100644
--- a/frontend/test/metabase/scenarios/question/loading.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/loading.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > question > loading behavior", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/native.cy.spec.js b/frontend/test/metabase/scenarios/question/native.cy.spec.js
index fc3afcd0177136edf4aa0f84d0b1cddd329f6d1e..2c2e892f292c0177872a93071a54ab3ea0d8e3a3 100644
--- a/frontend/test/metabase/scenarios/question/native.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/native.cy.spec.js
@@ -4,9 +4,9 @@ import {
   modal,
   visitQuestionAdhoc,
   mockSessionProperty,
-} from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
-import { USER_GROUPS } from "__support__/cypress_data";
+} from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
+import { USER_GROUPS } from "__support__/e2e/cypress_data";
 
 const { ORDERS, PRODUCTS } = SAMPLE_DATASET;
 const { COLLECTION_GROUP } = USER_GROUPS;
diff --git a/frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js b/frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js
index 4b22638fd3c3a6050e76f49b94724934f83a5614..8ca448d07cc19eee3067a3c8e844c32770adc7cc 100644
--- a/frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > question > native subquery", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/nested.cy.spec.js b/frontend/test/metabase/scenarios/question/nested.cy.spec.js
index 5804501d2ca9439d9c5f83d8890d8e5d8459f8cd..fc5fb45362912c962743e0e3fe8a2ad8c96cb005 100644
--- a/frontend/test/metabase/scenarios/question/nested.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/nested.cy.spec.js
@@ -5,9 +5,9 @@ import {
   openOrdersTable,
   remapDisplayValueToFK,
   sidebar,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/question/new.cy.spec.js b/frontend/test/metabase/scenarios/question/new.cy.spec.js
index adf804bb88c23ad1ffc5ca757ce7ce9eee3ff3c3..f56454da9e0955e7a8c27e4cb0dbd8384e70980f 100644
--- a/frontend/test/metabase/scenarios/question/new.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/new.cy.spec.js
@@ -4,9 +4,9 @@ import {
   popover,
   openOrdersTable,
   openReviewsTable,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
index 673f5148b00fd4e46448f5f0c48395bc438f55b3..4e3c047eaa1741020516e88f3884ce06114e531d 100644
--- a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
@@ -6,9 +6,9 @@ import {
   popover,
   modal,
   visitQuestionAdhoc,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/question/nulls.cy.spec.js b/frontend/test/metabase/scenarios/question/nulls.cy.spec.js
index 96c119d54cb5efde8d56bd0ddee66ce08a0d9425..ee86679e50305b02d7a1d86cdc6176acdf954aa9 100644
--- a/frontend/test/metabase/scenarios/question/nulls.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/nulls.cy.spec.js
@@ -1,6 +1,6 @@
-import { restore, openOrdersTable, popover } from "__support__/cypress";
+import { restore, openOrdersTable, popover } from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/question/operators.cy.spec.js b/frontend/test/metabase/scenarios/question/operators.cy.spec.js
index 06d25f80a73f72d553908fecf0eb9323321cf429..96c08bc6f720b95e9c4f175922b63449bf15d718 100644
--- a/frontend/test/metabase/scenarios/question/operators.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/operators.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover } from "__support__/cypress";
+import { restore, popover } from "__support__/e2e/cypress";
 
 describe("operators in questions", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/saved.cy.spec.js b/frontend/test/metabase/scenarios/question/saved.cy.spec.js
index e9eb81321994cb7c0d9b89784df73246f4787811..e6557b2ea2679422176841928dd512dcbbca6a3f 100644
--- a/frontend/test/metabase/scenarios/question/saved.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/saved.cy.spec.js
@@ -1,4 +1,9 @@
-import { restore, popover, modal, openOrdersTable } from "__support__/cypress";
+import {
+  restore,
+  popover,
+  modal,
+  openOrdersTable,
+} from "__support__/e2e/cypress";
 
 describe("scenarios > question > saved", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/settings.cy.spec.js b/frontend/test/metabase/scenarios/question/settings.cy.spec.js
index a4aa78ca5ab7484f0e63cddacf15e17ce164b9e7..9cfcb252f18665bdc4049232f347960fb4f89012 100644
--- a/frontend/test/metabase/scenarios/question/settings.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/settings.cy.spec.js
@@ -3,9 +3,9 @@ import {
   restore,
   openOrdersTable,
   visitQuestionAdhoc,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 const { ORDERS, ORDERS_ID, PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
 describe("scenarios > question > settings", () => {
diff --git a/frontend/test/metabase/scenarios/question/trendline.cy.spec.js b/frontend/test/metabase/scenarios/question/trendline.cy.spec.js
index c95a6c756812c5a2c3b538203fbb07ea6611f5c6..54a937a4f61a9ddffffade79248bbe741e8b20ce 100644
--- a/frontend/test/metabase/scenarios/question/trendline.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/trendline.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, openOrdersTable, sidebar } from "__support__/cypress";
+import { restore, openOrdersTable, sidebar } from "__support__/e2e/cypress";
 
 describe("scenarios > question > trendline", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/question/view.cy.spec.js b/frontend/test/metabase/scenarios/question/view.cy.spec.js
index 0716fc3f31c6bd4149363a6771d1629028188d5b..a419669b2858f1df62aa19766a4b3a6fc7f5ec00 100644
--- a/frontend/test/metabase/scenarios/question/view.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/view.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, openOrdersTable, popover } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, openOrdersTable, popover } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PRODUCTS } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/reference/databases.cy.spec.js b/frontend/test/metabase/scenarios/reference/databases.cy.spec.js
index 4c8540b664d3dd2bcb16560a21b00e9bb1e2f443..f338dca4277d13561cb8e9254cc63fcc59e001f6 100644
--- a/frontend/test/metabase/scenarios/reference/databases.cy.spec.js
+++ b/frontend/test/metabase/scenarios/reference/databases.cy.spec.js
@@ -1,4 +1,4 @@
-import { popover, restore } from "__support__/cypress";
+import { popover, restore } from "__support__/e2e/cypress";
 
 describe("scenarios > reference > databases", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/reference/metrics.cy.spec.js b/frontend/test/metabase/scenarios/reference/metrics.cy.spec.js
index 3287eedfe6d25a93cd13fc354a3e5f330e352659..7eed3641e63273bb5a36e410e0b038e0b17f9ce1 100644
--- a/frontend/test/metabase/scenarios/reference/metrics.cy.spec.js
+++ b/frontend/test/metabase/scenarios/reference/metrics.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/setup/setup.cy.spec.js b/frontend/test/metabase/scenarios/setup/setup.cy.spec.js
index 2f87818e9f0b3aa405a0157dcf4a75bfec1fda3d..600a388deaab84656a6ff66c599fa13cfe1ebf75 100644
--- a/frontend/test/metabase/scenarios/setup/setup.cy.spec.js
+++ b/frontend/test/metabase/scenarios/setup/setup.cy.spec.js
@@ -1,5 +1,5 @@
 import path from "path";
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 // we're testing for one known (en) and one unknown (xx) locale
 const locales = ["en", "xx"];
diff --git a/frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js b/frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js
index 33496d118c289b87f602a88895c1c1a58f6e68d3..a8f94890c6c7ca1ac7078e3ad6d44d26e8015bd4 100644
--- a/frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js
+++ b/frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js
@@ -1,6 +1,6 @@
 // Migrated from frontend/test/metabase/user/UserSettings.integ.spec.js
-import { restore } from "__support__/cypress";
-import { USERS } from "__support__/cypress_data";
+import { restore } from "__support__/e2e/cypress";
+import { USERS } from "__support__/e2e/cypress_data";
 const { first_name, last_name, email } = USERS.normal;
 
 const CURRENT_USER = {
diff --git a/frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js b/frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js
index 60abe9b6beab21c917604c86acad7dbd51f24eeb..b607386b67d52b95fe378026f28afef5a8d1f898 100644
--- a/frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js
@@ -4,7 +4,7 @@ import {
   popover,
   sidebar,
   describeWithToken,
-} from "__support__/cypress";
+} from "__support__/e2e/cypress";
 
 describeWithToken("scenarios > question > snippets", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js b/frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js
index 6bb44006ccce1094bc51815dc7c3dc104af9105f..328cf381ad6d4bf71df626782eacd6e579f09354 100644
--- a/frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js
+++ b/frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal } from "__support__/cypress";
+import { restore, modal } from "__support__/e2e/cypress";
 
 // HACK which lets us type (even very long words) without losing focus
 // this is needed for fields where autocomplete suggestions are enabled
diff --git a/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js
index 49fdbcbd6613a06d13a9d0a97bf82e5559c7988e..f54b2b0cb9d5ae004d65ee58845c4c9047d53d88 100644
--- a/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, visitQuestionAdhoc } from "__support__/cypress";
+import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress";
 
 describe("scenarios > visualizations > bar chart", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/visualizations/drillthroughs/chart_drill.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/drillthroughs/chart_drill.cy.spec.js
index 3d17f02f57c09aa1f33f3f99e3fb75565e71ed85..73f086e33f8d7a970cd0c201dbd9d464a3f2d936 100644
--- a/frontend/test/metabase/scenarios/visualizations/drillthroughs/chart_drill.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/drillthroughs/chart_drill.cy.spec.js
@@ -5,9 +5,9 @@ import {
   popover,
   sidebar,
   visitQuestionAdhoc,
-} from "__support__/cypress";
-import { USER_GROUPS } from "__support__/cypress_data";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+} from "__support__/e2e/cypress";
+import { USER_GROUPS } from "__support__/e2e/cypress_data";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/visualizations/drillthroughs/dash_drill.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/drillthroughs/dash_drill.cy.spec.js
index 3c5ec25c1f8bfbd6c6644cf194418a54584511b1..907a2fddc42c7f91c8d8b92c1c93e36793efe8ab 100644
--- a/frontend/test/metabase/scenarios/visualizations/drillthroughs/dash_drill.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/drillthroughs/dash_drill.cy.spec.js
@@ -1,6 +1,6 @@
 // Imported from drillthroughs.e2e.spec.js
-import { restore } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS, PEOPLE, PEOPLE_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/visualizations/line_chart.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/line_chart.cy.spec.js
index 523fc65b36f3a0169b10ecb308735d8e55732982..bb5f2a20446da2c2440a097711bf622d3d3eea08 100644
--- a/frontend/test/metabase/scenarios/visualizations/line_chart.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/line_chart.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, visitQuestionAdhoc } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/visualizations/maps.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/maps.cy.spec.js
index 8f8cc257b357c9cdb626abb8f5b37417515a7d2a..c92102f25d2106298481d4cd201a0a267138af2c 100644
--- a/frontend/test/metabase/scenarios/visualizations/maps.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/maps.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, popover, visitQuestionAdhoc } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, popover, visitQuestionAdhoc } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PEOPLE, PEOPLE_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/visualizations/object_detail.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/object_detail.cy.spec.js
index 41990e7c50cc85ae5b4e71cd279c1eb49a0df363..43f95db744b611af5a3007d5ed4782d120a1cfc9 100644
--- a/frontend/test/metabase/scenarios/visualizations/object_detail.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/object_detail.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > visualizations > object detail", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/visualizations/pie_chart.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/pie_chart.cy.spec.js
index 22423ddfc04d2674b4589255f45f0cf161860fa8..9129901cb13dea4b9158db0cdf61724200226aad 100644
--- a/frontend/test/metabase/scenarios/visualizations/pie_chart.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/pie_chart.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, visitQuestionAdhoc } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/visualizations/pivot_tables.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/pivot_tables.cy.spec.js
index b67d376c73b23d7c887ed28d7d765acedab4e7ab..462b7dd26d4d06fb8d567b87184a8c9e6690f597 100644
--- a/frontend/test/metabase/scenarios/visualizations/pivot_tables.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/pivot_tables.cy.spec.js
@@ -4,8 +4,8 @@ import {
   getIframeBody,
   popover,
   sidebar,
-} from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+} from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const {
   ORDERS,
diff --git a/frontend/test/metabase/scenarios/visualizations/rows.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/rows.cy.spec.js
index 0feb41fe48884cc84dc87eb7bd805bbe373b8236..f7ba488901bbc1dc44e9caa35ca91735aab7ef04 100644
--- a/frontend/test/metabase/scenarios/visualizations/rows.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/rows.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/cypress";
+import { restore } from "__support__/e2e/cypress";
 
 describe("scenarios > visualizations > rows", () => {
   beforeEach(() => {
diff --git a/frontend/test/metabase/scenarios/visualizations/scatter.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/scatter.cy.spec.js
index 0de62c8ae1a3e3b598d4741b7f0c957e120a4926..f4e2897241657860830f8cb35a09d2f178d60011 100644
--- a/frontend/test/metabase/scenarios/visualizations/scatter.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/scatter.cy.spec.js
@@ -1,5 +1,5 @@
-import { restore, visitQuestionAdhoc, popover } from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+import { restore, visitQuestionAdhoc, popover } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS } = SAMPLE_DATASET;
 
diff --git a/frontend/test/metabase/scenarios/visualizations/waterfall.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/waterfall.cy.spec.js
index 995fa2f921deaf71422d5d001d7fc92779eeeb90..d282ff59e8551685844850050ff2fe4d990a8beb 100644
--- a/frontend/test/metabase/scenarios/visualizations/waterfall.cy.spec.js
+++ b/frontend/test/metabase/scenarios/visualizations/waterfall.cy.spec.js
@@ -2,8 +2,8 @@ import {
   openOrdersTable,
   restore,
   visitQuestionAdhoc,
-} from "__support__/cypress";
-import { SAMPLE_DATASET } from "__support__/cypress_sample_dataset";
+} from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID } = SAMPLE_DATASET;
 
diff --git a/frontend/test/snapshot-creators/default.cy.snap.js b/frontend/test/snapshot-creators/default.cy.snap.js
index 4b86c52eac4e86bef5d3dc925f71ed6b54ffa077..9d106baa0b8b708ffe5ac352d26ab11117df7264 100644
--- a/frontend/test/snapshot-creators/default.cy.snap.js
+++ b/frontend/test/snapshot-creators/default.cy.snap.js
@@ -1,6 +1,6 @@
 import _ from "underscore";
-import { snapshot, restore, withSampleDataset } from "__support__/cypress";
-import { USERS, USER_GROUPS } from "__support__/cypress_data";
+import { snapshot, restore, withSampleDataset } from "__support__/e2e/cypress";
+import { USERS, USER_GROUPS } from "__support__/e2e/cypress_data";
 
 const {
   ALL_USERS_GROUP,
@@ -22,7 +22,7 @@ describe("snapshots", () => {
       withSampleDataset(SAMPLE_DATASET => {
         createQuestionAndDashboard(SAMPLE_DATASET);
         cy.writeFile(
-          "frontend/test/__support__/cypress_sample_dataset.json",
+          "frontend/test/__support__/e2e/cypress_sample_dataset.json",
           SAMPLE_DATASET,
         );
       });
diff --git a/package.json b/package.json
index d378ab4b22bd9042ab782b72007925307da84a82..d05cacad6c2e7702ae36990d1dd88244d90e6adf 100644
--- a/package.json
+++ b/package.json
@@ -199,7 +199,7 @@
     "test-cypress": "yarn build && ./bin/build-for-test && yarn test-cypress-no-build && yarn test-cypress-smoketest",
     "test-cypress-open": "./bin/build-for-test && yarn test-cypress-no-build --open",
     "test-cypress-open-no-backend": "E2E_HOST='http://localhost:3000' yarn test-cypress-no-build --open",
-    "test-cypress-no-build": "yarn && CONFIG_FILE=frontend/test/cypress.json babel-node ./frontend/test/__runner__/run_cypress_tests.js",
+    "test-cypress-no-build": "yarn && CONFIG_FILE=frontend/test/__support__/e2e/cypress.json babel-node ./frontend/test/__runner__/run_cypress_tests.js",
     "test-cypress-smoketest": "yarn test-cypress-no-build --folder frontend/test/metabase-smoketest"
   },
   "lint-staged": {