Integracja z bazą danych MSSQL w testach automatycznych pozwala na dokładne testowanie aplikacji z użyciem rzeczywistych danych. Testy bazodanowe odgrywają istotną rolę w procesie tworzenia i utrzymania aplikacji, szczególnie tych, które gromadzą i przetwarzają duże ilości danych.
Umożliwiają one walidację poprawności danych, testowanie różnych scenariuszy użytkowania oraz zapewniają, że aplikacja działa zgodnie z oczekiwaniami. W kontekście aplikacji low-code, które zyskują na popularności ze względu na swoją dostępność i szybkość tworzenia, testy bazodanowe są nie mniej istotne. Gwarantują, że automatyzowane procesy i generowane interfejsy użytkownika są w pełni funkcjonalne i niezawodne.
Konfiguracja środowiska
- Instalacja Playwright: Upewnij się, że masz zainstalowany Playwright. Możesz to zrobić za pomocą npm:
npm install @playwright/test
- Instalacja sterownika MSSQL: Aby połączyć się z bazą danych MSSQL, potrzebny jest odpowiedni sterownik. Możesz zainstalować mssql za pomocą npm:
npm install mssql
- Konfiguracja połączenia z bazą danych MSSQL: Utwórz konfigurację połączenia z bazą danych w pliku testowym. Oto przykład konfiguracji:
const sql = require('mssql');
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'dbname',
options: {
encrypt: true, // jeśli używasz Azure
trustServerCertificate: true // ustawić na true, jeśli używasz certyfikatów samopodpisanych
}
};
async function connectToDatabase() {
try {
await sql.connect(config);
console.log('Połączono z bazą danych MSSQL');
} catch (err) {
console.error('Błąd połączenia z bazą danych MSSQL:', err);
}
}
connectToDatabase();
Pisanie testów z Playwright i MSSQL
Po skonfigurowaniu połączenia z bazą danych MSSQL, możesz pisać testy automatyczne, które będą korzystać z tej bazy. Oto przykład testu, który sprawdza, czy dane wprowadzone w formularzu są prawidłowo przechowywane w bazie danych:
const { test, expect } = require('@playwright/test');
const sql = require('mssql');
test('Form data is saved to the database', async ({ page }) => {
// Połącz z bazą danych
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'dbname',
options: {
encrypt: true,
trustServerCertificate: true
}
};
await sql.connect(config);
// Przejdź do strony z formularzem
await page.goto('http://localhost:3000/form');
// Wypełnij formularz i prześlij
await page.fill('#name', 'John Doe');
await page.fill('#email', 'john.doe@example.com');
await page.click('#submit');
// Sprawdź, czy dane są przechowywane w bazie
const result = await sql.query(`SELECT * FROM users WHERE email = ${'john.doe@example.com'})`;
expect(result.recordset[0].name).toBe('John Doe');
// Zamknij połączenie z bazą danych
await sql.close();
});

