Grup di TestNG

โšก Ringkasan Cerdas

Grup di TestNG Memungkinkan Anda memberi tag pada metode pengujian dengan label logis, lalu menyertakan atau mengecualikannya melalui rangkaian XML. Pendekatan ini menyederhanakan pengujian smoke test, regresi, dan pengujian berbasis dependensi tanpa perlu menulis ulang kode. Java kode.

  • ๏ธ Sintaks Anotasi: penggunaan @Test(groups = {"smoke","regression"}) untuk memberi tag pada metode apa pun dengan satu atau lebih nama grup logis.
  • ๐Ÿ“œ Kontrol XML: The <groups><run><include> ke <exclude> Tag di dalam testng.xml menentukan metode mana yang diberi tag yang akan dieksekusi.
  • ๐Ÿ”— Dependensi: The dependsOnGroups Atribut tersebut memaksa pengurutan sehingga kelompok prasyarat selalu selesai sebelum pengujian yang bergantung dimulai.
  • ๐Ÿค– Pemilihan AI: Alat pengujian berbasis AI memetakan perubahan kode ke grup yang relevan, sehingga hanya rangkaian pengujian yang terpengaruh yang dijalankan pada setiap commit.
  • ๐Ÿงช TestNG 7.x: Rilis modern menjaga agar grup tetap sepenuhnya kompatibel dengan eksekusi paralel, listener, dan pipeline Maven Surefire.

Grup di TestNG

TestNG adalah kerangka kerja pengujian yang mencakup pengujian unit, fungsional, ujung-ke-ujung, UI, dan integrasi untuk Java proyek.

Anda dapat menjalankan satu paket atau banyak paket (sebuah paket merangkum kelas-kelas terkait dalam tata letak direktori yang ditentukan) dengan membuat rangkaian XML dan memicunya melalui Maven.

TestNG Kelompok dengan Contoh

Anda menggunakan grup di TestNG kapan:

  • Anda tidak ingin menyebarkan metode pengujian ke banyak kelas hanya berdasarkan area fungsional, dan
  • Anda ingin melewati (tidak menjalankan) kasus uji terpilih seolah-olah kasus uji tersebut tidak ada dalam basis kode.
  • Untuk mencapai kedua tujuan tersebut, Anda mengelompokkan metode ke dalam grup-grup logis. TestNG lalu menghormati filter โ€œincludeโ€ dan โ€œexcludeโ€ yang dideklarasikan dalam rangkaian XML.

Cuplikan di bawah ini menunjukkan sintaks penandaan grup yang digunakan pada metode pengujian.

@Uji (kelompok = { "ikatan", โ€œikatan_kuatโ€ })

Dua nama grup digunakan di sini, yaitu bonding ke strong_tiesIni adalah label logis yang dapat Anda ganti namanya agar sesuai dengan proyek Anda.

The <groups> Tag ini menandai awal filter grup di dalam rangkaian XML.

Kemudian Anda menyesuaikan XML untuk memilih grup yang diinginkan dari kelas yang diberi tag. Contoh di bawah ini menunjukkan sintaks deklarasi grup.

<kelompok>
<menjalankan>
<memasukkan nama="ikatan" />
</menjalankan>
</kelompok>

Misalkan sebuah kelas tunggal berisi 10 metode pengujian.

Dari metode-metode tersebut:

  • 6 metode membawa bonding kelompok, dan
  • 4 metode membawa strong_ties kelompok.

Selanjutnya, Anda menyiapkan Maven dan Java jalur dan gunakan Eclipse IDE untuk mendemonstrasikan penggunaan grup melalui file XML di dalam sebuah JavaProyek berbasis Maven.

Buat XML untuk TestNG dengan tanda

  • File XML (Extensible Markup Language) dalam kerangka kerja Maven menyimpan konfigurasi untuk satu atau lebih pengujian, yang dideklarasikan di dalam menandai.
  • Setiap entri uji dibungkus dalam sebuah label dan dapat menampung satu atau lebih TestNG kelas.
  • A Java kelas dengan satu atau lebih @Uji anotasi pada metodenya diperlakukan sebagai TestNG kelas.

