Cucumber-js: Sebelum/Sesudah fitur kait dan peretasan

Dibuat pada 23 Agu 2017  ·  10Komentar  ·  Sumber: cucumber/cucumber-js

Saya mengerti alasan di balik tidak memiliki kait fitur BeforeFeature/AfterFeature. Tes idealnya harus diisolasi. Namun, untuk alasan kinerja praktis, lebih baik menyiapkan hal-hal seperti perlengkapan basis data satu kali per fitur.

Solusi yang ditentukan di #614 tidak memadai karena:

  1. Itu tidak akan memanggil Setelah ketika fitur berturut-turut memiliki tag yang sama.
  2. Itu tidak akan memanggil Setelah jika fitur yang ditandai adalah tes terakhir di build.

Sebelum 3.0.0 dimungkinkan untuk meretas fungsi ini menggunakan konteks yang diteruskan sebagai argumen pertama registerHandler('BeforeFeatures').

Adakah pemikiran untuk menerima PR untuk fungsi ini, atau menyediakan konteks serupa di 3.0 untuk setidaknya memungkinkan peretasan lagi?

Komentar yang paling membantu

+1 untuk kait BeforeFeature/AfterFeature
Saya setuju dengan kebutuhan untuk menyeimbangkan kinerja dengan isolasi pengujian. Cara kerangka dibangun sekarang, sangat sedikit yang menghubungkan skenario dalam satu fitur, kecuali untuk langkah-langkah latar belakang yang diulang. Dalam beberapa kasus, kami mungkin tidak ingin langkah-langkah latar belakang diulang, melainkan, lakukan itu sekali di awal fitur, dan dirobohkan hanya setelah semua skenario selesai.

Semua 10 komentar

Itu tidak akan memanggil Setelah ketika fitur berturut-turut memiliki tag yang sama.

Saya tidak mengerti. Bisakah Anda memberikan detail lebih lanjut tentang ini? Anda dapat membuat pengait After yang khusus untuk tag yang ada atau tidak. Perhatikan sintaks tag telah berubah sejak solusi itu diberikan.

Itu tidak akan memanggil Setelah jika fitur yang ditandai adalah tes terakhir di build.

Sekali lagi, saya tidak mengerti ini, tolong jelaskan lebih lanjut. Anda seharusnya dapat menggunakan After hook, tetapi Anda kehilangan konteks apakah ini yang terakhir atau tidak. Idealnya Anda tidak perlu melakukan teardown di sini.


Anda juga mencoba membuat skenario terhubung yang tidak disarankan. Saya akan menyarankan salah satu dari yang berikut:

  • putuskan skenarionya
  • jalankan mentimun-js beberapa kali memuat file dukungan yang berbeda dan gunakan BeforeAll / AfterAll

Untuk lebih jelasnya, solusi yang saya maksud adalah:

this.Before({ tags: ['<strong i="6">@featurehook</strong>'] }, function () {
  // log user in (if needed)
})

this.Before({ tags: ['~<strong i="7">@featurehook</strong>'] }, function () {
  // log user out (if needed)
})

Pertimbangkan beberapa fitur:

<strong i="11">@featurehook</strong>
Feature: feature 1
   Scenario: scenario 1

<strong i="12">@featurehook</strong>
Feature: feature 2
   Scenario: scenario 2

Feature: feature 3
   Scenario: scenario 3

<strong i="13">@featurehook</strong>
Feature: feature 4
   Scenario: scenario 4

Jika dijalankan dalam urutan di atas, teardown tidak akan terjadi antara fitur 1 dan fitur 2. Teardown juga tidak akan terjadi setelah fitur 4 karena tidak akan ada tes yang cocok ~ @featurehook (diakui ini dapat diperbaiki dengan Lagipula).

Saya tidak mencoba membuat skenario terhubung, bagi saya itu bebas untuk memutuskan tradeoff antara isolasi dan kinerja.

Ambil contoh pengujian yang menyiapkan server SMTP pengujian dengan konfigurasi berbeda:

<strong i="20">@smtpConfig1</strong>
Feature: ....

<strong i="21">@smtpConfig2</strong>
Feature: ....

Mungkin ada efek samping antara skenario dengan tidak merobohkannya, tetapi trade-off antara kemurnian dan kinerja mungkin sepadan dalam kasus ini.

Maaf tapi ini bukan sesuatu yang menurut saya harus didukung. Ada kemampuan untuk berbagi status di semua skenario dan di satu skenario yang mencakup sebagian besar kasus. Contoh Anda di komentar terakhir (dengan @featurehook) tidak diselesaikan dengan memiliki BeforeFeature / AfterFeature.

