Skip to content

Commit

Permalink
Spsh 960 tags teststeuerung (#50)
Browse files Browse the repository at this point in the history
* tags für Tests api, login, logoff, Menue

* Vergabe der tags fertig für alle Tests

* fix

* fix playwright.yml

* keyboard.press mit delay, da Tastaturbefehle manchmal verschluckt werden

* keyboard.press mit delay, da Tastaturbefehle manchmal verschluckt werden

* fix

* Doku erweitert

* Update Doku

* List Playwright tests and Run Playwright tests

* minor corrections in docs

---------

Co-authored-by: Salima Hassouni <[email protected]>
Co-authored-by: jaggarnaut <[email protected]>
  • Loading branch information
3 people authored Aug 28, 2024
1 parent 6d91852 commit 6f4dd18
Show file tree
Hide file tree
Showing 19 changed files with 140 additions and 40 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/manuell_staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: FRONTEND_URL='https://spsh.staging.spsh.dbildungsplattform.de/' npx playwright test
run: FRONTEND_URL='https://spsh.staging.spsh.dbildungsplattform.de/' npx playwright test -g "@stage"
env:
USER: '${{ secrets.USER }}'
PW: '${{ secrets.PW }}'
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,12 @@ jobs:
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps

- name: List Playwright tests
run: npx playwright test --list --grep "@short"
- name: Run Playwright tests
run: npx playwright test
run: npx playwright test --config=playwright.config.ts --grep "@short"

env:
USER: '${{ secrets.USER }}'
PW: '${{ secrets.PW }}'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/schedule_dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: FRONTEND_URL='https://main.dev.spsh.dbildungsplattform.de/' npx playwright test
run: FRONTEND_URL='https://main.dev.spsh.dbildungsplattform.de/' npx playwright test -g "@long"
env:
USER: '${{ secrets.USER }}'
PW: '${{ secrets.PW }}'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/schedule_staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: FRONTEND_URL='https://spsh.staging.spsh.dbildungsplattform.de/' npx playwright test -g "Erfolgreicher Standard Login"
run: FRONTEND_URL='https://spsh.staging.spsh.dbildungsplattform.de/' npx playwright test -g "@smoke"
env:
USER: '${{ secrets.USER }}'
PW: '${{ secrets.PW }}'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/schedule_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: FRONTEND_URL='https://test.dev.spsh.dbildungsplattform.de/' npx playwright test -g "Erfolgreicher Standard Login"
run: FRONTEND_URL='https://test.dev.spsh.dbildungsplattform.de/' npx playwright test -g "@smoke"
env:
USER: '${{ secrets.USER }}'
PW: '${{ secrets.PW }}'
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ npm run lint

## Testdatenerstellung durch die Playwright-Tests

Neue Testdaten, die während der Testausführung erstellt werden, haben den Prefix 'TAuto-PW-', gefolgt von einem Buchstaben für den Typ des Objekts + einen Zufallswert aus faker oder einem festen Wert. Der Name einer Rolle ist z.B. TAuto-PW-R-xxxxxxxxx. Somit ist es einfacher, die Testdaten zu erkennen, die durch die Playwright-Tests erstellt wurden.
Neue Testdaten, die während der Testausführung erstellt werden, haben den Prefix 'TAuto-PW-', gefolgt von einem Buchstaben für den Typ des Objekts + einen Zufallswert
aus faker oder einem festen Wert. Der Name einer Rolle ist z.B. TAuto-PW-R-xxxxxxxxx. Somit ist es einfacher, die Testdaten zu erkennen, die durch die Playwright-Tests erstellt wurden.

## Hinweise für die Entwicklung der Tests

Expand All @@ -79,3 +80,15 @@ test.only('2 Schulen nacheinander anlegen', async ({ page }) => {
## Entwicklungsumgebung

Empfohlen wird VS-Code

## Definition Testsuiten
### smoke
Dieses ist die kleinste Testsuite. Hiermit wird nur getestet, dass das Portal erfolgreich deployed wurde und die wichtigsten Komponenten lauffähig sind.
Getestet wird dieses durch einen Login-Test, der nach der Anmeldung prüft, dass die Kachel "Schulportal-Administration" angezeigt wird
### short
Die Testsuite läuft auf den Branch-Umgebungen und sollte eine Laufzeit von 5 Minuten nicht überschreiten. Für die Testuite werden die Testfälle mit der höchsten Priorität ausgewählt.
### long
Die Testsuite enthält alle funktionalen Tests.
### stage
Die Testsuite hat einen ähnlichen Umfang wie die Testsuite long. Auf der stage werden aber nicht die Testfälle ausgeführt, die aufgrund noch nicht implementierter Funktionen (wie z.B. Schulen löschen) Testdaten hinterlassen.
Desweiteren gibt es auf der Stage-Umgebung Schnittstellen wie z.B. itslearning, die nur da laufen bzw. eine Anbindung an das Testsystem von itslearning haben. Diese Testfälle können dann auch nur auf stage laufen.
17 changes: 17 additions & 0 deletions docs/actions-github.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Ausführung der Tests durch Actions in github
Alle Actions können jederzeit manuell getriggert werden. Hierzu die entsprechende action auswählen. Dann auf den Button "Run workflow" klicken.

## Action "Manuell alle Tests(staging)"
Diese Action kann nur manuell ausgelöst werden und enthält die Testsuite "stage"

## Action "Playwright Tests"
Die Action wird beim Deployment auf den Branch-Umgebungen automatisch ausgelöst und enthält die Testsuite "short"

## Action "Scheduled Playwright Alle Tests(main)"
Die Action wird jeden Morgen zu einer bestimmten Uhrzeit zeitgesteuert ausgelöst und enthält die Testsuite "long"

## Action "Scheduled Playwright Smoketest(staging)"
Die Action wird jeden Morgen zu einer bestimmten Uhrzeit zeitgesteuert ausgelöst und enthält die Testsuite "smoke"

## Action "Scheduled Playwright Smoketest(test.dev)"
Die Action wird jeden Morgen zu einer bestimmten Uhrzeit zeitgesteuert ausgelöst und enthält die Testsuite "smoke"
18 changes: 18 additions & 0 deletions docs/tags-testcases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Erläuterung
## Die Tags/Kategorien dienen dazu, die Tests für die unterschiedlichen Umgebungen/Pipelines auszuwählen.
Somit ist sichergestellt, dass nicht immer alle Tests auf allen Umgebungen laufen.
Die tags werden in dem Testtitel am Ende gestellt. Jeder Testfall muss laut Konvention mindestens einen tag haben.
Für die Teststeuerung werden die tags in der Ausführungszeile ind der .yml Datei angegeben.
### Beispiel: FRONTEND_URL='https://test.dev.spsh.dbildungsplattform.de/' npx playwright test -g "@smoke"

## Mögliche tags per Konvention(Definition Testsuiten siehe README.md)
### @smoke
### @short
### @long
### @stage

### In Planung
#### @prod: Testsuite für Produktion (relevant für manuelles triggern nach Prod-Deployment)
#### @mobile: Testsuite für Mobiletests (relevant für main.dev, schedule täglich)
#### @browse: Testsuite für Browsertests (relevant relevant für main.dev, schedule täglich)
#### @bitv: Testsuite für Barrierefreiheitstests (relevant für main.dev, schedule täglich)
50 changes: 50 additions & 0 deletions docs/testcases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Testfälle(Testname)
## api-spec.ts
### GET und Post request Personen und Benutzer anschließend über das FE löschen @long @short @stage

## Klasse-spec.ts
## Eine Klasse als Landesadmin anlegen und die Klasse anschließend in der Ergebnisliste suchen und dann löschen @long @short @stage
## Ergebnisliste Klassen als Landesadmin auf Vollständigkeit prüfen @long @short @stage
## Eine Klasse als Landesadmin anlegen und die Bestätigungsseite vollständig prüfen @long @stage

## login-spec.ts
### Erfolgreicher Standard Login Landesadmin @long @stage @smoke
### Erfolgloser Login mit falschem Passwort und gültigem Benutzernamen in der Rolle Landesadmin @long @short @stage

## logoff-spec.ts
## Erfolgreicher Standard Logoff als Landesadmin @long @short @stage

## MenuBar-spec.ts
## Test der Hauptmenue-Leiste und Untermenues auf Vollständigkeit @long @short @stage
## Test der Funktion "Zurueck zur Startseite" @long @short @stage

## Person-spec.ts
## Einen Benutzer mit der Rolle Lehrkraft anlegen als Landesadmin und anschließend mit diesem Benutzer anmelden @long @short @stage
## Einen Benutzer mit der Rolle Landesadmin anlegen @long @stage
## Einen Benutzer mit der Rolle LiV anlegen als Landesadmin @long @stage
## Einen Benutzer mit der Rolle Schuladmin anlegen als Landesadmin @long @short @stage
## Einen Benutzer mit der Rolle SuS anlegen als Landesadmin @long @short @stage
## Ergebnisliste Benutzer auf Vollständigkeit prüfen als Landesadmin @long @short @stage
## Prüfung auf korrekte Rollen in dem Dropdown 'Rolle' nach Auswahl der Organisation bei Anlage eines Benutzer in der Rolle Landesadmin @long @short @stage
## In der Ergebnisliste die Suchfunktion ausführen als Landesadmin @long @short @stage
## Eine Lehrkraft anlegen in der Rolle Landesadmin und die Bestätigungsseite vollständig prüfen @long @short @stage
## Mehrere Benutzer hintereinander anlegen in der Rolle Landesadmin für die Rollenarten SuS und LEHR und die Bestätigungsseiten vollständig prüfen @long @stage

## Rolle-spec.ts
## 2 Rollen nacheinander anlegen mit Rollenarten LERN und LEHR als Landesadmin @long @short @stage
## Ergebnisliste Rollen auf Vollständigkeit prüfen als Landesadmin @long @short @stage
## Eine Rolle anlegen und die Bestätigungsseite vollständig prüfen als Landesadmin @long @short @stage

## Schule-spec.ts
## 2 Schulen nacheinander anlegen als Landesadmin @long
## Ergebnisliste Schulen auf Vollständigkeit prüfen als Landesadmin @long @short @stage
## Eine Schule anlegen als Schuladmin und die Bestätigungsseite vollständig prüfen @long @short

## SchulportalAdministration-spec.ts
## Prüfen, dass die Schulportal-Administration Kachel nicht sichtbar ist für Lehrkräfte @long @stage
## Prüfen, dass die Schulportal-Administration Kachel nicht sichtbar ist für Schüler @long @short @stage
## Prüfen, dass die Schulportal-Administration Kachel sichtbar ist für Schuladmins @long @stage

## workflow-spec.ts
## Angebote per Link öffnen als Landesadmin @long @short @stage
## Passwort Reset für einen Lehrer als Landesadmin @long @short @stage
6 changes: 3 additions & 3 deletions tests/Klasse.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce
});
});

test("Eine Klasse anlegen und die Klasse anschließend in der Ergebnisliste suchen und dann löschen", async ({ page }) => {
test("Eine Klasse als Landesadmin anlegen und die Klasse anschließend in der Ergebnisliste suchen und dann löschen @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const KlasseCreationView = new KlasseCreationViewPage(page);
Expand Down Expand Up @@ -73,7 +73,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce
});
});

test("Ergebnisliste Klassen auf Vollständigkeit prüfen", async ({ page }) => {
test("Ergebnisliste Klassen als Landesadmin auf Vollständigkeit prüfen @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const KlasseManagementView = new KlasseManagementViewPage(page);
Expand All @@ -90,7 +90,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce
});
});

test("Eine Klasse anlegen und die Bestätigungsseite vollständig prüfen", async ({ page }) => {
test("Eine Klasse als Landesadmin anlegen und die Bestätigungsseite vollständig prüfen @long @stage", async ({ page }) => {
const KlasseCreationView = new KlasseCreationViewPage(page);
const DIENSTSTELLENNUMMER = '1111111';
const SCHULNAME = "Testschule Schulportal";
Expand Down
4 changes: 2 additions & 2 deletions tests/MenuBar.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ test.describe(`Testfälle für die Hauptmenue-Leiste: Umgebung: ${process.env.UM
});
});

test('Test der Hauptmenue-Leiste und Untermenues auf Vollständigkeit', async ({ page }) => {
test('Test der Hauptmenue-Leiste und Untermenues auf Vollständigkeit @long @short @stage', async ({ page }) => {
const Startseite = new StartPage(page)
const MenuBar = new MenuPage(page);

Expand All @@ -50,7 +50,7 @@ test.describe(`Testfälle für die Hauptmenue-Leiste: Umgebung: ${process.env.UM
})
})

test('Test der Funktion "Zurueck zur Startseite"', async ({ page }) => {
test('Test der Funktion "Zurueck zur Startseite" @long @short @stage', async ({ page }) => {
const Startseite = new StartPage(page)
const MenuBar = new MenuPage(page);

Expand Down
24 changes: 11 additions & 13 deletions tests/Person.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Einen Benutzer mit der Rolle Lehrkraft anlegen und anschließend mit diesem Benutzer anmelden", async ({
test("Einen Benutzer mit der Rolle Lehrkraft anlegen als Landesadmin und anschließend mit diesem Benutzer anmelden @long @short @stage", async ({
page,
}) => {
const Landing = new LandingPage(page);
Expand Down Expand Up @@ -109,7 +109,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Einen Benutzer mit der Rolle Landesadmin anlegen", async ({ page }) => {
test("Einen Benutzer mit der Rolle Landesadmin anlegen @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonCreationView = new PersonCreationViewPage(page);
Expand All @@ -123,9 +123,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
await test.step(`Dialog Person anlegen öffnen`, async () => {
await Startseite.card_item_schulportal_administration.click();
await Menue.menueItem_BenutzerAnlegen.click();
await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText(
"Neuen Benutzer hinzufügen"
);
await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen");
});

await test.step(`Benutzer anlegen`, async () => {
Expand Down Expand Up @@ -154,7 +152,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Einen Benutzer mit der Rolle LiV anlegen", async ({ page }) => {
test("Einen Benutzer mit der Rolle LiV anlegen als Landesadmin @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonCreationView = new PersonCreationViewPage(page);
Expand Down Expand Up @@ -197,7 +195,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Einen Benutzer mit der Rolle Schuladmin anlegen", async ({ page }) => {
test("Einen Benutzer mit der Rolle Schuladmin anlegen als Landesadmin @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonCreationView = new PersonCreationViewPage(page);
Expand Down Expand Up @@ -240,7 +238,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Einen Benutzer mit der Rolle SuS anlegen", async ({ page }) => {
test("Einen Benutzer mit der Rolle SuS anlegen als Landesadmin @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonCreationView = new PersonCreationViewPage(page);
Expand Down Expand Up @@ -286,7 +284,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Ergebnisliste Benutzer auf Vollständigkeit prüfen", async ({page }) => {
test("Ergebnisliste Benutzer auf Vollständigkeit prüfen als Landesadmin @long @short @stage", async ({page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonManagementView = new PersonManagementViewPage(page);
Expand All @@ -309,7 +307,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Prüfung auf korrekte Rollen in dem Dropdown 'Rolle' nach Auswahl der Organisation bei Anlage eines Benutzer", async ({page}) => {
test("Prüfung auf korrekte Rollen in dem Dropdown 'Rolle' nach Auswahl der Organisation bei Anlage eines Benutzer in der Rolle Landesadmin @long @short @stage", async ({page}) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const PersonCreationView = new PersonCreationViewPage(page);
Expand Down Expand Up @@ -379,7 +377,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("In der Ergebnisliste die Suchfunktion ausführen", async ({ page }) => {
test("In der Ergebnisliste die Suchfunktion ausführen als Landesadmin @long @short @stage", async ({ page }) => {
const PersonManagementView = new PersonManagementViewPage(page);
const PersonCreationView = new PersonCreationViewPage(page);

Expand Down Expand Up @@ -446,7 +444,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Eine Lehrkraft anlegen in der Rolle Landesadmin und die Bestätigungsseite vollständig prüfen", async ({ page }) => {
test("Eine Lehrkraft anlegen in der Rolle Landesadmin und die Bestätigungsseite vollständig prüfen @long @short @stage", async ({ page }) => {
const PersonCreationView = new PersonCreationViewPage(page);
const Rolle = "Lehrkraft";
const Vorname = "TAuto-PW-V-" + faker.person.firstName();
Expand Down Expand Up @@ -499,7 +497,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
});
});

test("Mehere Benutzer hintereinander anlegen in der Rolle Landesadmin für die Rollenarten SuS und LEHR und die Bestätigungsseiten vollständig prüfen", async ({ page }) => {
test("Mehere Benutzer hintereinander anlegen in der Rolle Landesadmin für die Rollenarten SuS und LEHR und die Bestätigungsseiten vollständig prüfen @long @short @stage", async ({ page }) => {
const Landing = new LandingPage(page);
const Startseite = new StartPage(page);
const Login = new LoginPage(page);
Expand Down
6 changes: 3 additions & 3 deletions tests/Rolle.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces
});
});

test("2 Rollen nacheinander anlegen mit Rollenarten LERN und LEHR", async ({ page }) => {
test("2 Rollen nacheinander anlegen mit Rollenarten LERN und LEHR als Landesadmin @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const RolleCreationView = new RolleCreationViewPage(page);
Expand Down Expand Up @@ -103,7 +103,7 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces
});
});

test("Ergebnisliste Rollen auf Vollständigkeit prüfen", async ({ page }) => {
test("Ergebnisliste Rollen auf Vollständigkeit prüfen als Landesadmin @long @short @stage", async ({ page }) => {
const Startseite = new StartPage(page);
const Menue = new MenuPage(page);
const RolleManagementView = new RolleManagementViewPage(page);
Expand All @@ -120,7 +120,7 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces
});
});

test("Eine Rolle anlegen und die Bestätigungsseite vollständig prüfen ", async ({ page }) => {
test("Eine Rolle anlegen und die Bestätigungsseite vollständig prüfen als Landesadmin @long @short @stage", async ({ page }) => {
const RolleCreationView = new RolleCreationViewPage(page);
const ROLLENNAME = "TAuto-PW-R-" + faker.lorem.word({ length: { min: 8, max: 12 } });
const DIENSTSTELLENNUMMER = '1111111';
Expand Down
Loading

0 comments on commit 6f4dd18

Please sign in to comment.