Saya baru saja menerapkan lapisan caching di aplikasi web saya, dan sekarang saya bertanya-tanya bagaimana QA seharusnya mengujinya, karena caching transparan bagi pengguna.
Satu ide yang saya miliki adalah untuk meletakkan logging dalam metode yang memanggil kode yang mengisi cache, dan merekam ketika suatu objek ditarik dari cache dan ketika itu membutuhkan rekreasi dari database, dan kemudian penguji dapat melihat log untuk melihat apakah, misalnya, objek tertentu dimuat ulang dari db setiap 10 menit, bukannya setiap tampilan halaman.
Tetapi adakah yang bisa menyarankan beberapa praktik yang lebih baik untuk situasi ini?
Jawaban:
Satu pertanyaan adalah apakah cache itu sendiri benar-benar persyaratan yang harus diuji oleh QA. Caching meningkatkan kinerja, sehingga mereka dapat menguji perbedaan kinerja untuk memastikannya memenuhi beberapa persyaratan.
Tapi ide bagus untuk melakukan beberapa pengujian di sekitar caching, siapa pun yang bertanggung jawab untuk itu. Kami menggunakan penghitung kinerja. Jika sistem cache Anda mengambil keuntungan dari ini, mereka mudah. Jika ada cara untuk mendapatkan hitungan dari cache itu sendiri, itu adalah pilihan lain.
Menggunakan pendekatan Anda juga bagus. Jika salah satu dari ini dibungkus dengan tes otomatis yang memeriksa hasil, maka tidak ada yang harus melihat log untuk menemukan jawaban.
sumber
Anda menerapkan cache (saya berasumsi) karena sistem tidak berkinerja cukup baik. Itu adalah sesuatu yang relevan bagi pengguna. Berikut adalah hal-hal yang dapat diperiksa QA:
Ingat, pengguna (dan, dengan ekstensi, QA) tidak peduli bagaimana Anda memecahkan masalah. Mereka hanya peduli bahwa masalahnya selesai dan tidak menciptakan masalah baru. Ini benar apakah Anda menerapkan caching, String parsing yang ditingkatkan, melakukan upgrade perangkat keras, atau menaburkan debu peri ajaib di server.
sumber
Mengubur logika bisnis penting atau status sistem jauh di dalam kotak hitam membuat sulit memverifikasi perilaku sistem yang benar. Lebih mudah untuk menguji secara menyeluruh perilaku komponen tunggal dalam sistem daripada keseluruhan sistem. Saya lebih suka mengekspos hal-hal seperti itu secara eksplisit melalui beberapa mekanisme sehingga dapat unit / regresi / integrasi / QA diuji dengan cara yang bermakna.
Salah satu opsi dengan cache adalah membuka halaman khusus yang memberikan beberapa rincian tentang cache (konten, status, dll.). Ini dapat membantu dengan debugging dalam pengembangan dan berpotensi dalam produksi. QA juga dapat menggunakan halaman ini untuk membuat test case untuk cache jika mereka diberikan perincian tentang apa perilaku cache yang diharapkan. Menggunakan penghitung kinerja dan / atau file log untuk secara eksplisit mendokumentasikan perilaku cache adalah pendekatan lain yang kurang terlihat tetapi layak.
Perhatikan bahwa pendekatan ini bukan pengganti untuk pengujian kinerja ujung ke ujung. Ini adalah mekanisme untuk memastikan cache itu sendiri berperilaku dengan benar. Pengujian kinerja harus digunakan untuk menentukan apakah caching memiliki efek yang diinginkan pada kinerja.
Juga catat bahwa menukar komponen sistem dengan yang baru yang mengimplementasikan antarmuka yang sama seperti memperkenalkan cache bisa menjadi perubahan yang tidak stabil dan kompleks. Dengan contoh cache, Anda memperkenalkan status dalam apa yang sebelumnya tidak bernegara, yang dapat membuat bug yang lebih sulit ditemukan atau direproduksi. Perubahan seperti itu harus selalu disertai dengan pengujian regresi penuh untuk memverifikasi perilaku sistem yang diharapkan.
sumber
Tes kinerja, seperti ditunjukkan dalam jawaban Andy.
Saya telah menemukan bahwa hambatan terbesar untuk menerapkan caching (dan kinerja) di banyak organisasi sebenarnya memiliki lingkungan di mana Anda dapat melakukan pengujian kinerja yang baik dan menjalankan tes untuk berbagai beban dunia nyata dan tes kinerja.
Untuk mendapatkan ini, Anda harus mengatur lingkungan pengujian kinerja yang, sedekat mungkin, dan memungkinkan biaya, mencerminkan produksi. Ini mungkin TIDAK akan menjadi lingkungan pengembangan Anda saat ini yang harus lebih kecil dan lebih mandiri untuk memungkinkan pengembangan aplikasi yang cepat. Lingkungan pengembangan juga cenderung menggunakan caching lebih sedikit sehingga tidak mewakili produksi dengan baik untuk pengujian kinerja.
Dalam lingkungan pengujian kinerja, aplikasi harus berjalan dalam 'mode' produksi. Anda harus lebih dari satu server jika produksi berhasil, kumpulan koneksi basis data dan caching harus ditetapkan untuk lingkungan produksi, dll.
Anda juga ingin mempertimbangkan alat untuk membantu pengujian beban.
jmeter sangat populer meskipun saya merasa cukup tidak ramah dan primitif untuk digunakan.
Rute lain yang saya gunakan adalah dengan hanya url
curl
dengan skrip ruby.Agar jelas
Anda juga dapat menemukan tautan berikut bermanfaat:
sumber
Ingatlah untuk meminta penguji untuk mem-boot ulang server dan memeriksa apakah data yang mereka masukkan masih ada. Saya melihat sebuah sistem yang memiliki beberapa bulan pengujian, gagal ketika itu dilakukan!
Bagian tersulit untuk diuji adalah bagaimanapun data diperbarui, tidak pernah ada hasil kedaluwarsa yang dikembalikan dari cache.
Ini sebagian dapat dibantu dengan selalu menggunakan data dalam cache untuk mengisi halaman konfirmasi yang dilihat pengguna setelah mereka melakukan perubahan. Misalnya tidak menggunakan objek yang Anda gunakan untuk memperbarui database, tetapi meminta data dari cache, yang kemudian memintanya dari database. Sedikit lebih lambat, tetapi jauh lebih mungkin untuk menampilkan bug lebih cepat.
sumber
Yang ini sebenarnya memiliki jawaban yang sangat mudah dan ini terkait dengan tingkat caching. Apa yang akan Anda amati ketika caching itu benar adalah tidak adanya permintaan pada target permintaan. Jadi, itu datang ke frase QA basi dari "hasil yang diharapkan."
Jika menerapkan cache di tingkat web, maka saya berharap bahwa item yang terkena caching hanya akan muncul sekali untuk setiap sesi pengguna yang diuji (jika menerapkan cache klien) atau sekali untuk beberapa pengguna (jika menerapkan cache gaya CDN). Jika Anda menerapkan cache di tingkat data untuk hasil umum, maka saya akan berharap untuk melihat rasio hit cache yang tinggi di tingkat cache Anda bersama dengan tidak adanya pertanyaan di log profil untuk tingkat data.
dll ...
sumber
Beberapa hal lebih baik diuji oleh seorang programmer, mungkin orang yang menulis kode, menggunakan unit test. Menguji kebenaran kode caching Anda adalah salah satunya. (Dari cara Anda mengajukan pertanyaan ini, saya menganggap bahwa orang-orang QA Anda memperlakukan aplikasi sebagai "kotak hitam" dan mengujinya melalui antarmuka eksternal.)
sumber
Logika cache adalah sesuatu yang harus diuji unit oleh pengembang karena QA terutama melakukan pengujian black-box.
QA hanya akan peduli pada aspek kinerja atau perbaikan apa pun yang Anda implementasikan, Anda dapat memberikan QA mekanisme untuk mengaktifkan / menonaktifkan caching atau mekanisme apa pun yang Anda gunakan untuk meningkatkan kinerja, dan kemudian mereka dapat memverifikasi perbedaan kinerja. Tentu saja QA juga bisa memverifikasi rilis lama terhadap peningkatan kinerja Anda juga.
sumber
Ketika saya menguji solusi caching, kami telah mengimplementasikan apa yang telah kami uji kinerja dasarnya. Kami telah melakukan solusi caching untuk hasil XML dan setelah cache dibutuhkan waktu sangat rendah untuk memberikan respons. Kami juga telah memeriksanya dengan log server dengan memeriksa entri log.
sumber