+1 untuk kait BeforeFeature/AfterFeature
Saya setuju dengan kebutuhan untuk menyeimbangkan kinerja dengan isolasi pengujian. Cara kerangka dibangun sekarang, sangat sedikit yang menghubungkan skenario dalam satu fitur, kecuali untuk langkah-langkah latar belakang yang diulang. Dalam beberapa kasus, kami mungkin tidak ingin langkah-langkah latar belakang diulang, melainkan, lakukan itu sekali di awal fitur, dan dirobohkan hanya setelah semua skenario selesai.

Karena saya menggunakan layanan seperti Browserstack, yang terus-menerus lambat dan menyakitkan untuk digunakan (dan begitu juga penyedia server jarak jauh lainnya seperti Saucelabs), saya biasanya menggunakan event handler BeforeFeature dan AfterFeature untuk mengatur sesi Selenium dan teardown per file fitur.

Oleh karena itu, skenario yang terkait dengan fitur yang disebutkan dalam file saya berjalan bersama dan untuk memulai dari awal setiap skenario, saya menyegarkan layar browser dan status aplikasi saya disegarkan untuk pengujian saya. Jadi dengan cara mereka terisolasi dan itu juga tidak mempengaruhi kinerja tes.

Ini harus dipertimbangkan sebagai kasus untuk membawa kait fitur Sebelum/Sesudah untuk digunakan daripada mengeksekusi mentimunjs per file fitur seperti yang disarankan di atas.

BeforeFeature/AfterFeature hook sangat penting untuk pengujian e2e/uat/bdd/call-it-whatever-you-want bahwa mentimun dibuat.

"Pesaing" utama Mentimun mendukung ini (misalnya JBehave, RobotFramework), dan tanpa peretasan; itu adalah fitur yang tepat dari kerangka kerja.

Masalah ini jelas merupakan penghalang untuk menggunakan Mentimun.

Hai... Saya menghadapi masalah terkait ini. Dalam kasus saya, saya menggunakan kait Sebelum dan Setelah yang ditandai untuk membuat/menghapus data yang akan digunakan untuk menguji UI. Di kait Sebelum saya mencapai titik akhir API dan membuat data, dan di kait Setelah saya menekan titik akhir API lain untuk menghapusnya (saya menyimpan id objek yang dikembalikan dalam respons buat, dan kemudian saya membangun muatan hapus dengan id itu )

Masalahnya adalah, ketika skenario yang menggunakan data itu (dan memicu kait) adalah yang terakhir dieksekusi, kait setelahnya tidak pernah dipicu ...

Adakah cara untuk mengatasi ini??

Terima kasih

+1 untuk Fitur Sebelum dan Setelah.
Kasus penggunaan kami adalah ini: Kami menemukan bug di browser tertentu yang tidak muncul di browser lain.

Kami ingin menandai fitur seperti ini:

@ie-8-only
Business Need: IE8 should have limited functionality, but what is displayed, should be displayed correctly

@no-access @ssl-insecurity <strong i="8">@security</strong> @BUG-1876
Scenario: No access
   Given I am on the home page
   When I see that my browser is not supported
   Then I should not be able to access the core site functionality

@formatting-issue <strong i="9">@bugs</strong> @BUG-1210
Scenario: The menu should not be formatted like a staircase
   For the users to be able to navigate to the about us / contact us area of the site, the site navigation should be active
   Given I am on the home page
   When I see the menu
   Then it should be displayed in a line

Ini akan memungkinkan kita untuk menutup browser dan membuka IE di hook BeforeFeature, dan membuka kembali browser yang kita gunakan untuk sisa suite di hook AfterFeature. Menutup dan membuka kembali browser membutuhkan banyak waktu saat Anda melakukannya untuk setiap Skenario, yang akan menjadikan fitur ini hebat untuk digunakan.

Catatan:
Saya tahu ada alternatif yang melibatkan objek dunia (mengatur browser saat ini di sana, dan hanya menutup jika browser bukan yang kita butuhkan di BeforeAll Hook untuk ini), tetapi tampaknya lebih sederhana untuk melakukannya dengan cara ini, dan itu harus dilakukan di hook sudah atau Selenium memutuskan itu akan membuang hissy fit separuh waktu.

Ada saat-saat lain di mana Anda mungkin ingin melampirkan teks ke Fitur sebagai deskripsi tambahan untuknya di Hook BeforeFeature, yang merupakan contoh lain di mana ini akan berguna

Saya pikir juga sebelum/sesudah kait fitur akan berguna pada jenis tes tertentu. Misalnya Specflow, perpustakaan Mentimun untuk .NET, telah menerapkan ini:
https://specflow.org/documentation/Hooks/

Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat