Penyedia data & TestNG XML: Parameterisasi di Selenium (Contoh)

Daftar Isi:

Anonim

Saat kami membuat perangkat lunak, kami selalu berharap perangkat lunak tersebut berfungsi secara berbeda dengan kumpulan data yang berbeda. Ketika datang ke Menguji perangkat lunak yang sama, kami tidak bisa tidak adil untuk mengujinya hanya dengan satu kumpulan data. Di sini sekali lagi, kami perlu memverifikasi bahwa sistem kami mengambil semua rangkaian kombinasi yang diharapkan dapat mendukung. Untuk itu, kita perlu membuat parameter scipts pengujian kita. Di sinilah Parameterisasi pada gambar.

Parameterisasi di Selenium

Parameterisasi di Selenium adalah proses untuk membuat parameter skrip uji untuk meneruskan beberapa data ke aplikasi saat runtime. Ini adalah strategi eksekusi yang secara otomatis menjalankan kasus uji beberapa kali menggunakan nilai yang berbeda. Konsep yang dicapai dengan membuat parameter pada skrip pengujian disebut Pengujian Berdasarkan Data .

Dalam tutorial ini, Anda akan belajar-

  • Jenis Parameterisasi di TestNG-
  • Anotasi parameter dengan Testng.xml
  • Penyelesaian masalah
  • Parameter menggunakan Dataprovider
  • Panggil DataProvider dari kelas yang berbeda
  • Jenis Parameter di Dataprovider

Jenis Parameterisasi di TestNG-

Untuk membuat parameterisasi lebih jelas, kita akan membahas opsi parameterisasi di salah satu kerangka kerja paling populer untuk Selenium Webdriver - TestNG .

Ada dua cara untuk mencapai parameterisasi di TestNG

  1. Dengan bantuan Anotasi Parameter dan file XML TestNG .

  2. Dengan bantuan anotasi DataProvider .

Parameter dari Testng.xml dapat berupa suite atau level pengujian

Parameter dari DataProvider dapat menggunakan Method dan ITestContext sebagai parameter.

Mari kita pelajari secara detail -

Parameter Annotation di TestNG

Parameter Annotation di TestNG adalah metode yang digunakan untuk meneruskan nilai ke metode pengujian sebagai argumen menggunakan file .xml. Pengguna mungkin diminta untuk meneruskan nilai ke metode pengujian selama waktu proses. Metode anotasi @Parameters dapat digunakan dalam metode apa pun yang memiliki anotasi @Test, @Before, @After, atau @Factory.

Anotasi parameter dengan Testng.xml

Pilih parameterisasi menggunakan anotasi jika Anda ingin menangani kompleksitas & jumlah kombinasi input lebih sedikit.

Mari kita lihat cara kerjanya

Skenario Uji

Langkah 1) Luncurkan browser & buka Google.com

Langkah 2) Masukkan kata kunci pencarian

Langkah 3) Pastikan nilai yang dimasukkan sama dengan yang diberikan oleh data pengujian kami

Langkah 4) Ulangi 2 & 3 sampai semua nilai dimasukkan

Penulis Tes SearchKey
Guru99 India
Krishna Amerika Serikat
Bhupesh Cina

Berikut adalah contoh cara melakukannya TANPA parameter

parameter paket;import org.testng.annotations.Test;import org.testng.AssertJUnit;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;public class NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;@Ujipublic void testNoParameter () melempar InterruptedException {Penulis string = "guru99";String searchKey = "india";System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Mencari teks di kotak teks googlesearchText.sendKeys (searchKey);System.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);System.out.println ("Thread akan tidur sekarang");Thread.sleep (3000);System.out.println ("Nilai dalam Kotak Pencarian Google =" + searchText.getAttribute ("value") + "::: Nilai yang diberikan oleh input =" + searchKey);// memverifikasi nilai di kotak pencarian googleAssertJUnit.assertTrue (searchText.getAttribute ("nilai"). EqualsIgnoreCase (searchKey));}}

A Study, contoh di atas. Bayangkan betapa rumitnya kode tersebut ketika kita melakukan ini untuk 3 kombinasi input

Sekarang, mari kita buat parameter ini menggunakan TestNG

Untuk melakukannya, Anda harus melakukannya

  • Buat file XML yang akan menyimpan parameter
  • Dalam pengujian, tambahkan anotasi @Parameters

Ini kode lengkapnya

Uji Tingkat TestNG.xml




File ParameterWithTestNGXML.java

parameter paket;import org.testng.AssertJUnit;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Optional;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;@Uji@Parameters ({"author", "searchKey"})public void testParameterWithXML (@Optional ("Abc") Penulis string, String searchKey) melempar InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Mencari teks di kotak teks googlesearchText.sendKeys (searchKey);System.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);System.out.println ("Thread akan tidur sekarang");Thread.sleep (3000);System.out.println ("Nilai dalam Kotak Pencarian Google =" + searchText.getAttribute ("value") + "::: Nilai yang diberikan oleh input =" + searchKey);// memverifikasi nilai di kotak pencarian googleAssertJUnit.assertTrue (searchText.getAttribute ("nilai"). EqualsIgnoreCase (searchKey));}}

