Hari ini saya akan memberi tahu Anda bagaimana, dengan bantuan JMeter, kami menyiapkan proses caching halaman produk, menguji pengoperasian aplikasi seluler tanpa aplikasi itu sendiri dan menciptakan 2.000 pengguna dalam sistem tanpa akses ke database.
Siapa pun yang tidak tahu apa yang sedang terjadi di sini, baca bagian
pertama artikel - di dalamnya saya memberi tahu bagaimana JMeter membantu kami "menangkap" masalah dengan jatuhnya situs di antara beberapa pengguna.
Cara cepat men-cache beberapa ribu halaman produk
Klien kami yang lain adalah perusahaan manufaktur peralatan Italia untuk penerangan indoor, outdoor dan dekoratif.
Peralatan klien kami menerangi karya seni lukis dunia, monumen arsitektur, monumen, bangunan pusat bisnis dan bandaraKami mengembangkan situs untuk perusahaan ini di Kentico. Ini menyajikan semua bahan dan model peralatan pencahayaan - 20.000 salinan. Dan masing-masing memiliki halaman terpisah.
Setelah situs dirilis, kami menemukan satu fitur yang tidak menyenangkan dari Kentico: ia tidak memiliki alat untuk secara otomatis memuat file media ke dalam cache. Setelah memperbarui dan memulai ulang situs (yang terjadi secara teratur), cache diset ulang dan sebagian besar halaman terbuka selama 10 detik. Tidak semua pengguna siap menunggu begitu lama.
Kami melihat dua opsi untuk memuat file media ke dalam cache. Pertama: ini adalah waktu yang lama untuk secara manual melalui situs secara manual melalui browser. Kedua: menulis skrip yang akan melakukan ini untuk kita - cocok!
Kami memutuskan untuk menggunakan JMeter: kami baru saja memberinya sitemap penuh, dia berjalan di atasnya dan mengirim file media ke cache.
Itu adalah solusi sederhana, tetapi tidak terlalu optimal. Script membutuhkan enam (!!!) jam untuk selesai. Diperlukan cara yang lebih cepat.
Setelah mempelajari sedikit topik, kami memutuskan untuk menggunakan regexps. JMeter dapat meminta sumber daya yang dibangun ke dalam halaman untuk topeng tertentu dari server. Inilah yang kami manfaatkan. Setelah menghilangkan apa yang tidak terletak di server kami dan tidak memerlukan pemuatan ke dalam cache (gambar pihak ketiga, font, gaya, dll.), Kami telah mengurangi waktu yang dibutuhkan untuk skrip untuk menelusuri halaman hingga dua jam.
Ini akan terlihat seperti Permintaan HTTP di JMeter untuk memuat hanya jenis aset tertentuTapi ini terlalu lama: pengisian dimulai pukul 9:00 di Chelyabinsk dan memakan waktu satu jam, kemudian dua jam dihabiskan untuk skrip, sebagai hasilnya kita akan selesai pada pukul 12:00. Di Italia, sudah jam 08:00, dan beberapa penduduk setempat sudah mulai bekerja pukul 6-7 pagi. Situs ini lambat, banyak keluhan ... Kami perlu mengoptimalkan lebih lanjut!
Keputusan datang ketika kami menyadari bahwa gambar yang hampir sama digunakan pada semua 20.000 halaman produk. Kami melakukan analisis dan menyadari bahwa itu cukup untuk mengunduh sepenuhnya (dengan semua sumber daya bawaan) hanya 30% dari halaman acak, dan sisanya dapat dijalankan tanpa memuat file media. Dengan demikian, sebagian besar bahan - gambar, font, skrip dan gaya untuk halaman produk - termasuk dalam cache. Ketika seorang pengguna menghubungi salah satu dari mereka, mengunduh dari server hanya akan memerlukan sebagian kecil dari konten, dan itu akan memakan waktu tidak lebih dari 1-2 detik.
Dengan meminta nomor halaman acak dari tabel Variabel Buatan Pengguna, setiap kali kami mendapatkan halaman acak dari daftarDengan menggunakan metode yang dijelaskan, kami mendapatkan situs yang dalam 90% kasus bekerja dengan cepat. Ya, dalam satu dari sepuluh kasus, butuh hingga 30 detik untuk menunggu halaman dimuat, tetapi di sembilan yang lain semuanya baru saja terbang. Dan itu hanya dalam 15-30 menit.
Sekarang trik seperti itu tidak lagi diperlukan - para pengembang telah mengoptimalkan sistem caching itu sendiri. Tetapi pada saat itu, keputusan ini adalah penyelamatan nyata, dan JMeter ternyata menjadi alat yang sangat berguna, bahkan setelah dilepaskan dan dituangkan.
Cara membuat 2000 pengguna aplikasi, jika Anda hanya memiliki email dan dua jam untuk bekerja
Klien ketiga, yang akan saya bicarakan, adalah perusahaan yang mengembangkan, memproduksi dan menjual peralatan medis: dari pisau bedah sederhana hingga pemotong laser dan latihan kompleks dengan kamera bawaan. Manajer mereka pergi ke klinik, berkomunikasi dengan ahli bedah dan memberi tahu mereka tentang produk mereka. Untuk melakukan ini, mereka memiliki aplikasi khusus untuk iPad: data dokter dan daftar alat yang menarik baginya dimasukkan ke dalamnya. Kemudian, tautan ke halaman pribadi dengan daftar semua alat ini, uraian terperinci dan karakteristik datang ke email dokter. Halaman-halaman ini untuk ahli bedah yang kami kembangkan. Aplikasi dan email buletin dibuat oleh perusahaan lain.
Salah satu tugas untuk JMeter pada proyek ini adalah untuk menguji sistem untuk membuat versi yang berbeda dari halaman-halaman tersebut, terlepas dari kenyataan bahwa kami hanya memiliki backend. Kami menulis sebuah skrip sehingga dengan menggunakan generator angka acak, ia membuat halaman dari berbagai jenis, dan kemudian mengirimkannya ke email kami yang berfungsi untuk verifikasi. Semuanya sederhana. Dan saya bahkan tidak akan menyebut klien ini di artikel, jika bukan karena satu kasus.
Beberapa hari sebelum peluncuran, manajer saya menelepon saya dan meminta untuk membuat 2000 pengguna untuk aplikasi tersebut. Kesulitannya adalah bahwa kami tidak memiliki akses ke server langsung atau database. Kami harus membuat 2.000 pengguna hanya melalui CMS (dalam hal ini, melalui Umbraco). Pada saat yang sama, setelah pendaftaran, setiap pengguna harus menerima surat dengan tipe kira-kira sebagai berikut:
Setelah menerima email seperti itu, pengguna menginstal aplikasi dan mengubah kata sandi standar menjadi miliknyaUntuk mendaftarkan pengguna, diperlukan lima bidang:
- Email
- nama
- nama belakang;
- login;
- kata sandi
Saya hanya punya dua jam untuk menyelesaikan tugas. Sekali lagi: 2000 pengguna, lima bidang untuk masing-masing, dua jam ... Data dari manajer datang dalam bentuk berikut:

