From 02a4f1630c91df94a577ae5219466ddb3f6047f4 Mon Sep 17 00:00:00 2001 From: Tasko Olevski Date: Wed, 10 Apr 2024 10:15:21 +0200 Subject: [PATCH] chore: run cypress tests in parallel (#3579) --- .github/workflows/pull-request-test.yml | 1 - cypress-tests/cypress/e2e/checkWorkflows.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/privateProject.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/publicProject.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/rstudioSession.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/testDatasets.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/updateProjects.cy.ts | 8 +++++--- cypress-tests/cypress/e2e/useSession.cy.ts | 8 +++++--- cypress-tests/cypress/support/commands/general.ts | 4 ++++ 9 files changed, 39 insertions(+), 22 deletions(-) diff --git a/.github/workflows/pull-request-test.yml b/.github/workflows/pull-request-test.yml index c9e0412456..54fc503430 100644 --- a/.github/workflows/pull-request-test.yml +++ b/.github/workflows/pull-request-test.yml @@ -135,7 +135,6 @@ jobs: strategy: fail-fast: false - max-parallel: 1 matrix: tests: [ diff --git a/cypress-tests/cypress/e2e/checkWorkflows.cy.ts b/cypress-tests/cypress/e2e/checkWorkflows.cy.ts index d649064d2f..52e3be86b4 100644 --- a/cypress-tests/cypress/e2e/checkWorkflows.cy.ts +++ b/cypress-tests/cypress/e2e/checkWorkflows.cy.ts @@ -1,17 +1,19 @@ import { TIMEOUTS } from "../../config"; import { ProjectIdentifier } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; const project: ProjectIdentifier = { namespace: "renku-ui-tests", name: "composite-workflows", }; +const sessionId = ["checkWorkflows", getRandomString()]; + describe("Workflows pages", () => { before(() => { // Use a session to preserve login data cy.session( - "login-updateProjects", + sessionId, () => { cy.robustLogin(); }, @@ -22,7 +24,7 @@ describe("Workflows pages", () => { beforeEach(() => { // Restore the session cy.session( - "login-updateProjects", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/privateProject.cy.ts b/cypress-tests/cypress/e2e/privateProject.cy.ts index adb7a4d0e9..d089cda3a0 100644 --- a/cypress-tests/cypress/e2e/privateProject.cy.ts +++ b/cypress-tests/cypress/e2e/privateProject.cy.ts @@ -3,7 +3,7 @@ import { ProjectIdentifier, generatorProjectName, } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; const username = Cypress.env("TEST_USERNAME"); @@ -21,11 +21,13 @@ const projectIdentifier: ProjectIdentifier = { namespace: username, }; +const sessionId = ["privateProject", getRandomString()]; + describe("Basic public project functionality", () => { before(() => { // Use a session to preserve login data cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, @@ -46,7 +48,7 @@ describe("Basic public project functionality", () => { beforeEach(() => { // Restore the session cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/publicProject.cy.ts b/cypress-tests/cypress/e2e/publicProject.cy.ts index b74831d35f..1da4d1bc8a 100644 --- a/cypress-tests/cypress/e2e/publicProject.cy.ts +++ b/cypress-tests/cypress/e2e/publicProject.cy.ts @@ -4,7 +4,7 @@ import { generatorProjectName, projectUrlFromIdentifier, } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; const username = Cypress.env("TEST_USERNAME"); @@ -22,11 +22,13 @@ const projectIdentifier: ProjectIdentifier = { namespace: username, }; +const sessionId = ["publicProject", getRandomString()]; + describe("Basic public project functionality", () => { before(() => { // Use a session to preserve login data cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, @@ -43,7 +45,7 @@ describe("Basic public project functionality", () => { beforeEach(() => { // Restore the session cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/rstudioSession.cy.ts b/cypress-tests/cypress/e2e/rstudioSession.cy.ts index 00a5fa12b9..9c5d5d08de 100644 --- a/cypress-tests/cypress/e2e/rstudioSession.cy.ts +++ b/cypress-tests/cypress/e2e/rstudioSession.cy.ts @@ -5,7 +5,7 @@ import { ProjectIdentifier, generatorProjectName, } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; const username = Cypress.env("TEST_USERNAME"); @@ -23,11 +23,13 @@ const projectIdentifier: ProjectIdentifier = { namespace: username, }; +const sessionId = ["rstudioSession", getRandomString()]; + describe("Basic rstudio functionality", () => { before(() => { // Use a session to preserve login data cy.session( - "login-rstudioSession", + sessionId, () => { cy.robustLogin(); }, @@ -49,7 +51,7 @@ describe("Basic rstudio functionality", () => { beforeEach(() => { // Restore the session cy.session( - "login-rstudioSession", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/testDatasets.cy.ts b/cypress-tests/cypress/e2e/testDatasets.cy.ts index 794e50a310..66dbfa4042 100644 --- a/cypress-tests/cypress/e2e/testDatasets.cy.ts +++ b/cypress-tests/cypress/e2e/testDatasets.cy.ts @@ -3,7 +3,7 @@ import { ProjectIdentifier, generatorProjectName, } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; import { generatorDatasetName } from "../support/commands/datasets"; const username = Cypress.env("TEST_USERNAME"); @@ -23,11 +23,13 @@ const projectIdentifier: ProjectIdentifier = { }; const generatedDatasetName = generatorDatasetName("Dataset"); +const sessionId = ["testDatasets", getRandomString()]; + describe("Basic datasets functionality", () => { before(() => { // Use a session to preserve login data cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, @@ -49,7 +51,7 @@ describe("Basic datasets functionality", () => { beforeEach(() => { // Restore the session cy.session( - "login-publicProject", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/updateProjects.cy.ts b/cypress-tests/cypress/e2e/updateProjects.cy.ts index 66afe4b8d5..1af511ae9c 100644 --- a/cypress-tests/cypress/e2e/updateProjects.cy.ts +++ b/cypress-tests/cypress/e2e/updateProjects.cy.ts @@ -1,5 +1,5 @@ import { TIMEOUTS } from "../../config"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; import { generatorProjectName } from "../support/commands/projects"; const username = Cypress.env("TEST_USERNAME"); @@ -18,11 +18,13 @@ const projects = { // projects.v8 = "anotherProjectV8"; // projects.v9 = "anotherProjectV9"; +const sessionId = ["updateProjects", getRandomString()]; + describe("Fork and update old projects", () => { before(() => { // Use a session to preserve login data cy.session( - "login-updateProjects", + sessionId, () => { cy.robustLogin(); }, @@ -33,7 +35,7 @@ describe("Fork and update old projects", () => { beforeEach(() => { // Restore the session cy.session( - "login-updateProjects", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/e2e/useSession.cy.ts b/cypress-tests/cypress/e2e/useSession.cy.ts index 95e129199a..f0fbc933c8 100644 --- a/cypress-tests/cypress/e2e/useSession.cy.ts +++ b/cypress-tests/cypress/e2e/useSession.cy.ts @@ -1,6 +1,6 @@ import { TIMEOUTS } from "../../config"; import { generatorProjectName } from "../support/commands/projects"; -import { validateLogin } from "../support/commands/general"; +import { validateLogin, getRandomString } from "../support/commands/general"; import { v4 as uuidv4 } from "uuid"; const username = Cypress.env("TEST_USERNAME"); @@ -24,11 +24,13 @@ const projectWithoutPermissions = { name: "stable-project", }; +const sessionId = ["useSession", getRandomString()]; + describe("Basic public project functionality", () => { before(() => { // Use a session to preserve login data cy.session( - "login-useSession", + sessionId, () => { cy.robustLogin(); }, @@ -50,7 +52,7 @@ describe("Basic public project functionality", () => { beforeEach(() => { // Restore the session cy.session( - "login-useSession", + sessionId, () => { cy.robustLogin(); }, diff --git a/cypress-tests/cypress/support/commands/general.ts b/cypress-tests/cypress/support/commands/general.ts index 9876970640..6801d7ff60 100644 --- a/cypress-tests/cypress/support/commands/general.ts +++ b/cypress-tests/cypress/support/commands/general.ts @@ -24,6 +24,10 @@ function getDataCy(value: string, exist?: boolean) { return cy.get(`[data-cy=${value}]`); } +export function getRandomString(length: number=8) { + return Math.random().toString(20).substr(2, length) +} + export default function registerGeneralCommands() { Cypress.Commands.add("getIframe", getIframe); Cypress.Commands.add("getDataCy", getDataCy);