Muat pengujian dengan belalang. Bagian 3

Artikel akhir tentang alat pengujian stres Locust. Hari ini saya akan membagikan pengamatan yang telah terakumulasi dalam proses. Seperti biasa, video terpasang.

Bagian 1 - pengujian dengan Locust
Bagian 2 - Skenario Lanjut


Login


Saat menulis tes pertama saya dengan Locust, saya dihadapkan dengan kebutuhan untuk masuk ke satu sumber daya, mendapatkan token otorisasi, yang nantinya akan saya gunakan untuk pengujian beban. Kemudian pertanyaan segera muncul - bagaimana melakukan ini, karena alat diasah untuk mengirim semua permintaan ke satu sumber daya, yang kami tunjukkan di konsol ketika memulai tes. Ada beberapa solusi untuk masalah ini:

  • menonaktifkan otorisasi pada sumber daya yang diuji - jika mungkin
  • menghasilkan token di muka dan memasukkannya ke dalam kode uji sebelum meluncurkan - opsi terlemah, membutuhkan tenaga manual pada setiap peluncuran, tetapi memiliki hak untuk ada dalam beberapa kasus yang jarang terjadi
  • kirim permintaan menggunakan perpustakaan permintaan dan dapatkan token dari respons - bagus, sintaksinya sama

Saya memilih opsi ketiga. Di bawah ini saya mengusulkan contoh redone dari artikel pertama dengan berbagai kemungkinan memperoleh token. Google.com akan bertindak sebagai server otorisasi dan sebagainya
karena tidak ada token, saya akan mendapatkan nilai paling sederhana

from locust import HttpLocust, TaskSet, task import requests class UserBehavior(TaskSet): def on_start(self): response = requests.post("http://mysite.sample.com/login", {"username": "ellen_key", "password": "education"}) # get "token" from response header self.client.headers.update({'Authorization': response.headers.get('Date')}) # get "token" from response cookies self.client.cookies.set('Authorization', response.cookies.get('NID')) # get "token" from response body self.client.headers.update({'Authorization': str(response.content.decode().find('google'))}) 

Seperti yang Anda lihat dari contoh, sebelum mulai bekerja, pengguna mengirim permintaan ke server pihak ketiga dan memproses respons, menempatkan data dalam header atau cookie.

Tajuk


Saat bekerja dengan header permintaan, ada beberapa nuansa penting untuk dipertimbangkan.
Untuk setiap permintaan secara terpisah, Anda dapat menentukan set header Anda sendiri sebagai berikut

 self.client.post(url='/posts', data='hello world', headers={'hello': 'world'}) 

Ketika contoh di atas dijalankan, header halo akan ditambahkan ke tajuk yang ada dari sesi klien, tetapi hanya dalam permintaan ini tidak akan berada di semua yang berikut ini. Untuk membuat judul tetap ada, Anda bisa menambahkannya ke sesi:

 self.client.headers.update({'aaa': 'bbb'}) 

Pengamatan lain yang menarik - jika dalam permintaan kami tentukan tajuk yang sudah ada di sesi - itu akan ditimpa, tetapi hanya pada permintaan ini. Jadi Anda tidak perlu takut untuk secara tidak sengaja menghapus sesuatu yang penting.

Namun ada beberapa pengecualian. Jika kita perlu mengirim formulir multi -bagian, permintaan akan secara otomatis menghasilkan header Tipe-Konten , yang akan menunjukkan pemisah data formulir. Jika kami memaksa header untuk ditulis ulang menggunakan argumen header , maka permintaan akan gagal karena formulir tidak dapat diproses dengan benar.

Perlu juga dicatat bahwa semua header adalah string. Jika Anda mencoba menentukan nomor, misalnya {'aaa': 123} , permintaan tidak akan dikirim dan kode akan membuang pengecualian InvalidHeader

Pengujian terdistribusi


Untuk pengujian terdistribusi, locust menyediakan beberapa argumen CLI: - master dan --slave , untuk mendefinisikan peran dengan jelas. Dalam hal ini, mesin dengan master tidak akan mensimulasikan beban, tetapi hanya mengumpulkan statistik dan mengoordinasikan pekerjaan. Mari kita coba menjalankan server pengujian dan beberapa sesi dalam mode terdistribusi dengan menjalankan perintah berikut di konsol yang berbeda:

 json-server --watch sample_server/db.json locust -f locust_files\locust_file.py --master --host=http://localhost:3000 locust -f locust_files\locust_file.py --slave --master-host=localhost locust -f locust_files\locust_file.py --slave --master-host=localhost 


Dengan membuka belalang di browser ( localhost: 8089 ), Anda dapat melihat bahwa di sudut kanan atas kami memiliki jumlah mesin yang akan membawa beban.



Menguji tanpa UI


Ketika semua tes ditulis dan di-debug, alangkah baiknya untuk memasukkan mereka dalam pengujian otomatis regresi dan hanya secara berkala memeriksa hasilnya. Menggunakan perintah berikut, Anda dapat menjalankan uji belalang tanpa UI:

 locust -f locust_files\locust_file.py --host=http://localhost:3000 --no-web -c 10 -r 2 --run-time 1m --csv=test_result 

dimana

  • --no-web - argumen yang memungkinkan Anda untuk menjalankan tes tanpa UI
  • -c 10 - jumlah maksimal pengguna
  • -r 2 - pertumbuhan pengguna per detik
  • --run-time 1m - waktu pelaksanaan uji (1 menit)
  • --csv = test_result - setelah tes selesai, 2 file csv dengan hasil akan dibuat di folder saat ini, namanya dimulai dengan test_result

Fakta terakhir, pengamatan dan kesimpulan


Pengujian terdistribusi dapat dikombinasikan dengan pengujian regresi - untuk memastikan bahwa semua node untuk beban dimulai, Anda dapat menambahkan argumen --expect-slave = 2 pada master, dalam hal ini pengujian hanya akan dimulai ketika setidaknya 2 node dimulai.

Saya menemukan situasi beberapa kali - sumber daya yang diuji hanya bekerja pada HTTPS, sementara sertifikat dihasilkan oleh pelanggan dan sistem operasi menandainya mencurigakan. Agar tes berhasil, Anda dapat menambahkan argumen ke semua pertanyaan yang mengabaikan pemeriksaan keamanan, misalnya:

 self.client.get("/posts", verify=False) 

Karena saya tidak selalu bisa memastikan di lingkungan mana tes akan dijalankan, saya selalu menunjukkan argumen ini.

Hanya itu yang ingin saya bagikan. Bagi saya sendiri, saya menemukan alat yang sederhana dan nyaman dengan kemampuan dan variabilitas pengujian yang hebat dalam membuat permintaan dan memproses respons server. Terima kasih sudah membaca sampai akhir.

Source: https://habr.com/ru/post/id433304/


All Articles