Jika saya seorang pengembang, bukan spesialis QA, saya akan menulis skrip, misalnya, dalam perl: ia akan menguraikan data ini dan dengan cepat menyebarkan semuanya. Tapi saya memilih jalur yang berbeda dan menggunakan yang paling, mungkin, alat ideal untuk organisasi data cepat - MS Excel. Spreadsheet menyelamatkan dunia!
Menggunakan manipulasi sederhana dengan mengganti data, memotong kelebihan dan trik lainnya, saya membuat file ~ 10rb baris, dari formulir:
login1 | john.smith
login2 | dokter
...
name1 | John
...
Saya tidak terlalu peduli dengan kata sandi - saya hanya menulis kata sandiNumber1 dan โmemperpanjangโ kolom ini di Excel untuk semua 2000 pengguna. Ini tidak masalah, karena hanya digunakan untuk entri pertama. Ya, dan saya tidak mengurutkan daftar email secara alfabet, yang berarti kemungkinan menebak kata sandi secara acak diminimalkan.
Mengumpankan file ini (melalui clipboard) ke JMeter, saya bersandar di kursi saya dan menyaksikan dengan senang hati bagaimana pengguna dibuat. Seluruh proses pemrosesan data dan pembuatan pengguna baru membutuhkan waktu 1 jam 45 menit - bahkan waktu tersisa untuk kopi!
Kesimpulan: JMeter ternyata menjadi alat yang nyaman untuk pengujian otomatis backend aplikasi mobile, dan juga, tiba-tiba, untuk otomatisasi tugas-tugas non-standar - seperti ini, dengan sekelompok pengguna dan informasi minimum tentang mereka.
Secara umum, JMeter dapat digunakan (dan digunakan oleh saya secara pribadi) untuk berbagai tugas. Misalnya, untuk:
- analisis optimasi: melakukan pengujian beban, memperbaiki optimasi roll, melakukan pengujian lagi, membandingkan hasil;
- Tes keamanan kueri: menulis skrip menggunakan proxy, mengirim permintaan langsung ke server tanpa pemeriksaan front-end, menghapus berbagai kunci dari permintaan, memeriksa apakah server merespons dengan memadai;
- memeriksa respons terhadap tajuk: kami menulis skrip yang mengirim permintaan ke halaman yang sama dengan tajuk yang berbeda dalam satu lingkaran, kami memeriksa reaksi server dan melihat apa yang harus dihapus;
- enumerasi kombinasi otorisasi: letakkan siklus dengan kata sandi dalam siklus dengan login, uji formulir otorisasi;
- memeriksa perlindungan terhadap serangan: kami mengirim permintaan untuk mengirimkan formulir di beberapa aliran dan melihat apakah perlindungan Anda berfungsi;
- otomatisasi sistem API: setiap hasil permintaan API dapat diproses oleh skrip dan digunakan pada langkah berikutnya dari siklus pengujian - dengan cara ini Anda dapat mengotomatiskan pengujian sistem apa pun tersebut.
Dari hal di atas, kita dapat menarik kesimpulan umum: JMeter adalah alat universal, pisau Swiss nyata untuk tester (dan untuk seorang pengembang, jujur โโsaja).