Beberapa tag muncul secara berurutan untuk membangun file testng.xml yang berfungsi, yaitu , , Dan .

  • The tag tersebut menyimpan nama tingkat suite yang digunakan dalam TestNG laporan ringkasan eksekusi.
  • The <test name=โ€Guru Demo Uji Asap 99โ€> Tag tersebut berisi nama pengujian logis; laporan menggunakannya untuk menghitung jumlah pengujian yang lulus, gagal, dan dilewati, serta total waktu eksekusi dan metadata grup.
  • The tag menunjuk ke kelas pengujian, di mana com.group.guru99 adalah paket dan TC_Class1 adalah nama kelas.

<!DOCTYPE rangkaian PELACAKAN PENGIRIMAN โ€œhttp://testng.org/testng-1.0.dtdโ€>
<rangkaian nama=โ€œSuiteโ€>
<uji nama="Guru Demo Uji Asap 99โ€>
<kelompok>
<menjalankan>
<memasukkan nama=โ€œikatan_kuatโ€ />
</menjalankan>
</kelompok>
<kelas-kelas>
<kelas nama=โ€œcom.group.guru99.TC_Class1โ€ />
</kelas-kelas>
</uji>
</rangkaian>

Konfigurasi XML ini dirujuk dalam panduan video di bagian selanjutnya.

"kecualikan" atau "sertakan" dalam XML pengujian

Jika mekanisme pengelompokan terasa terlalu berat untuk filter kecil, rangkaian testng.xml juga memungkinkan Anda untuk mengecualikan atau menyertakan metode pengujian individual berdasarkan nama.

Kecualikan TagSintaks untuk tag pengecualianmengecualikan nama=โ€œ${TEST_CASE_NAME}โ€ />
Sertakan TagSintaks untuk tag includememasukkan nama=โ€œ${TEST_CASE_NAME}โ€ />

Catatan: Anda dapat menyertakan atau mengecualikan banyak kasus uji dalam satu kali proses, dan sintaks yang sama berlaku untuk filter grup.

Menggunakan dependsOnGroups untuk Eksekusi Berurutan

Lebih dari sekadar inklusi, TestNG memungkinkan satu kelompok bergantung pada kelompok lain dengan menggunakan dependsOnGroups atribut. Runner memastikan setiap metode dalam grup induk selesai sebelum metode dependen dimulai, yang menjaga prasyarat tetap andal.

  • Login terlebih dahulu, kemudian transaksi: Beri tag pada metode login dengan group = "auth", dan tes transfer tag dengan dependsOnGroups = {"auth"}Tes transfer hanya dijalankan setelah proses login berhasil.
  • Lewati jika gagal: Jika suatu metode dalam grup induk gagal, TestNG menandai metode dependen sebagai dilewati alih-alih langsung menggagalkannya, yang menjaga keakuratan laporan.
  • Kombinasikan dengan alwaysRun: Metode pembersihan harus diatur alwaysRun = true Jadi, proses pembongkaran tetap berjalan meskipun grup hulu mengalami kegagalan.

Pola ini umum terjadi pada rangkaian pengujian ujung-ke-ujung di mana pengaturan API harus selesai sebelum pernyataan UI dijalankan.

Run TestNG Kelompokkan, sertakan, kecualikan kode (demo video)

Berikut adalah panduan langkah demi langkah Java kode dan rangkaian XML yang menggerakkan mengelompokkan, mengecualikan, dan memasukkan tingkah laku.

Skenario Uji: Peluncuran GuruDi situs perbankan demo 99, verifikasi beberapa elemen di halaman login, masukkan kredensial, dan verifikasi ulang beberapa item di dasbor setelah login.

Run TestNG Kelompokkan, Sertakan, Kecualikan Code

Catatan: Setiap langkah berada dalam metodenya masing-masing, tetapi pada saat runtime urutannya bergantung pada entri dalam rangkaian XML.

  • Metode 1: Inisialisasi browser dan luncurkan URL (tc01LaunchURL()).
  • Metode 2: Periksa judul halaman login (tc02VerifyLaunchPage()).
  • Metode 3: Masukkan nama pengguna dan kata sandi pada formulir login (tc03EnterCredentials()).
  • Metode 4: Verifikasi keberadaan ID Manajer di dasbor pengguna (tc04VerifyLoggedInPage()).
  • Metode 5: Periksa tautan tambahan di dasbor pengguna (tc05VerifyHyperlinks()).

Code untuk skenario ini:

paket com.group.guru99;

mengimpor java.util.bersamaan.TimeUnit;

mengimpor org.openqa.selenium.By;
mengimpor org.openqa.selenium.WebDriver;
mengimpor org.openqa.selenium.firefox.FirefoxPengemudi;
mengimpor org.testng.Assert;
mengimpor org.testng.annotations.Test;

kelas umum Kelas_TC1 {
publik statis akhir webdriver webDriver = yang baru Firefoxsopir();

String launchPageHeading = โ€œ//h3[text()='Guru99 Bank']โ€;
terakhir String userName_element = โ€œ//input[@name='uid']โ€, password_element = โ€œ//masukkan[@name='kata sandi']โ€,
elemen_masuk = โ€œ//input[@name='btnLogin']โ€;
terakhir String userName_value = โ€œmngr28642โ€, nilai_kata_sandi = โ€œydAnateโ€;
terakhir String managerID = โ€œ//td[contains(text(),'ID Manajer')]โ€;
terakhir String Pelanggan baru = โ€œ//a[@href='addcustomerpage.php']โ€, transfer dana = โ€œ//a[@href='FundTransInput.php']โ€;

/** Kasus uji ini menginisialisasi webDriver */
@Uji(kelompok = { "ikatan", โ€œikatan_kuatโ€ })
kekosongan publik tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, Satuan Waktu.DETIK);
webDriver.get(โ€œhttps://www.demo.guru99.com/V4/โ€);
}

/** Memeriksa keberadaan judul pada halaman login */
@Uji(kelompok = { "ikatan" })
kekosongan publik tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
โ€œJudul Halaman Utama tidak ditampilkanโ€);
Sistem.keluar.println(โ€œJudul Halaman Utama ditampilkanโ€);
}

/** Masukkan nama pengguna, kata sandi, lalu klik masuk */
@Uji(kelompok = { "ikatan", โ€œikatan_kuatโ€ })
kekosongan publik tc03MasukkanKredensial() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** Memverifikasi ID manajer di dasbor */
@Uji(kelompok = { โ€œikatan_kuatโ€ })
kekosongan publik tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
โ€œLabel ID Manajer tidak ditampilkanโ€);
Sistem.keluar.println(โ€œLabel ID Manajer ditampilkanโ€);
}

/** Memeriksa tautan pelanggan baru dan tautan transfer dana di dasbor */
@Uji(kelompok = { "ikatan" })
kekosongan publik tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
โ€œHyperlink pelanggan baru tidak ditampilkanโ€);
Sistem.keluar.println(โ€œHyperlink pelanggan baru ditampilkanโ€);

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
โ€œHyperlink Transfer Dana tidak ditampilkanโ€);
Sistem.keluar.println(โ€œTautan transfer dana ditampilkanโ€);
}
}

Harap diperhatikan: kredensial perbankan demo tetap berlaku selama kurang lebih 20 hari, jadi saat dijalankan secara lokal mungkin akan muncul kesalahan kredensial tidak valid setelah jangka waktu tersebut berakhir.

Penjelasan kodenya:

Lima metode pengujian, satu per tindakan, masing-masing membawa groups atribut pada @Test anotasi.

Dua label grup logis tersebut adalah strong_ties ke bonding.

  • Metode pertama dan ketiga membawa keduanya. bonding ke strong_tiesJadi, keduanya akan berjalan setiap kali salah satu grup disertakan dalam rangkaian. Ini adalah pola umum untuk penggunaan bersama. Kasus cobaan tangga.
  • Metode kedua hanya diberi tag dengan bonding, jadi hanya berjalan saat bonding Grup tersebut termasuk.
  • Metode keempat hanya diberi tag dengan strong_ties, jadi program ini hanya berjalan jika grup tersebut disertakan.
  • Metode kelima hanya diberi tag dengan bonding, jadi hanya berjalan saat bonding Grup tersebut termasuk.

