Dataprovider i TestNG XML: Parameterization in Selenium(Example)

cze 9, 2021
admin

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

  1. Z pomocą adnotacji Parameters i pliku XML TestNG.

  2. 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

  1. Poziom suite – Parametry wewnątrz tagu <suite> pliku XML TestNG będą parametrami poziomu suite.
  2. 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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.