Dobry sklep to taki, który nie tylko generuje zyski, ale także pozbawiony jest błędów, które mogłyby odstraszyć potencjalnych klientów. Z perspektywy dewelopera brak błędów powinien być jednym z głównych celów sklepu eCommerce. Aby to osiągnąć, deweloperzy muszą mieć pewność co do swojego kodu i wprowadzanych zmian. Pewność tę dają im testy — zarówno automatyczne, jak i manualne. Te dwa rodzaje testów różnią się całkowicie pod względem podejścia.
Testy automatyczne, w uproszczeniu, to kod testujący kod. Testy te należy regularnie uruchamiać (najlepiej w procesie CI/CD), aby upewnić się, że wprowadzone zmiany w kodzie są poprawne. Z kolei testy manualne są wykonywane ręcznie przez testerów QA. Każdy rodzaj testów ma swoje zalety i wady, ale jeden uzupełnia drugi, a ich połączenie daje największą pewność, że aplikacja eCommerce działa prawidłowo.
Sylius stosuje kompleksowe podejście do testowania, obejmujące testy jednostkowe, integracyjne, funkcjonalne oraz end-to-end. Wykorzystując narzędzia takie jak PHPUnit, WebTestCase i Behat, Sylius zapewnia wysoką jakość i niezawodność kodu. Pisanie testów w Syliusie opiera się na najlepszych praktykach, co pozwala deweloperom efektywnie tworzyć, utrzymywać i rozwijać aplikacje eCommerce.
Spis treści
- Rodzaje testów
- Zalety pisania i uruchamiania testów
- Narzędzia do testowania w PHP
- Najlepsze praktyki testowania w Syliusie
- Rola testowania manualnego w projektach Sylius
- Przydatne narzędzia do testów manualnych
- Łączenie testów automatycznych i manualnych
Rodzaje testów
Testowanie oprogramowania można podzielić na różne kategorie w zależności od celu, jaki chcemy osiągnąć. Najpopularniejsze rodzaje to:
- Testy jednostkowe (Unit Tests) – Skupiają się na testowaniu pojedynczych jednostek kodu, takich jak funkcje czy klasy, w oderwaniu od reszty systemu.
- Testy integracyjne (Integration Tests) Sprawdzają, czy różne moduły aplikacji współpracują ze sobą poprawnie.
- Testy funkcjonalne (Functional Tests) – Weryfikują, czy aplikacja działa zgodnie z wymaganiami funkcjonalnymi.
- Testy end-to-end (E2E) – Mają na celu przetestowanie całego przepływu aplikacji od początku do końca, aby upewnić się, że wszystkie komponenty systemu współpracują poprawnie i spełniają wymagania biznesowe oraz użytkowników. Na przykład testowanie całego procesu od rejestracji po realizację zamówienia.
- Testy akceptacyjne (Acceptance Tests) – Skupiają się na weryfikacji, czy cała aplikacja spełnia wymagania biznesowe i jest gotowa do użytku przez końcowego użytkownika.
Zalety pisania i uruchamiania testów
- Feedback – Największą wartością testów automatycznych jest potwierdzenie, że nowe zmiany w kodzie nie wprowadziły błędów. Czas potrzebny na uzyskanie konkretnej informacji zwrotnej zależy od rodzaju testu. Testy jednostkowe będą najszybsze, podczas gdy testy end-to-end będą najwolniejsze ze względu na ilość wykorzystywanych zasobów i testowanych scenariuszy.
- Wczesne wykrywanie błędów – Testy umożliwiają szybkie wykrycie błędów w kodzie na wczesnym etapie cyklu życia oprogramowania, co obniża koszty, czas potrzebny na ich naprawę oraz frustrację użytkowników, którzy mogliby napotkać te błędy w sklepie.
- Lepsza jakość kodu – Pisanie testów wymusza na deweloperach bardziej przemyślane i lepiej zaprojektowane kodowanie. Kod łatwy do przetestowania jest również bardziej czytelny i zrozumiały.
- Łatwiejsze wprowadzanie zmian – Dzięki informacji zwrotnej uzyskanej z testów deweloperzy mogą czuć się pewniej, wprowadzając nowe zmiany w kodzie.
- Dokumentacja kodu – Testy mogą pełnić funkcję dokumentacji. Przykłady użycia funkcji i oczekiwane wyniki są bezpośrednio zapisane w testach, co może być pomocne dla nowych członków zespołu.
Narzędzia do testowania w PHP
PHPUnit
PHPUnit to najpopularniejsze narzędzie do testów jednostkowych w PHP. Sylius jako aplikacja oparta na Symfony w pełni wspiera PHPUnit i zawiera predefiniowane konfiguracje dla tego narzędzia.
Przykład testu jednostkowego:
use PHPUnit\Framework\TestCase;
use App\Service\Calculator;
class CalculatorTest extends TestCase
{
public function testAdd()
{
$calculator = new Calculator();
$result = $calculator->add(2, 3);
$this->assertEquals(5, $result);
}
}
W powyższym przykładzie testujemy metodę add klasy Calculator, sprawdzając, czy zwraca poprawny wynik dodawania dwóch liczb.
Behat
Behat to narzędzie do testów akceptacyjnych oparte na BDD, które umożliwia pisanie scenariuszy testowych w naturalnym języku (Gherkin). Jest to idealne narzędzie do testowania całych procesów biznesowych w Syliusie.
Przykładowy scenariusz w Behat:
Feature: Add product to cart
In order to buy products
As a customer
I need to be able to add products to my shopping cart
Scenario: Adding a product to the cart
Given I am on the homepage
When I add "Product A" to the cart
Then I should see "Product A" in the cart
Powyższy scenariusz definiuje prosty proces dodawania produktu do koszyka, który następnie można wdrożyć za pomocą Behat. Aby to zadziałało, musisz również utworzyć kontekst i konfigurację pakietu dla tego scenariusza. Więcej o Behat możesz przeczytać tutaj.
WebTestCase
WebTestCase to rozszerzenie PHPUnit w Symfony, które umożliwia testowanie aplikacji jako całości poprzez symulowanie żądań HTTP. Jest szczególnie przydatne do testów funkcjonalnych w Sylius.
Przykładowy test funkcjonalny:
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ProductControllerTest extends WebTestCase
{
public function testShowProduct()
{
$client = static::createClient();
$crawler = $client->request('GET', '/product/1');
$this->assertResponseIsSuccessful();
$this->assertSelectorTextContains('h1', 'Product Name');
}
}
Powyższy test funkcjonalny ma na celu sprawdzenie, czy strona produktu po załadowaniu wyświetla prawidłowe informacje.
Najlepsze praktyki testowania w Syliusie
Testowanie projektów opartych na Syliusie wymaga stosowania najlepszych praktyk, aby zapewnić efektywność i skuteczność procesu testowania. Oto kilka kluczowych wskazówek:
Zapewnij pokrycie kodu testami
Osiągnięcie 100% pokrycia kodu testami jest trudne lub wręcz niemożliwe, dlatego upewnij się, że krytyczne części aplikacji są objęte testami. Priorytetem powinno być testowanie kodu biznesowego i kluczowych funkcjonalności.
Pisz czytelne testy
Testy powinny być łatwe do zrozumienia i utrzymania. Używaj opisowych nazw metod i strukturyzuj testy w sposób odzwierciedlający logikę biznesową aplikacji.
Automatyzuj testy
Zintegruj testy z systemem CI/CD, aby były automatycznie uruchamiane przy każdej zmianie w kodzie. Dzięki temu błędy zostaną wykryte zanim trafią na produkcję.
Testuj przypadki brzegowe
Testowanie tylko szczęśliwej ścieżki rzadko gwarantuje poprawne działanie kodu. Skup się również na przypadkach brzegowych. Pisząc testy koszyka, zastanów się, co się stanie, gdy użytkownik wprowadzi ujemną ilość produktów lub doda ten sam produkt wielokrotnie. Myśl nieszablonowo, bo tak mogą zachowywać się użytkownicy w Twoim sklepie.
Sprawdź, co oferuje Sylius
Sylius zawiera wiele testów. Zamiast tworzyć coś od nowa, sprawdź, czy istniejące kroki w Behat lub testy nie pokrywają już danego obszaru aplikacji. Jeśli znajdziesz odpowiedni test, śmiało go używaj lub kopiuj do swojego projektu.
Integruj testy Sylius i wtyczek z procesem CI/CD (jeśli to możliwe)
Ten krok jest często pomijany ze względu na czas potrzebny na uruchomienie testów Behat i trudności w ich poprawie. Jednak jeśli masz taką możliwość i budżet, przyniesie to wiele korzyści dla projektu. Dzięki dużej liczbie testów w Syliusie możesz upewnić się, że modyfikowane moduły lub funkcjonalności nie naruszają podstawowej logiki systemu.
Rola testowania manualnego w projektach Sylius
Testowanie manualne odgrywa kluczową rolę w zapewnieniu jakości i niezawodności platform eCommerce opartych na Syliusie, uzupełniając strategie testów automatycznych. Skupia się na testach integracyjnych, funkcjonalnych oraz E2E.
Podczas gdy testy automatyczne są bardzo efektywne przy powtarzalnych zadaniach i walidacji przewidywalnych zachowań, testowanie manualne obejmuje aspekty wymagające znajomości Syliusa, ludzkiego osądu, kreatywności oraz zrozumienia potrzeb i zachowań użytkowników.
Testowanie manualne jest szczególnie przydatne w obszarach, które trudno lub wręcz niemożliwe jest pokryć testami automatycznymi, takich jak:
- UI/UX – testowanie manualne oznacza pracę z interfejsem użytkownika, co pozwala wykrywać rzeczywiste problemy z UI (zwłaszcza gdy Sylius jest mocno dostosowany za pomocą nowych kodów lub wtyczek) i uzyskać wartościowe informacje zwrotne o doświadczeniach użytkownika.
- Przypadki brzegowe – testerzy, myśląc jak końcowi użytkownicy, celowo eksplorują nietypowe lub ekstremalne scenariusze, takie jak nieoczekiwane dane wejściowe czy działania w nietypowej kolejności.
- Integracje – sprawdzanie integracji zewnętrznych systemów, takich jak bramki płatności, jest prostsze w sposób manualny, ponieważ wymaga interakcji z zewnętrznymi narzędziami.
- Testy międzyurządzeniowe – wizualna weryfikacja wyglądu aplikacji na różnych rozdzielczościach ekranów wymaga ludzkiego oka, aby zapewnić praktyczność i czytelność.
Przydatne narzędzia do testów manualnych
Wiele narzędzi może pomóc w testowaniu ręcznym. Poniżej opisaliśmy aplikacje, które dobrze sprawdzą się w przypadku Syliusa:
- Database client software – narzędzia takie jak DBeaver są niezastąpione, ponieważ zapewniają dostęp do bazy danych w celu inspekcji, modyfikacji lub zapytania danych. Zmiany w bazie danych zachodzą cały czas, a sprawdzenie, czy działania zapisują dane w odpowiedniej tabeli w odpowiednim formacie, ma kluczowe znaczenie dla prawidłowego działania aplikacji. Debugowanie niektórych funkcjonalności wymaga użycia określonych danych, a dostęp do danych zmianowych bezpośrednio w bazie danych może być znacznie szybszy i wygodniejszy niż próba zrobienia tego za pośrednictwem interfejsu użytkownika.
- Mailhog – lekkie narzędzie do testowania poczty e-mail, które przechwytuje wiadomości e-mail wysyłane z aplikacji w środowisku testowym. W Syliusie jest pomocne w sprawdzaniu powiadomień e-mail, takich jak potwierdzenia zamówień, prośby o zresetowanie hasła i wiadomości promocyjne. Treść wiadomości e-mail, układ i adres odbiorcy można zweryfikować w prosty sposób, bez faktycznego wysyłania wiadomości do użytkowników końcowych. Warto zauważyć, że to narzędzie doskonale nadaje się do testowania w środowisku lokalnym.
- Postman – jest to narzędzie do testowania API, które pozwala nam wysyłać żądania do zaplecza Sylius i weryfikować odpowiedzi, jeśli nie ma potrzeby sprawdzania tych elementów. Jest przydatne do testowania API REST, weryfikowania danych zwracanych z punktów końcowych i zapewniania poprawności przepływów pracy API, takich jak tworzenie produktów lub zarządzanie zamówieniami.
- Tampermonkey – rozszerzenie przeglądarki, które umożliwia tworzenie i uruchamianie niestandardowych skryptów użytkownika, które mogą manipulować lub automatyzować zachowanie przeglądarki. W przypadku projektów Sylius może być używane do symulowania działań użytkownika, testowania przypadków skrajnych w przeglądarce lub dostosowywania danych w locie w celu walidacji określonych scenariuszy bez zmian w zapleczu. Jest idealne ze względu na swoją zdolność do dostosowywania się do określonych potrzeb lub problemów. Najbardziej przydatny jest skrypt, który może pomóc Ci wypełnić formularz przygotowanymi danymi (nie losowymi!), dzięki czemu masz pełną kontrolę nad testowanym przypadkiem.
Oczywiście narzędzia – jakkolwiek ważne by nie były – nie zmienią faktu, że najlepszym narzędziem do ręcznego testowania jest wiedza, ponieważ wymaga to przede wszystkim pracy z kreatywnym umysłem i wyobraźnią. Zrozumienie eCommerce i tego, czego użytkownicy oczekują od aplikacji, które pozwalają im kupować produkty, jest bezcenne. Jeszcze większe znaczenie ma doświadczenie Syliusa – najbardziej krytycznymi obszarami są produkty i ich prezentacja, procesy realizacji transakcji, administracja za pośrednictwem Panelu administracyjnego i struktura przechowywania danych w bazie danych. Łatwo jest szukać problemów, jeśli wiesz, gdzie szukać.
Łączenie testów automatycznych i manualnych
Aby osiągnąć solidny i wydajny proces testowania w projektach Sylius, kluczowe jest połączenie mocnych stron zarówno ręcznego, jak i automatycznego testowania. Każde podejście ma unikalne zalety, a dzięki integracji tych metod zespoły mogą stworzyć uzupełniającą strategię testowania, która równoważy zasięg, adaptowalność i wydajność, zapewniając, że produkt końcowy spełnia zarówno oczekiwania techniczne, jak i użytkowników.
- Podział pracy między testowaniem ręcznym i automatycznym odgrywa ważną rolę w maksymalizacji wydajności i zasięgu Testy automatyczne doskonale radzą sobie z powtarzalnymi zadaniami, takimi jak testowanie regresji, gdzie stabilne i przewidywalne przepływy pracy muszą być spójnie sprawdzane przy zmianach kodu. Są idealne do sprawdzania podstawowych funkcjonalności i ścieżek krytycznych, takich jak realizacja transakcji lub przetwarzanie płatności. Sylius oferuje wiele testów i oszczędza mnóstwo czasu ludzkiego, ponieważ nie powtarza tych podstawowych kroków przy każdej większej zmianie kodu. Z drugiej strony, testowanie ręczne koncentruje się na testowaniu eksploracyjnym, gdzie ludzka intuicja i kreatywność są potrzebne do odkrywania ukrytych błędów lub problemów z użytecznością. Ważne jest również, aby interfejs był intuicyjny i zgodny z oczekiwaniami użytkownika. Ten podział zapewnia, że rutynowe walidacje są zautomatyzowane pod kątem szybkości, podczas gdy ludzka wiedza specjalistyczna jest skierowana na obszary wymagające głębszego wglądu.
- Testowanie ręczne pomaga w kształtowaniu automatyzacji testów Testy ręczne ujawniają scenariusze, które prowadzą do określonego problemu. Niektóre z tych obaw są powtarzalne i mogą mieć kluczowe znaczenie dla funkcjonalności systemu. Wiele przypadków jest powiązanych z cenami – i liczbami w ogóle – co jest świetne, ponieważ zwykle jest to doskonała okazja do wdrożenia ich jako testów automatycznych. Patrząc na szerszy obraz, nie tylko pojedyncze scenariusze, ale całe wzorce możliwych zachowań użytkowników mogą się powtarzać. Użytkownicy mogą być kreatywni, jeśli chodzi – na przykład – o wprowadzanie danych i wykonywanie czynności w prosty, intuicyjny sposób (co nie zawsze jest takie, jak oczekiwaliśmy). Idealnie jest patrzeć na te wzorce – i wyniki testów ręcznych w całości – jako możliwe wskazówki do opracowywania nowych ukierunkowanych przypadków testów automatycznych, aby można było zapobiec problemom w przyszłości.
Chcesz dowiedzieć się więcej o Syliusie?

Podsumowanie
Testowanie projektów opartych na Syliusie jest kluczowe dla zapewnienia ich jakości i stabilności. Stosowanie narzędzi takich jak PHPUnit, Behat i WebTestCase pozwala na skuteczne testowanie różnych aspektów aplikacji. Przestrzeganie najlepszych praktyk, takich jak pokrywanie krytycznych części aplikacji testami, pisanie czytelnych testów i automatyzacja procesu testowania, przyczynia się do stworzenia solidnej platformy eCommerce.
Regularne przeglądy i refaktoryzacja testów, a także testowanie przypadków brzegowych, pomagają utrzymać wysoką jakość kodu w miarę rozwoju projektu. Testowanie manualne uzupełnia procesy automatyczne, dostarczając ludzkiej perspektywy potrzebnej do zapewnienia bezproblemowego i niezawodnego doświadczenia eCommerce. W efekcie projekty oparte na Syliusie mogą dostarczać wartość biznesową użytkownikom końcowym, minimalizując ryzyko błędów i problemów na produkcji.