Testng: Urutan eksekusi onStart(ISuite suite) pendengar salah dalam kasus suite dalam

Dibuat pada 28 Des 2017  ·  25Komentar  ·  Sumber: cbeust/testng

Versi TestNG

Catatan: hanya versi terbaru yang didukung

6.11

Perilaku yang diharapkan

Listener dipanggil untuk setiap suite, jika parent suite berisi child suite maka parent suite harus dijalankan terlebih dahulu sebelum menjalankan child suite.

Perilaku sebenarnya

Suite anak dijalankan terlebih dahulu sebelum menjalankan suite induk.

Apakah masalah dapat direproduksi pada runner?

  • [x] Kulit
  • [x] Maven
  • [x] Gradle
  • [x] Semut
  • [x] gerhana
  • [x] IntelliJ
  • [x] NetBeans

Contoh kasus uji

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ParentSuite" parallel="classes" thread-count="10">

    <suite-files>
        <suite-file path="child_suite.xml"/>
    </suite-files>

    <test verbose="1" name="SomeTest">
        <classes>
            <class name="com.example.SomeTest"/>
        </classes>
    </test>

</suite>

listener multi-suite user answer

Komentar yang paling membantu

Masalah yang sama terjadi pada versi 7.0.0-SNAPSHOT
melampirkan contoh proyek maven
testng-laporan-contoh.zip

Semua 25 komentar

Saat ini, suite-files seperti import, memasukkan <test> dari suite yang ditentukan dan hasilnya hanya satu suite.
Itu sebabnya onStart hanya dipanggil sekali.

@juherr sebenarnya ini disebut dua kali (untuk setiap file suite). Apakah perilakunya berubah sejak 6.11?

Oke, dua panggilan adalah masalah.

@krmahadevan Apa perilaku yang diharapkan dari onStart dalam kasus suite-files ?

@juherr - Saya pikir itu perilaku yang benar.

Sebagai bagian dari #1285, saya pikir kami mengubah perilaku ini

