Saya telah menghabiskan minggu lalu belajar selenium dan membangun serangkaian tes web untuk situs web yang akan kami luncurkan. senang belajar, dan saya telah mengambil beberapa teknik lokasi xpath dan css.
masalahnya bagi saya, adalah melihat sedikit perubahan memecahkan tes - perubahan ke div, id, atau nomor autoid yang membantu mengidentifikasi widget merusak sejumlah tes - sepertinya sangat rapuh.
jadi apakah Anda sudah menulis tes selenium (atau yang serupa lainnya), dan bagaimana Anda menghadapi sifat rapuh tes (atau bagaimana Anda menghentikannya menjadi rapuh), dan tes apa yang Anda gunakan untuk selenium?
Jawaban:
Tujuan Selenium adalah untuk membuat tes integrasi berbasis UI .
Tes integrasi memverifikasi bahwa semua komponen sistem Anda bekerja dengan benar ketika digunakan bersama. Tes integrasi bukan merupakan strategi pengujian yang memadai dan melengkapi strategi pengujian lainnya yang memiliki fokus berbeda, misalnya pengujian unit dan pengujian penerimaan .
Tes yang digerakkan oleh UI pada dasarnya rapuh, meskipun Selenium dan Watir adalah langkah maju dari masa awal alat rekam dan pemutaran . Ada beberapa cara untuk mengatasi masalah ini - inilah kompilasi saran dari beberapa pakar kelas dunia:
Jangan mencoba mendapatkan semua cakupan tes Anda dari jenis tes ini . Robert C. Martin berpendapat bahwa cakupan kode Anda dengan tes integrasi harus sekitar 20% . Sangat tidak praktis untuk menguji semua jalur eksekusi ketika input beberapa lapisan aplikasi pergi.
Dapatkan sebagian besar cakupan tes dari tes unit dan penerimaan . Cari tautan ke artikel Gojko Adzic di jawaban FinnNk . Adzic berulang kali berdebat tentang pengujian logika bisnis melalui tes penerimaan dan memintas UI.
Tetapi sejumlah tes berbasis UI masih perlu ditulis . Di sinilah Anda memerlukan saran praktis selain "jangan menguji logika bisnis Anda melalui UI." Saya akan merekomendasikan blog Patrick Wilson-Welsh sebagai titik awal.
sumber
Hal yang paling penting saat membuat tes seperti ini setelah Anda melewati angka sepele adalah ide perubahan simetris - perubahan kecil dalam kode harus menghasilkan perubahan kecil di ruang tes.
Sebagai contoh, katakanlah Anda mengumpulkan nama seseorang dengan dua kotak teks dalam 100 tes. Jika Anda menulis tes-tes itu secara niavely (atau mungkin menggunakan playback-record) maka Anda akan memiliki 100 tes untuk diubah. Jika sebaliknya Anda abstrak langkah 'masukkan nama' dan gunakan itu dalam tes Anda alih-alih langsung menggunakan selenium maka Anda hanya memiliki 1 tempat untuk melakukan perubahan. Ini akan tergantung pada konteks Anda berapa banyak lapisan abstraksi yang Anda gunakan - tetapi menggunakan abstraksi akan sangat membantu membuat tes Anda dapat dipertahankan.
Hal penting kedua adalah memastikan penyeleksi Anda didasarkan pada hal yang paling penting dan paling tidak mungkin berubah. Terkadang ini akan menjadi id atau kelas atau bisa juga berupa teks di dalam atau di sekitar elemen. Selalu lebih suka pemilih paling sederhana (misalnya id) tetapi kadang-kadang untuk mencapai ini Anda harus menggunakan sesuatu seperti xpath.
Gojko Adzic memiliki banyak nasihat hebat di blognya dalam hal pengujian semacam ini - lihat Sine of Death-nya dan cara menghindarinya secara khusus.
sumber
Pengujian memastikan bahwa kode berperilaku seperti yang diharapkan. Jika tes Anda rusak secara berkala, maka tes tersebut tidak menguji hal yang benar atau pengembang tidak peduli dengan tes tersebut.
Secara pribadi saya berpikir bahwa jika kehadiran
<div>
tag memecahkan tes maka tes tidak perlu tergantung pada tag sekitarnya, dan pendekatan yang lebih lunak harus diambil.sumber