Dobre praktyki w testach bazodanowych
- Izolacja testów: Upewnij się, że każdy test jest izolowany od pozostałych, aby wyniki jednego testu nie wpływały na wyniki innych. Możesz to osiągnąć, używając rollbacków lub przez resetowanie stanu bazy danych po każdym teście.
- Używanie mocków i stubów: W sytuacjach, gdy testowanie na prawdziwej bazie danych nie jest możliwe, możesz używać mocków i stubów do symulowania połączeń z bazą danych. Jest to szczególnie przydatne w testach jednostkowych.
- Automatyzacja przygotowania danych: Stwórz skrypty do automatycznego przygotowania danych testowych przed uruchomieniem testów. Zapewni to powtarzalność i niezależność testów od rzeczywistych danych.
- Monitoring i logowanie: Dodaj mechanizmy logowania, aby śledzić działania testów oraz diagnozować ewentualne problemy. Umożliwi to szybkie reagowanie na błędy i usprawnienie procesu testowania.
- Testowanie bardziej skomplikowanych zapytań i procedur: Playwright w połączeniu z MSSQL pozwala na testowanie złożonych zapytań SQL oraz procedur składowanych. Oto przykład, jak można to zrobić:
const { test, expect } = require('@playwright/test');
const sql = require('mssql');
test('Stored procedure returns correct results', async ({ page }) => {
// Połącz z bazą danych
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'dbname',
options: {
encrypt: true,
trustServerCertificate: true
}
};
await sql.connect(config);
// Uruchom procedurę składowaną
const result = await sql.query(`EXEC GetUserByEmail ${'john.doe@example.com'}`);
expect(result.recordset[0].name).toBe('John Doe');
// Zamknij połączenie z bazą danych
await sql.close();
});
Rozbudowane przykłady i zaawansowane możliwości
- Tworzenie złożonych zapytań: Podczas testów automatycznych często musimy wykonywać bardziej skomplikowane operacje na bazie danych. Przykładem może być wyszukiwanie danych spełniających określone kryteria, agregowanie wyników lub przetwarzanie danych w ramach złożonych zapytań SQL. Oto przykład takiego zapytania:
const result = await sql.query(`
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5
`);
expect(result.recordset.length).toBeGreaterThan(0);
- Używanie procedur składowanych: Procedury składowane są używane do wykonywania złożonych operacji na danych. Możemy je wykorzystać w naszych testach, aby przetestować, czy działają poprawnie w różnych scenariuszach:
const result = await sql.query(`EXEC GetUserOrders ${'john.doe@example.com'}`);
expect(result.recordset.length).toBeGreaterThan(0);
- Tworzenie i używanie widoków: Widoki pozwalają na tworzenie złożonych zapytań, które można traktować jak tabelę. Są one szczególnie przydatne w testach, gdy chcemy uzyskać skomplikowane dane bez pisania złożonych zapytań w każdym teście:
const createView = await sql.query(`
CREATE VIEW ActiveUsers AS
SELECT name, email FROM users WHERE active = 1
)`;
const result = await sql.query(`SELECT * FROM ActiveUsers`);
expect(result.recordset.length).toBeGreaterThan(0);

Testowanie w kontekście platformy low-code Ferryt
Platformy low-code, takie jak Ferryt, pozwalają na szybkie tworzenie aplikacji dzięki gotowym komponentom i narzędziom do automatyzacji procesów. Integracja z bazą danych MSSQL w testach automatycznych jest istotna w kontekście platform low-code, ponieważ umożliwia weryfikację poprawności działania aplikacji oraz zapewnia, że wszelkie zmiany wprowadzane na poziomie platformy nie wpłyną negatywnie na dane użytkowników i funkcjonalność aplikacji.
Ferryt oferuje różnorodne narzędzia do tworzenia aplikacji, które mogą automatyzować procesy biznesowe, zarządzać danymi i tworzyć interfejsy użytkownika bez konieczności pisania dużej ilości kodu. Pomimo to, testy automatyczne z Playwright są nieodzownym elementem zapewnienia jakości, zwłaszcza gdy aplikacje te integrują się z bazą danych MSSQL.
Przykład integracji z Ferryt
Załóżmy, że stworzyliśmy aplikację w Ferryt, która zarządza danymi użytkowników i wykorzystuje bazę danych MSSQL do przechowywania tych danych. Chcemy się upewnić, że nasza aplikacja działa poprawnie i że dane są prawidłowo przetwarzane. Oto przykład, jak można przeprowadzić test automatyczny z Playwright, który sprawdzi, czy aplikacja poprawnie zapisuje dane do bazy MSSQL.
const { test, expect } = require('@playwright/test');
const sql = require('mssql');
// Konfiguracja połączenia z bazą danych MSSQL
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'dbname',
options: {
encrypt: true, // jeśli używasz Azure
trustServerCertificate: true // ustaw na true, jeśli używasz certyfikatów samopodpisanych
}
};
// Funkcja do połączenia z bazą danych
async function connectToDatabase() {
try {
await sql.connect(config);
console.log('Połączono z bazą danych MSSQL');
} catch (err) {
console.error('Błąd połączenia z bazą danych MSSQL:', err);
}
}
// Funkcja pobierająca numer wniosku z atrybutu appnum
async function getApplicationNumber(page) {
const applicationNumber = await page.getAttribute('#application', 'appnum');
const applicationNumberText = applicationNumber.textContent();
return;
}
// Test automatyczny przy użyciu Playwright
// Sprawdzenie, czy nowy wniosek jest poprawnie zapisywany w bazie danych
test('Application form data is correctly saved in the database', async ({ page }) => {
// Połącz z bazą danych
await connectToDatabase();
// Przejdź do strony z formularzem w aplikacji Ferryt
await page.goto('http://localhost:3000/application-form');
// Pobierz numer sprawy
await page.getApplicationNumber();
// Wypełnij formularz i prześlij
await page.fill('#applicantName', 'John Doe');
await page.fill(‘#email’, ‘john.doe@example.com’);
await page.click('#submit');
// Sprawdź, czy dane są przechowywane w bazie
const result = await sql.query(`
SELECT * FROM applications WHERE applicationNumber = ${applicationNumber}
)`;
expect(result.recordset[0].creationDate).toBe('2025-03-11');
expect(result.recordset[0].status).toBe('Pending');
// Zamknij połączenie z bazą danych
await sql.close();
});
Podsumowanie
Integracja z bazą danych MSSQL w testach automatycznych z Playwright umożliwia bardziej kompleksowe i wiarygodne testowanie aplikacji, zarówno tych tworzonych tradycyjnymi metodami, jak i przy użyciu narzędzi low-code. Dzięki poprawnej konfiguracji połączenia, stosowaniu dobrych praktyk oraz możliwości testowania skomplikowanych zapytań i procedur, możemy znacząco zwiększyć niezawodność i jakość naszych testów. Playwright oferuje bogate możliwości integracji z różnymi bazami danych, co sprawia, że jest narzędziem wszechstronnym i efektywnym w testach automatycznych.
1 komentarz
Artur Wiśniewski
Fajny, praktyczny temat — Playwright najczęściej kojarzy się tylko z UI, a tu widać sensowne podejście do spięcia testów z danymi. Ciekawi mnie, jak u Was rozwiązujecie utrzymanie stabilności takich testów: czy częściej idziecie w przygotowanie danych (seed/fixture), czy w czyszczenie po teście, żeby nie zostawiać bałaganu w bazie?