Saya dapat mereproduksi masalah pesanan tetapi, pada kenyataannya, TestNG selalu menjalankan suite anak sebelum suite induk (https://github.com/cbeust/testng/blame/master/src/main/Java/org/testng/TestNG .java#L1191-L1199) dan pendengar tidak ditambahkan dengan benar sebelum #1285.

6.13 seharusnya memperbaiki masalah duplikat dengan #1533

@avarabyeu
Saya dapat mengubah perilaku pemesanan dan menjalankan master suite sebelum child suite tetapi master suite akan selesai sebelum anak-anaknya.
Apakah akan baik-baik saja untuk Anda? Manajemen anak yang lebih baik menyiratkan perubahan besar yang mungkin tidak akan kita lakukan.

Bisakah Anda mengonfirmasi bahwa 6.13 sedang memperbaiki masalah duplikasi acara?

@juherr Dapat mengonfirmasi bahwa 6.13 tidak memiliki masalah dengan duplikasi.

Saya dapat mengubah perilaku pemesanan dan menjalankan master suite sebelum child suite tetapi master suite akan selesai sebelum anak-anaknya.

Ya akan lebih mudah bagi kita untuk menangani acara dalam kasus ini. Terima kasih!

@cbeust @krmahadevan WDYT jika kita mengubah eksekusi urutan suite/anak?

@avarabyeu - Hanya mencoba memahami, bagaimana urutan eksekusi itu penting? Mengapa bermasalah jika suite anak dijalankan terlebih dahulu dan kemudian suite induk?

@juherr - apakah kita benar-benar perlu mengubah ini? Kita dapat dengan mudah menyelesaikan ini pada tingkat pengujian itu sendiri dengan memindahkan konten master suite ke suite-nya sendiri, dan kemudian membuat master suite berfungsi sebagai suite suite bukan? Hanya mencoba memahami apa yang akan kita dapatkan sebagai manfaat?

@krmahadevan Anda akan menemukan detail lebih lanjut di https://github.com/reportportal/reportportal/issues/273
Tujuannya adalah untuk menemukan perbaikan singkat untuk masalah ini tanpa merusak sesuatu.
Dengan lebih banyak waktu, saya lebih suka memiliki manajemen suite anak yang tepat tetapi saya tidak merasa itu sangat penting.
Jika saya memahami solusi Anda, Anda mengusulkan untuk menggabungkan semua anak <test> menjadi induk <suite> , bukan?

@krmahadevan ReportPortal adalah alat untuk pelaporan hasil real-time dari mesin uji yang berbeda. Jadi pada dasarnya, kliennya menangani peristiwa yang dipicu oleh pendengar testng dan mengirimkannya ke server. Urutan peristiwa itu penting karena berdasarkan mereka ReportPortal mengisi struktur data internal yang berbasis pohon - misalnya, tidak mungkin membuat anak sebelum induknya.

@juherr

Jika saya memahami solusi Anda, Anda mengusulkan untuk menggabungkan semua anakke orang tua, Baik?

Tidak. Bukan itu yang saya maksud. Saya pada dasarnya mengatakan bahwa file xml parent suite tidak boleh memiliki entri tag <test> di dalamnya tetapi hanya berisi entri <suite-file> .

@avarabyeu - Terima kasih telah berbagi konteks tambahan. Saya masih tidak dapat memahami ide di balik urutan eksekusi yang penting, karena TestNG menjalankan acara sebelum dan sesudah eksekusi suite. Jadi, terlepas dari apakah suite anak dijalankan atau induknya, peristiwa terkait akan dipicu no ?

Tidak. Bukan itu yang saya maksud. Saya pada dasarnya mengatakan bahwa file xml suite induk seharusnya tidak adatag entri di dalamnya tetapi hanya berisientri.

Baik! Benar, itu adalah sesuatu yang dapat kita periksa dan peringatkan.

Jadi, terlepas dari apakah suite anak dijalankan atau induknya, peristiwa terkait akan dipicu no ?

Ya, tapi kami membangun struktur yang sama di database internal kami - parent suite -> child suite. Jadi jika suite anak dimulai lebih awal dari induk, kami tidak dapat menanganinya di sisi server.

@avarabyeu - Jadi apa yang terjadi jika Anda tidak memiliki tag <test> sama sekali di file master suite Anda tetapi hanya memiliki tag <suite-file> di dalamnya? Apakah itu tidak akan berhasil untuk Anda?

Saya pada dasarnya mencoba melihat apa yang dapat dilakukan untuk membantu Anda mengatasi masalah tanpa perubahan kode apa pun.

@krmahadevan sebenarnya, ini pertanyaan yang bagus. Masalah datang dari klien kami dan saya tidak begitu yakin apakah mereka dapat menyesuaikan file testng.xml mereka untuk menyelesaikan masalah integrasi ini. Biarkan saya memeriksa apa yang terjadi jika kita tidak punyadi kamar utama.

Menutup masalah ini untuk saat ini. @avarabyeu Tolong beri komentar kembali jika Anda memiliki pembaruan pada kueri yang saya ajukan sehingga kami dapat mengatasi masalah ini lebih lanjut jika perlu.

@krmahadevan @avarabyeu
Saya mencoba menjalankan suite suite-file s, tanpa tag <test> di file master suite dan masalah masih terjadi.
(diuji pada TestNG v6.14.3)

Ada beberapa perubahan yang dibuat pada basis kode terbaru di TestNG sehubungan
untuk pemesanan suite dll,

Jadi bisakah Anda mencoba sekali lagi menggunakan TestNG 7.0.0-SNAPSHOT dan memposting kembali
hasil Anda?

Jika masih bermasalah, mohon bantuannya untuk membagikan contoh yang bisa
digunakan untuk mereproduksi masalah.

Masalah yang sama terjadi pada versi 7.0.0-SNAPSHOT
melampirkan contoh proyek maven
testng-laporan-contoh.zip

@ulmanA - Sampel yang Anda bagikan tidak mengatakan banyak hal (setidaknya itu tidak eksplisit untuk saya).

Anda pada dasarnya memiliki file suite bernama all-suites.xml yang terlihat seperti di bawah ini

<suite name="All Suites" verbose="2">
    <suite-files>
        <suite-file path="suite1.xml"/>
        <suite-file path="suite2.xml"/>
    </suite-files>
</suite>

Dan ketika saya menjalankan ini, saya perhatikan bahwa suite1 dijalankan terlebih dahulu, lalu suite2 , yang mengarah ke all_suites menyelesaikan sendiri.

...
... TestNG 7.0.0-SNAPSHOT by Cédric Beust ([email protected])
...
Suite 1 -> TEST 1
Suite 1 -> TEST 2

===============================================
All Suites (0)
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================
Suite 2 -> TEST 2
Suite 2 -> TEST 1

===============================================
All Suites (1)
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

===============================================
All Suites
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
===============================================

Jadi apa harapan Anda di sini? Itu tidak jelas.

all_suites divisualisasikan sebagai container of suites sehingga akan selesai di akhir.

@avarabyeu
Tolong jawab.

@krmahadevan Saya bukan reporter bug tetapi saya mengharapkan urutan eksekusi berikut:

  1. ISuiteListener#onStart - all_suites
  2. ISuiteListener#onStart - suite1
  3. ISuiteListener#onFinish - suite1
  4. ISuiteListener#onStart - suite2
  5. ISuiteListener#onFinish - suite2
  6. ISuiteListener#onFinish - all_suites

Jadi ya, all_suites harus selesai terakhir tetapi harus dimulai terlebih dahulu, karena berisi semua suite lainnya! Namun, saat ini all_suites tidak berperilaku sebagai wadah root tetapi sebagai wadah apa punitem yang tidak termasuk dalam suite bersarang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat