Powrót do: Praktyczne wprowadzenie do testów automatycznych z Playwright
Wzorzec AAA: Arrange Act Assert
TIP: Ta lekcja jest częścią rozwijanego Programu Testy Automatyczne z Playwright 🎭
Dodatkowe materiały
TIP: Od tej lekcji używamy kontroli wersji Git. Sugerujemy 2 opcje:
- Kontynuuj jeśli: masz narzędzie Git na swojej maszynie i rozumiesz podstawowe koncepty.
- Uzupełnij wiedzę ze specjalnego bonusu: Wersjonowanie projektu z Git
TIP: W tej lekcji jesteśmy po aktualizacji Playwright.
Jak taka aktualizacja wygląda? Sprawdź bonus: Aktualizacja paczki playwright i przeglądarek
Kod do tej lekcji znajduje się tu: Sekcja 02, Lekcja 02
Pamiętaj, aby po każdej większej modyfikacji uruchamiać testy 😉
Wydzielenie danych testowych
W pierwszym teście login.spec.ts wyciągamy wartości do osobnych zmiennych:
test("successful login with correct credentials", async ({ page }) => {
const url = "https://demo-bank.vercel.app/";
const userId = "testerLO";
const userPassword = "10987654";
await page.goto(url);
await page.getByTestId("login-input").fill(userId);
await page.getByTestId("password-input").fill(userPassword);
await page.getByTestId("login-button").click();
await expect(page.getByTestId("user-name")).toHaveText("Jan Demobankowy");
});
Można taką akcję zrealizować za pomocą:
- Kliknięcia w dane string.
- Użycia skrótu klawiszowego Ctrl+Shift+R.
- Wybierz pierwsza opcję naciskając Enter.
- Nazwij zmienną.
Wyciągnięcie danych z asercji
test("successful login with correct credentials", async ({ page }) => {
const url = "https://demo-bank.vercel.app/";
const userId = "testerLO";
const userPassword = "10987654";
const expectedUserName = "Jan Demobankowy";
await page.goto(url);
await page.getByTestId("login-input").fill(userId);
await page.getByTestId("password-input").fill(userPassword);
await page.getByTestId("login-button").click();
await expect(page.getByTestId("user-name")).toHaveText(expectedUserName);
});
Wzorzec AAA
Wzorzec AAA opiera się na podziale testu na 3 etapy:
- Arrange: przygotowanie danych testowych.
- Act: wykonanie akcji testowych.
- Assert: zweryfikowanie oczekiwanych rezultatów.
Wyróżnienie AAA w teście
Wystarczy dodać odpowiednie komentarze jeśli test jest jasno podzielony.
test("successful login with correct credentials", async ({ page }) => {
// Arrange
const url = "https://demo-bank.vercel.app/";
const userId = "testerLO";
const userPassword = "10987654";
const expectedUserName = "Jan Demobankowy";
// Act
await page.goto(url);
await page.getByTestId("login-input").fill(userId);
await page.getByTestId("password-input").fill(userPassword);
await page.getByTestId("login-button").click();
// Assert
await expect(page.getByTestId("user-name")).toHaveText(expectedUserName);
});
AAA w pierwszym teście pulpitu
Wydzielenie danych testowych i opis poszczególnych bloków AAA:
test("quick payment with correct data", async ({ page }) => {
// Arrange
const url = "https://demo-bank.vercel.app/";
const userId = "testerLO";
const userPassword = "10987654";
const receiverId = "2";
const transferAmount = "150";
const transferTitle = "pizza";
// Act
await page.goto(url);
await page.getByTestId("login-input").fill(userId);
await page.getByTestId("password-input").fill(userPassword);
await page.getByTestId("login-button").click();
await page.locator("#widget_1_transfer_receiver").selectOption(receiverId);
await page.locator("#widget_1_transfer_amount").fill(transferAmount);
await page.locator("#widget_1_transfer_title").fill(transferTitle);
await page.getByRole("button", { name: "wykonaj" }).click();
await page.getByTestId("close-button").click();
// Assert
await expect(page.locator("#show_messages")).toHaveText(
"Przelew wykonany! Chuck Demobankowy - 150,00PLN - pizza"
);
});
Użycie danych w asercji:
test("quick payment with correct data", async ({ page }) => {
// Arrange
const url = "https://demo-bank.vercel.app/";
const userId = "testerLO";
const userPassword = "10987654";
const receiverId = "2";
const transferAmount = "150";
const transferTitle = "pizza";
const expectedTransferReceiver = "Chuck Demobankowy";
// Act
await page.goto(url);
await page.getByTestId("login-input").fill(userId);
await page.getByTestId("password-input").fill(userPassword);
await page.getByTestId("login-button").click();
await page.locator("#widget_1_transfer_receiver").selectOption(receiverId);
await page.locator("#widget_1_transfer_amount").fill(transferAmount);
await page.locator("#widget_1_transfer_title").fill(transferTitle);
await page.getByRole("button", { name: "wykonaj" }).click();
await page.getByTestId("close-button").click();
// Assert
await expect(page.locator("#show_messages")).toHaveText(
`Przelew wykonany! ${expectedTransferReceiver} - ${transferAmount},00PLN - ${transferTitle}`
);
});
TIP: Dzięki takiej konstrukcji łatwo zmienisz dane testowe jednocześnie aktualizując asercję!

Cześć, gdzie zmienić w VSC że kod z nagrywania za pomocą PW będzie korzystał z ‘ zamiast ” przy selektorach itd…?
Tutaj należy zainstalować narzędzie ‘Prettier’:
A następnie dodać pliki konfiguracyjne:
.prettierignorew nim:
i
.prettierrc.jsonw nim np:
{ "singleQuote": true }W ten sposób powinieneś dostawać jedno formatowanie wszędzie.
https://jaktestowac.pl/lesson/pw1sb01l06/
W powyższej lekcji pokazuje najprostszą konfigurację Prettier.
Jak będziesz miał więcej pytań zapraszam!
Pozdro i miłej nauki😉