Gitlab CI/CD: TypeScript/Cypress

Dieser Leitfaden demonstriert die Integration automatisierter Tests in Ihre GitLab CI/CD-Pipeline, speziell unter Verwendung von Typescript/Cypress. Die Schritte können jedoch für jedes Testautomatisierungstool oder -framework angepasst werden, um Ergebnisse an Aqua zu übermitteln.
Voraussetzungen
Ein GitLab-Projekt mit aktiviertem CI/CD
Ein aqua-Konto zum Einreichen von Testergebnissen
Aktualisieren der aqua-Testfallausführung basierend auf der Testfallausführung in GitLab
Generieren Sie ein neues Projekt in Ihrem Arbeitsbereich
Stellen Sie sicher, dass Node.js installiert ist.
Installieren Sie Cypress mit TypeScript: „npm install --save-dev typescript“, dadurch wird die folgende Struktur erstellt:

Schreibe einen Testfall in Cypress. Für dieses Demonstrationsbeispiel verwenden wir einen UI-Test, der die Website „https://example.cypress.io“ testet. Der folgende e2e-Test wird im Projektordner /Cypress/e2e/ erstellt:

Zum Zweck der Automatisierung nehmen wir an, dass der Testtitel auf der tatsächlichen aqua-Testfall-ID basiert: z.B. im obigen Fall haben wir den aqua-Testfall mit der ID=270 aktualisiert.
Nun müssen wir die aqua-Testfallausführung basierend auf dem Ergebnis des Cypress-Testlaufs aktualisieren. Um es allgemein und ausführbar für alle Fälle zu machen, fügen wir einen "AfterEach"-Hook-Block in die Support-Datei ein: .../cypress/support/e2e.ts:
import { EnvAquaRestConfig } from '../../aquaClient/envAquaRestConfig';
import { ApiTestExecutionNew, ApiTestStepExecutionStepType, ApiTestStepExecutionUpdateStatus, TestExecutionClient } from '../../aquaClient/src/api/aqua';
import './commands'
import fetch from "node-fetch";
// Alternatively you can use CommonJS syntax:
// require('./commands')
beforeEach (() => {
// before each test block
})
afterEach(async function () {
const restConfig = new EnvAquaRestConfig();
const client = new TestExecutionClient(restConfig.url, { fetch });
const testCaseId = Number(this.currentTest.title);
cy.log(Cypress.currentTest.title);
let stepStatus = ApiTestStepExecutionUpdateStatus.Pass;
if (this.currentTest.state === 'failed') {
stepStatus = ApiTestStepExecutionUpdateStatus.Failed;
} else if (this.currentTest.state != 'passed') {
throw new Error('no such status for test case execution');
}
const executionData = {
Guid: undefined,
TestCaseId: testCaseId,
TestCaseName: undefined,
Finalize: false,
ValueSetName: undefined,
TestScenarioInfo: undefined,
Steps: [
{
Index: 1,
Name: 'Step 1',
StepType: ApiTestStepExecutionStepType.Step,
Status: stepStatus,
},
],
TestedVersion: undefined,
ExecutionDuration: undefined,
AttachedLabels: undefined,
CustomFields: undefined,
Attachments: undefined
} as unknown as ApiTestExecutionNew;
await client.create([executionData]);
})
Für die obige API-Anfrage müssen wir den Ausführungsstatus des Testfalls von Cypress kennen. Dies wird durch „cy.currentTest.state“ erledigt.
Um aqua mit Testfall-Ausführungsinformationen zu aktualisieren, müssen wir auch die aqua-Testfall-ID angeben: Im obigen Beispiel wird die Testfall-ID von „Number(this.currentTest.title)“ extrahiert.
Klassen, die wir für API-Aufrufe verwenden, können aus dem JSON-Schema generiert werden, das hier verfügbar ist:
Nach erfolgreicher Ausführung des JUnit-Tests sollten wir die entsprechende einzelne Testfallausführung in aqua sehen.

Um das oben genannte Cypress-Projekt mit GitLab CI/CD ausführen zu können, müssen wir die entsprechende Workflow-Datei .gitlab-ci.yml erstellen. Ein einfaches Beispiel eines .gitlab-ci.yml-Skripts ist unten gezeigt:
stages:
- test
test:
image: cypress/browsers
stage: test
script:
# install dependencies
- npm ci
# run Cypress tests
- npx cypress run --browser chrome
Sobald ein GitLab-Test-Runner konfiguriert und mit Ihren GitLab-Projekten verbunden ist, können wir die GitLab-Pipeline mit dem obigen Workflow ausführen.

Link zum GitLab 👇
Last updated
Was this helpful?