Instruksi untuk menjalankan script, pilih file XML dan Run as Test NG Suite

Klik kanan pada file .xml -> Run as -> Testng Suite (Catatan: Suite)

Sekarang, parameter dapat ditentukan pada 2 level

  1. Tingkat suite - Parameter di dalam tag dari file XML TestNG akan menjadi parameter tingkat suite.
  2. Tingkat Pengujian - Parameter di dalam tag dari file XML pengujian akan menjadi parameter Tingkat pengujian.

Berikut adalah pengujian yang sama dengan parameter level suite

CATATAN: Jika nama parameter sama di tingkat suite dan tingkat pengujian maka parameter tingkat pengujian akan mendapatkan preferensi atas tingkat suite. Jadi, dalam hal ini, semua kelas di dalam tingkat pengujian itu akan berbagi parameter yang diganti, dan kelas lain yang berada di luar tingkat pengujian akan berbagi parameter tingkat suite.

Penyelesaian masalah

Masalah # 1 Nilai parameter di testng.xml tidak dapat diketikkan ke parameter metode pengujian yang sesuai itu akan menimbulkan kesalahan.

Perhatikan contoh berikut

Di sini, atribut 'author' sama dengan 'Guru99' yang merupakan string dan dalam metode pengujian yang sesuai mengharapkan nilai integer, jadi kita akan mendapatkan pengecualian di sini.

Masalah # 2 @Parameters Anda tidak memiliki nilai yang sesuai di testing.xml.

Anda dapat mengatasi situasi ini dengan menambahkan anotasi @opsional di parameter yang sesuai dalam metode pengujian.

Masalah # 3: Anda ingin menguji beberapa nilai dari parameter yang sama menggunakan Testng.xml

Jawaban sederhananya adalah ini tidak dapat dilakukan! Anda dapat memiliki beberapa parameter berbeda, tetapi setiap parameter hanya dapat memiliki satu nilai. Ini membantu mencegah nilai hardcode ke dalam skrip. Ini membuat kode dapat digunakan kembali. Anggap saja sebagai file konfigurasi untuk skrip Anda. Jika Anda ingin menggunakan beberapa nilai untuk parameter, gunakan DataProviders

Penyedia Data di TestNG

Penyedia Data di TestNG adalah metode yang digunakan ketika pengguna perlu meneruskan parameter yang kompleks. Parameter Kompleks perlu dibuat dari Java seperti objek kompleks, objek dari file properti atau dari database dapat dilewatkan oleh metode penyedia data. Metode ini dianotasi oleh @DataProvider dan mengembalikan larik objek.

Parameter menggunakan Dataprovider

Anotasi @Parameters mudah, tetapi untuk menguji dengan beberapa kumpulan data, kita perlu menggunakan Penyedia Data.

Untuk mengisi ribuan formulir web menggunakan kerangka pengujian kami, kami memerlukan metodologi berbeda yang dapat memberi kami kumpulan data yang sangat besar dalam satu aliran eksekusi.

Konsep berbasis data ini dicapai dengan anotasi @DataProvider di TestNG.

Ini hanya memiliki satu atribut 'nama' . Jika Anda tidak menentukan atribut name maka nama Penyedia Data akan sama dengan nama metode terkait.

Penyedia data mengembalikan objek JAVA dua dimensi ke metode pengujian dan metode pengujian, akan memanggil M kali dalam array objek tipe M * N. Misalnya, jika DataProvider mengembalikan larik objek 2 * 3, kasus pengujian yang sesuai akan dipanggil 2 kali dengan 3 parameter setiap kali.

Contoh Lengkap

parameter paket;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class ParameterByDataprovider {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";@Sebelumnyapenyiapan public void () {// Buat objek driver firefoxSystem.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Uji kasus untuk memverifikasi kotak pencarian google* @ penulis param* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (Penulis string, String searchKey) melempar InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// nilai pencarian di kotak pencarian googlesearchText.sendKeys (searchKey);System.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Verifikasi apakah nilai di kotak telusur google benarAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [] di mana kolom pertama berisi 'penulis'* dan kolom kedua berisi 'searchKey'* /@DataProvider (name = "SearchProvider")Objek publik [] [] getDataFromDataprovider () {kembalikan Objek baru [] []{{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Panggil DataProvider dari kelas yang berbeda

Secara default, DataProvider berada di kelas yang sama tempat metode pengujian atau kelas dasarnya. Untuk memasukkannya ke dalam beberapa kelas lain kita perlu membuat metode penyedia data sebagai statis dan metode uji kita perlu menambahkan atribut dataProviderClass di @ Test penjelasan.

Contoh Kode

TestClass ParameterDataproviderWithClassLevel.java

parameter paket;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;public class ParameterDataproviderWithClassLevel {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";@Sebelumnyapenyiapan public void () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (Penulis string, String searchKey) melempar InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Cari teks di kotak teks googlesearchText.sendKeys (searchKey);System.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);// dapatkan teks dari kotak telusurString testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// verifikasi apakah kotak telusur memiliki nilai yang benarAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

parameter paket;import org.testng.annotations.DataProvider;public class DataproviderClass {@DataProvider (name = "SearchProvider")Objek statis publik [] [] getDataFromDataprovider () {kembalikan Objek baru [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Jenis Parameter di Dataprovider

Ada dua jenis parameter yang didukung oleh metode DataProvider.

Metode - Jika Penyedia Data yang SAMA harus berperilaku berbeda dengan metode pengujian yang berbeda, gunakan parameter Metode.

Dalam contoh berikut,

  • Kami memeriksa apakah nama metode testMethodA.
  • Jika ya, kembalikan satu set nilai
  • Lain kembalikan set nilai lain
parameter paket;import java.lang.reflect.Method;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class ParameterByMethodInDataprovider {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";@Sebelumnyapenyiapan public void () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (Penulis string, String searchKey) melempar InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Cari teks di kotak pencariansearchText.sendKeys (searchKey);// Cetak penulis dan string pencarianSystem.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Verifikasi apakah kotak teks google menunjukkan nilai yang benarAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) menampilkan InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Cari teks di kotak pencariansearchText.sendKeys (searchKey);// Cetak hanya string pencarianSystem.out.println ("Selamat Datang -> Pengguna tidak dikenal Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Verifikasi apakah kotak teks google menunjukkan nilai yang benarAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Di sini DataProvider mengembalikan nilai berdasarkan nama metode pengujian* @param m* @ kembali** /@DataProvider (name = "SearchProvider")Public Object [] [] getDataFromDataprovider (Metode m) {if (m.getName (). equalsIgnoreCase ("testMethodA")) {kembalikan Objek baru [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}lain{kembalikan Objek baru [] [] {{"Kanada"},{"Rusia"},{"Jepang"}};}}}

Ini hasilnya

ITestContext - Dapat digunakan untuk membuat parameter yang berbeda untuk kasus uji berdasarkan grup.

Dalam kehidupan nyata, Anda dapat menggunakan ITestContext untuk memvariasikan nilai parameter berdasarkan Metode Uji, host, konfigurasi pengujian.

Dalam contoh kode berikut

  • Kami memiliki 2 grup A & B
  • Setiap metode tes ditugaskan ke grup
  • Jika nilai grup adalah A, kumpulan data tertentu dikembalikan
  • Jika nilai grup B, kumpulan data lain dikembalikan
parameter paket;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.ITestContext;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class ParameterByITestContextInDataprovider {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (grup = {"A", "B"})penyiapan public void () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", grup = "A")public void testMethodA (Penulis string, String searchKey) melempar InterruptedException {{// cari kotak teks googleWebElement searchText = driver.findElement (By.name ("q"));// cari nilainyasearchText.sendKeys (searchKey);System.out.println ("Selamat Datang ->" + penulis + "Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// verifikasi nilai yang benar di kotak pencarianAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", grup = "B")public void testMethodB (String searchKey) menampilkan InterruptedException {{// temukan kotak telusur googleWebElement searchText = driver.findElement (By.name ("q"));// cari nilainyasearchText.sendKeys (searchKey);System.out.println ("Selamat Datang -> Pengguna tidak dikenal Kunci pencarian Anda adalah ->" + searchKey);Thread.sleep (3000);String testValue = searchText.getAttribute ("nilai");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// verifikasi nilai yang benar di kotak pencarianAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Di sini DAtaProvider akan menyediakan array Object berdasarkan ITestContext* @param c* @ kembali* /@DataProvider (name = "SearchProvider")Objek publik [] [] getDataFromDataprovider (ITestContext c) {Objek [] [] groupArray = null;untuk (Grup string: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = Objek baru [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};istirahat;}else if (group.equalsIgnoreCase ("B")){groupArray = Objek baru [] [] {{"Kanada"},{"Rusia"},{"Jepang"}};}istirahat;}return groupArray;}}

Catatan: Jika Anda langsung menjalankan kelas pengujian, pertama-tama akan memanggil penyedia data yang tidak bisa mendapatkan informasi grup karena grup tidak tersedia. Tetapi sebaliknya jika Anda memanggil kelas ini melalui testng.xml, itu akan memiliki info grup yang tersedia dengan ITestContext. Gunakan XML berikut untuk memanggil pengujian

Ringkasan :

  • Parameterisasi diperlukan untuk membuat Pengujian Berdasarkan Data .
  • TestNG mendukung dua jenis parameterisasi, menggunakan @ Parameter + TestNG.xml dan menggunakan @DataProvider
  • Dalam parameter @ Parameter + TestNG.xml dapat ditempatkan di tingkat suite dan tingkat pengujian. Jika

    Nama parameter yang sama dideklarasikan di kedua tempat; parameter tingkat pengujian akan mendapatkan preferensi atas parameter tingkat kesesuaian.

  • menggunakan @ Parameter + TestNG.xml hanya satu nilai yang dapat disetel dalam satu waktu, tetapi @DataProvider mengembalikan array 2d Objek .
  • Jika DataProvider ada di kelas yang berbeda maka kelas tempat metode pengujian berada, DataProvider harus menjadi metode statis .
  • Ada dua parameter yang didukung oleh DataProvider yaitu Method dan ITestContext.