Dataprovider i TestNG XML: Parameterization in Selenium(Example)
Tworząc oprogramowanie, zawsze chcielibyśmy, aby działało ono inaczej z innym zestawem danych. Kiedy przychodzi do testowania tego samego kawałka oprogramowania, nie możemy być nieuczciwi testując go tylko z jednym zestawem danych. Tutaj znowu musimy sprawdzić, czy nasz system przyjmuje wszystkie zestawy kombinacji, które są oczekiwane do obsługi. W tym celu musimy sparametryzować nasz test scipts. Oto jak wygląda parametryzacja na obrazku.
Parametryzacja w Selenium
Parametryzacja w Selenium jest procesem parametryzacji skryptów testowych w celu przekazania wielu danych do aplikacji w czasie wykonywania. Jest to strategia wykonania, która automatycznie uruchamia przypadki testowe wiele razy używając różnych wartości. Koncepcja osiągnięta przez parametryzację skryptów testowych jest nazywana Data Driven Testing.
W tym tutorialu, dowiesz się-
- Typ parametryzacji w TestNG-
- Anotacja Parameters z Testng.xml
- Troubleshooting
- Parameters using Dataprovider
- Invoke DataProvider from different class
- Types of Parameters in Dataprovider
Typ parametryzacji w TestNG-
Aby uczynić parametryzację bardziej przejrzystą, przejdziemy przez opcje parametryzacji w jednym z najbardziej popularnych frameworków dla Selenium Webdriver – TestNG.
Istnieją dwa sposoby, dzięki którym możemy osiągnąć parametryzację w TestNG
-
Z pomocą adnotacji Parameters i pliku XML TestNG.
-
Z pomocą adnotacji DataProvider.
Parametry z Testng.xml mogą być na poziomie pakietu lub testu
Parametry z DataProvider mogą przyjmować Method i ITestContext jako parametr.
Przeanalizujmy je szczegółowo –
Anotacja parametrów w TestNG
Anotacja parametrów w TestNG jest metodą używaną do przekazywania wartości do metod testowych jako argumentów przy użyciu pliku .xml. Użytkownicy mogą być zobowiązani do przekazania wartości do metod testowych podczas uruchamiania. Metoda adnotacji @Parameters może być użyta w każdej metodzie posiadającej adnotację @Test, @Before, @After lub @Factory.
Adnotacja Parameters z Testng.xml
Wybieraj parametryzację za pomocą adnotacji, gdy chcesz poradzić sobie ze złożonością & liczba kombinacji wejściowych jest mniejsza.
Zobaczmy jak to działa
Scenariusz testowy
Krok 1) Uruchom przeglądarkę & przejdź do Google.com
Krok 2) Wprowadź słowo kluczowe
Krok 3) Sprawdź, czy wprowadzona wartość jest taka sama, jak ta dostarczona przez nasze dane testowe
Krok 4) Powtórz 2 & 3, aż wszystkie wartości zostaną wprowadzone
Autor testu | . SearchKey |
Guru99 | Indie |
Krishna | USA |
. Bhupesh | Chiny |
Tutaj jest przykład, jak to zrobić BEZ parametrów
A Study, powyższego przykładu. Wystarczy wyobrazić sobie, jak złożony stanie się kod, gdy zrobimy to dla 3 kombinacji wejściowych
Teraz sparametryzujmy to za pomocą TestNG
Aby to zrobić, trzeba będzie
- Utworzyć plik XML, który będzie przechowywał parametry
-
W teście dodać adnotację @Parameters
Tutaj jest kompletny kod
Poziom testu TestNG.xml
ParameterWithTestNGXML.java File
Instrukcje do uruchomienia skryptu, wybierz plik XML i Run as Test NG Suite
Right Click on .xml -> Uruchom jako -> Testng Suite (Uwaga : Suite)
Teraz, parametry mogą być zdefiniowane na 2 poziomach
- Poziom suite – Parametry wewnątrz tagu <suite> pliku XML TestNG będą parametrami poziomu suite.
- Poziom testu — Parametry wewnątrz tagu <Test> pliku XML testowania będą parametrami poziomu testu.
Tutaj jest ten sam test z parametrami poziomu pakietu
UWAGA: W przypadku gdy nazwa parametru jest taka sama w poziomie pakietu i poziomie testu wtedy parametr poziomu testu będzie miał pierwszeństwo przed poziomem pakietu. Tak więc, w tym przypadku, wszystkie klasy wewnątrz poziomu testowego będą współdzielić nadrzędny parametr, a inne klasy, które są poza poziomem testowym będą współdzielić parametr poziomu pakietu.
Rozwiązywanie problemów
Problem # 1 Wartość parametru w testng.xml nie może być typecasted do odpowiedniego parametru metody testowej to rzuci błąd.
Rozważmy następujący przykład
Tutaj, atrybut 'author’ jest równy 'Guru99′ który jest łańcuchem i w odpowiadającej metodzie testowej oczekuje wartości całkowitej, więc dostaniemy wyjątek.
Kwestia # 2 Twoje @Parametry nie mają odpowiadającej im wartości w testing.xml.
Możesz rozwiązać tę sytuację, dodając adnotację @optional w odpowiednim parametrze w metodzie testowej.
Kwestia # 3: Chcesz przetestować wiele wartości tego samego parametru za pomocą Testng.xml
Prosta odpowiedź brzmi, że nie można tego zrobić! Możesz mieć wiele różnych parametrów, ale każdy parametr może mieć tylko jedną wartość. Pomaga to zapobiec hardcodingowi wartości w skrypcie. To sprawia, że kod jest wielokrotnego użytku. Pomyśl o tym jak o plikach konfiguracyjnych dla twojego skryptu. Jeśli chcesz użyć wielu wartości dla parametru użyj DataProviders
Data Provider w TestNG
Data Provider w TestNG jest metodą używaną, gdy użytkownik potrzebuje przekazać złożone parametry. Złożone parametry muszą być tworzone z Javy, takie jak złożone obiekty, obiekty z plików właściwości lub z bazy danych mogą być przekazywane przez metodę dostawcy danych. Metoda jest oznaczona adnotacją @DataProvider i zwraca tablicę obiektów.
Parametry przy użyciu Dataprovider
Adnotacja@Parameters jest łatwa, ale aby testować z wieloma zestawami danych musimy użyć Data Provider.
Aby wypełnić tysiące formularzy internetowych używając naszego frameworka testowego potrzebujemy innej metodologii, która może dać nam bardzo duży zbiór danych w pojedynczym strumieniu wykonania.
Ta koncepcja napędzana danymi jest osiągana przez adnotację @DataProvider w TestNG.
Ma ona tylko jeden atrybut 'name’. Jeśli nie określisz atrybutu name, wtedy nazwa DataProvider będzie taka sama jak odpowiadająca jej nazwa metody.
Dostawca danych zwraca dwuwymiarowy obiekt JAVA do metody testowej, a metoda testowa, wywoła M razy w tablicy obiektów typu M*N. Na przykład, jeżeli DataProvider zwraca tablicę 2*3 obiektów, to odpowiednia testcase zostanie wywołana 2 razy z 3 parametrami za każdym razem.
Kompletny przykład
Wywołanie DataProvider z innej klasy
Domyślnie, DataProvider rezyduje w tej samej klasie, w której znajduje się metoda testowa lub w swojej klasie bazowej. Aby umieścić go w innej klasie, musimy uczynić metodę dostawcy danych statyczną, a w metodzie testowej dodać atrybut dataProviderClass w adnotacji @Test.
Przykład kodu
TestClass ParameterDataproviderWithClassLevel.java
DataproviderClass.java
Typy parametrów w Dataprovider
Istnieją dwa typy parametrów obsługiwane przez metodę DataProvider.
Method- Jeżeli SAME DataProvider powinien zachowywać się inaczej przy różnych metodach testowych, użyj parametru Method.
W poniższym przykładzie ,
- Sprawdzamy czy nazwa metody jest testMethodA.
- If yes return one set of value
- Else return another set of value
Here is the output
ITestContext- It can use to create different parameters for test cases based on groups.
W prawdziwym życiu, można użyć ITestContext, aby zmienić wartości parametrów w oparciu o Metody testowe, hosty, konfiguracje testu.
W poniższym przykładzie kodu
- Mamy 2 grupy A & B
- Każda metoda testowa jest przypisana do grupy
- Jeśli wartością grupy jest A, zwracany jest określony zestaw danych
- Jeśli wartością grupy jest B, zwracany jest inny zestaw danych
Uwaga: Jeśli bezpośrednio uruchomisz swoją klasę testng, najpierw wywoła ona dataprovider, który nie może uzyskać informacji o grupach, ponieważ grupy nie są dostępne. Ale zamiast tego, jeśli wywołasz tę klasę poprzez testng.xml, będzie ona miała informacje o grupach dostępne w ITestContext. Użyj następującego XML do wywołania testu
Podsumowanie:
- Parametryzacja jest wymagana do stworzenia Data Driven Testing.
- TestNG wspiera dwa rodzaje parametryzacji, używając @Parameter+TestNG.xml i używając@DataProvider
-
W @Parameter+TestNG.xml parametry mogą być umieszczone na poziomie suite i poziomie testu. Jeśli
ta sama nazwa parametru jest zadeklarowana w obu miejscach, parametr poziomu testowego będzie miał pierwszeństwo przed parametrem poziomu garnituru.
- używając @Parameter+TestNG.xml tylko jedna wartość może być ustawiona w tym samym czasie, ale @DataProvider zwraca tablicę 2d Object.
- Jeśli DataProvider jest obecny w innej klasie niż klasa, w której znajduje się metoda testowa, DataProvider powinien być metodą statyczną.
- Istnieją dwa parametry obsługiwane przez DataProvider: Method i ITestContext.