Berikut empat skenario eksekusi:

Skenario 1: Jalankan setiap metode pengujian tanpa memandang grup. Hapus <groups> blok dari XML yang sedang berjalan.

Skenario 2: Hanya jalankan metode yang terkait dengan grup yang dipilih, yaitu strong_ties or bondingSilakan lihat video di bawah ini.

  • Di bagian pertama video tersebut, <groups> Blok kode tersebut dikomentari, sehingga setiap metode pengujian akan dijalankan.
  • Pada bagian kedua, filter grup dipulihkan, dan hanya metode yang cocok yang dijalankan.

Skenario 3: Gunakan filter pengecualian untuk melewati kasus uji yang dipilih. Silakan lihat videonya.

  • Demo ini tidak termasuk tc02 berdasarkan nama dalam XML yang sedang berjalan, dan laporan hasil mengkonfirmasi bahwa metode yang dikecualikan tidak berjalan.

Skenario 4: Terapkan filter penyertaan untuk hanya menjalankan tc01LaunchURL, tc03EnterCredentials, dan tc05VerifyHyperlinksSilakan lihat video tersebut.

Pada eksekusi ini, hanya metode yang tercantum dalam filter include yang dijalankan, persis seperti yang dikonfigurasi.

Unduh contoh proyek dari tautan di bawah ini.

Unduh yang di atas Code

Kesimpulan

Grup di TestNG memberikan struktur pada hal yang besar Selenium dan rangkaian unit dengan mengganti pemisahan kelas satu kali dengan filter XML deklaratif.

Beri tag pada metode Anda dengan @Test(groups = {...}), lalu gunakan <include>, <exclude>, dan dependsOnGroups untuk menjalankan pengujian asap (smoke test), regresi, dan pengujian ujung-ke-ujung (end-to-end test) dari proyek Maven yang sama. TestNG 7.x.

Pertanyaan Umum Demo Slot

Grup adalah label logis yang melekat pada metode pengujian melalui groups atribut aktif @TestKemudian, rangkaian XML memilih grup menggunakan filter penyertaan dan pengecualian, sehingga Anda dapat memutuskan pada saat runtime metode bertag mana yang akan dieksekusi.

Inside <groups><run>, yang <include name="..."> menandai grup daftar putih untuk dijalankan, dan <exclude name="..."> memblokir mereka. TestNG menerapkan pengecualian setelah penyertaan, sehingga grup yang dikecualikan selalu dilewati, bahkan ketika juga tercantum dalam penyertaan.

The dependsOnGroups atribut aktif @Test pasukan TestNG untuk menjalankan setiap metode dalam grup yang tercantum sebelum metode yang bergantung dimulai. Jika ada metode prasyarat yang gagal, TestNG menandai metode dependen sebagai dilewati, bukan gagal.

Iya nih. Itu groups atribut menerima array, jadi @Test(groups = {"smoke", "regression"}) menempatkan satu metode di kedua kelompok. TestNG Metode tersebut dijalankan setiap kali salah satu grup disertakan dalam rangkaian pengujian, yang menjaga agar langkah-langkah yang digunakan bersama tetap efisien (DRY).

TestNG 7.x adalah versi yang terus dipelihara, dengan rilis di bawah org.testng:testng Koordinat Maven. Ini menjaga agar grup, eksekusi paralel, dan listener sepenuhnya kompatibel dengan teknologi modern. Selenium Proyek 4 dan JDK 17.

Alat pengujian dampak berbasis AI menganalisis perbedaan kode, kemudian memetakan kelas yang diubah ke grup yang mencakupnya. Pipeline hanya menjalankan grup yang diberi tag pada setiap permintaan pull, sehingga mengurangi waktu umpan balik sekaligus menjagaping jalur berisiko sedang diuji.

Ya. Algoritma pengelompokan AI membaca log kegagalan historis, menandai pengujian yang tidak stabil, dan mengusulkan subset stabil yang diberi label sebagai regressionPara insinyur menyetujui daftar tersebut, lalu TestNG Grup tersebut dijalankan setiap malam, yang menjaga agar ruang server tetap ringkas tanpa mengurangi cakupan layanan.

Ringkaslah postingan ini dengan: