Implementowanie zarysów scenariuszy Cucumber w ramach BDD

Discover how to deliver better software and systems in rapidly scaling environments. Join our Community

Przestań pisać w kółko ten sam test! Zarysy scenariuszy pozwalają definiować szablony testów i uzupełniać je różnymi zestawami danych, oszczędzając czas oraz zapewniając, że testy pozostają skoncentrowane na wartości biznesowej.

Rozwój sterowany zachowaniem (BDD) to zwinna praktyka tworzenia oprogramowania, która usprawnia współpracę między interesariuszami a programistami poprzez używanie prostego, specyficznego dla danej dziedziny języka do opisywania zachowania systemu. 

Jednym z najpotężniejszych narzędzi w BDD jest Cucumber, używany do pisania jasnych specyfikacji. Może być również wykorzystywany w testach z najczęściej używanymi językami programowania, takimi jak Java, Python czy C#, a także integrowany ze strukturami interfejsu użytkownika, takimi jak Selenium, lub używany do testowania interfejsów API.

Zarysy scenariuszy są częścią składni Gherkin języka Cucumber, używanej do pisania wykonywalnych specyfikacji. W przeciwieństwie do zwykłych scenariuszy, które definiują jeden konkretny przykład, zarysy scenariuszy umożliwiają określenie wielu przykładów w formacie tabelarycznym. 

Różnice między scenariuszem a zarysem scenariusza

Scenariusze w języku Cucumber reprezentują przypadek testowy zapisany w podstawowej formie zakładając-kiedy-wtedy. Język Gherkin umożliwia pisanie tych scenariuszy testowych zwykłym językiem angielskim (i w innych językach), dzięki czemu mogą być łatwo rozumiane, a nawet pisane przez osoby nietechniczne. Definicje kroków, które reprezentują implementację kroków, są tworzone w osobnych plikach. 

W przypadku niektórych funkcji sensowne jest powtórzenie tego samego scenariusza z użyciem różnych danych testowych — prawdopodobnie znasz to jako testowanie sterowane danymi. W języku Cucumber robi się to za pomocą zarysu scenariusza z tabelą przykładów zawierającą zestawy danych, które mają zostać użyte. Każdy przykład jest liczony jako osobny test.  

Get Free Access
Get regular tech leadership wisdom for delivering better software and systems.
Get Free Access

Have an account? Log In

Składnia zarysu scenariusza w języku Cucumber

Typowy projekt Cucumber zawiera pliki funkcji, w których definiowane są testy Cucumber, oraz pliki definicji kroków zawierające implementacje tych kroków. 

Plik funkcji powinien reprezentować specyfikację wymagania oraz scenariusze używane do jego przetestowania. Podstawowa składnia prostego scenariusza Cucumber wygląda następująco:

Scenariusz: Nieprawidłowe logowanie

Zakładając, że przechodzę na stronę logowania

Kiedy wprowadzam nieprawidłowe dane uwierzytelniające

Wtedy otrzymuję komunikat o błędzie

Scenariusz może również zawierać zmienne, które zostaną potraktowane jako takie w definicji kroku.

Scenariusz: Nieprawidłowe logowanie

Zakładając, że przechodzę na stronę logowania

Kiedy wprowadzam nazwę użytkownika test i nieprawidłowe hasło

Wtedy otrzymuję komunikat o błędzie: "Nieprawidłowe logowanie".

Wartości „test”, „nieprawidłowe” i „Nieprawidłowe logowanie” zostaną potraktowane jako zmienne. Zobaczmy teraz, co się stanie, gdy chcemy wypróbować różne kombinacje podanych zmiennych — możemy otrzymać wiele scenariuszy, identycznych z wyjątkiem wartości zmiennych, albo użyć zarysu scenariusza, który pozwala zastosować tabelę, w której definiujemy różne kombinacje danych:

    Wtedy otrzymuję komunikat o błędzie: "<komunikat o błędzie>".

Przykłady:

 | nazwa użytkownika | hasło | komunikat o błędzie             |

| test     | nieprawidłowe  | Nieprawidłowe logowanie             |

| test     |          | Wprowadź hasło |   

|          | nieprawidłowe  | Wprowadź nazwę użytkownika |

Kombinacja danych jest zapisywana pod słowem kluczowym „Przykłady”, wewnątrz tabeli. Nagłówki tabel to nazwy zmiennych, a każdy wiersz reprezentuje kombinację danych. Każdy przykład w funkcji Cucumber będzie traktowany jako osobny przypadek testowy. 

Tabela przykładów a tabele danych

Tabele przykładów i tabele danych mogą wyglądać podobnie, ale służą do różnych celów. Główna różnica polega na tym, że przykłady służą do implementowania scenariuszy sterowanych danymi, podczas gdy tabele danych są używane, gdy kroki scenariusza muszą korzystać z wielu zmiennych.

Tabela danych może wyglądać tak:

Scenariusz: Nieprawidłowe logowanie

    Zakładając, że przechodzę na stronę logowania

    Kiedy wprowadzam dane uwierzytelniające

        | nazwa użytkownika | hasło |

        | test     | nieprawidłowe  |   

 Wtedy otrzymuję komunikat o błędzie: "Nieprawidłowe logowanie".

lub tak:

Scenariusz: Nieprawidłowe logowanie

    Zakładając, że przechodzę na stronę logowania

    Kiedy wprowadzam dane uwierzytelniające

        | nazwa użytkownika | test     |

        | hasło | nieprawidłowe |    

Wtedy otrzymuję komunikat o błędzie: "Nieprawidłowe logowanie".

Tabele danych są szczególnie przydatne, gdy kroki wymagają wielu zmiennych, a także są łatwiejsze do odczytania niż wtedy, gdy każda wartość jest zapisana wewnątrz kroku.  

Praca z tabelami danych i zarysem scenariusza 

Tabele danych i zarysy scenariuszy mogą również działać razem. Nazwa zmiennej zostanie podana w tabeli danych, a następnie ponownie użyta w tabeli przykładów.

Zarys scenariusza: Nieprawidłowe logowanie

    Zakładając, że przechodzę na stronę logowania

    Kiedy wprowadzam dane uwierzytelniające

        | nazwa użytkownika | <nazwa użytkownika> |

        | hasło | <hasło> |

    Wtedy otrzymuję komunikat o błędzie: "<komunikat o błędzie>".

Przykłady:

    | nazwa użytkownika | hasło | komunikat o błędzie             |

    | test     | nieprawidłowe  | Nieprawidłowe logowanie             |

    | test     |          | Wprowadź hasło |

    |          | nieprawidłowe  | Wprowadź nazwę użytkownika |

Zalety korzystania z zarysów scenariuszy

Zarysy scenariuszy można interpretować jako „szablon” przypadku testowego. Po zaimplementowaniu w ramach platformy automatyzacji testów wykonują one ten sam scenariusz z różnymi zestawami danych.

Zaletą jest mniejsza liczba wierszy Gherkina i mniej powtórzeń. Oznacza to, że za każdym razem, gdy konieczna jest zmiana we wspólnym scenariuszu, można ją wprowadzić tylko raz, a zmiana zostanie zastosowana do wszystkich kombinacji danych testowych.

Kolejną zaletą zarysów scenariuszy jest możliwość zwiększenia zakresu testów przy minimalnym nakładzie pracy. Aby dodać nowy test, należy dodać nowy wiersz przykładu.

More Articles

Najlepsze praktyki dotyczące pisania zarysów scenariuszy

  • Uwzględniaj rzeczywiste dane: Zespół rzadziej przeoczy sytuacje brzegowe lub ukryte informacje, gdy wykorzystuje rzeczywiste przypadki użycia do zrozumienia zachowania.
  • Komunikuj cel za pomocą terminologii biznesowej, aby nietechniczni i techniczni interesariusze zespołu mogli lepiej się wzajemnie rozumieć.
  • Wyjaśniaj swoją intencję, a nie sposób jej implementacji; objaśnienia kroków powinny być w minimalnym stopniu techniczne. Powinny skupiać się bardziej na funkcjach systemu niż na jego działaniu
  • Zachowuj tylko to, co niezbędne: Aby scenariusz był angażujący dla wszystkich uczestników, nie przepełniaj go niepotrzebnymi krokami.

Najważniejsze wnioski

Key Takeaways

Wzmocnienie współpracy: BDD wzmacnia współpracę między interesariuszami a programistami.

Prosty język: BDD wykorzystuje prosty, specyficzny dla domeny język do opisywania zachowania systemu.

Praktyka zwinna: BDD jest praktyką stosowaną w zwinnym tworzeniu oprogramowania.

Zaangażowanie interesariuszy: BDD angażuje interesariuszy w definiowanie zachowania systemu.

Opis zachowania systemu: BDD koncentruje się na skutecznym opisywaniu zachowania systemu.

Cucumber to świetne narzędzie współpracy między osobami nietechnicznymi, programistami i testerami. Jest to narzędzie BDD, które zapewnia pisemne specyfikacje i może być używane podczas testowania. Można napisać wiele scenariuszy, aby zademonstrować różne wymagania.

Dobrym pomysłem jest używanie zarysu scenariusza z odrębnymi zestawami wartości dostarczanymi za pośrednictwem tabeli przykładów, gdy występują sytuacje, w których scenariusze mają te same kroki, ale wymagają różnych wartości danych wejściowych lub wyjściowych.

Zapisz się do newslettera The CTO Club, aby uzyskać więcej informacji.

Andreea Draniceanu
Hi there! My name is Andreea, I’m a software test engineer based in Romania. I’ve been in the software industry for over 10 years. Currently my main focus is UI test automation with C#, but I love exploring all QA-related areas 😊

You may also like