Software Testing: Stress Testing & Penetration Testing
Halo Sobat AdHub, pada kesempatan kali ini saya akan berbagi mengenai dua jenis tes yaitu Penetration Testing dan Stress Testing.
Penetration Testing
Penetration Testing merupakan suatu kegiatan seseorang mencoba melakukan simulasi serangan yang bisa dilakukan terhadap sebuah software tertentu untuk menemukan kelemahan yang ada pada software tersebut. Penetration testing memiliki sebuah standar resmi yang dapat dilihat di sini.
Manfaat Penetration Testing:
- Mengetahui bagian yang rentan dari sebuah sistem
- Mencari celah keamanan agar dapat segera diperbaiki
Stress Testing
Stress Testing adalah aktivitas pengujian software yang menentukan ketahanan software dengan menguji di luar batas operasi normal. Stress Testing sangat penting untuk software. Pada umumnya Stress Testing melakukan tes terhadap ketahanan, ketersediaan, dan error handling ketika high load.
Manfaat dari melakukan Stress Testing adalah kita menjadi tahu batas kemampuan software kita.
Implementasi Stress Testing dan Penetration Testing
Pada bagian ini saya akan memberikan contoh implementasi Stress Testing sekaligus Penetration Testing. Implementasi yang saya lakukan menggunakan tools Locust. Untuk tutorial penggunaan Locust dapat dilihat di sini. Berikut adalah langkah-langkahnya:
1. Install Locust
Untuk menginstall Locust dapat menggunakan command
pip install locustio
2. Membuat locust file(locustfile.py)
Locust file tersebut berisi test(dalam bentuk tast) yang ingin kita lakukan. Sebuah Locust File setidaknya harus berisi dua class yaitu TaskSet dan HttpLocust.
#adhub.py
from locust import HttpLocust, TaskSet, taskclass MyTaskSet(TaskSet):
def on_start(self):
response = self.client.get("/profile")
csrftoken = response.cookies['csrftoken']
res = self.client.post('/profile/login',
{
"email": 'admin@admin.com',
"password": *******,
"csrfmiddlewaretoken": csrftoken
},
headers={"X-CSRFToken": csrftoken},
cookies={"csrftoken": csrftoken
})
res.raise_for_status() @task
def index(self):
self.client.get("/")class MyLocust(HttpLocust):
task_set = MyTaskSet
min_wait = 1000
max_wait = 2000
Pada code diatas kita akan melakukan task berupa membuka page /profile, mencoba melakukan login, dan membuka landing page(/). Variable min_wait dan max_wait merupakan batas waktu server(dalam ms) untuk memberikan respond. Pada contoh tersebut kita setting batas waktu mulai dari 1000 ms hingga 2000 ms.
3. Menjalankan Locust File
Untuk menjalankan locust file kita dapat menggunakan command
#Apabila locustfile diberinama locustfile.py
locust -f --host=http://hostname.com#Apabila locust file berada di direktori berbeda dan/atau nama file bukan locustfile.py
$ locust -f locust_files/my_locust_file.py --host=http://example.com
Pada implementasi ini kita akan menjalankan command
# http://152.118.201.222:21203 adalah alamat website AdHub
locust -f adhub.py --host=http://152.118.201.222:21203
4. Menjalankan Test
Kita dapat mulai menjalankan test melalui localhost:8089 di browser
Pertama-tama kita akan diminta untuk memasukan jumlah pengguna simulasi dan banyak user yang bertambah setiap detik. Dalam implementasi ini kita coba beri nilai 10000 dan 50. Kemudian tekan ‘Start swarming’.
5. Melakukan Monitoring
Setelah tes dijalankan, kita akan masuk ke menu Statistics yang berisi task-task yang dilakukan pada detik ini beserta beberapa data lainnya.
Selain menu Statistics terdapat juga menu charts yang berisi informasi jumlah request, response, dan user dalam bentuk grafik. Menu Failures yang berisi data task yang gagal. Menu Exception yang menampilkan error yang terjadi pada program locustfile.py kita. Serta Menu Download Data
Penutup
Stress Test dan Penetration Test merupakan hal yang cukup penting dalam pengembangan software terutama untuk large scale software. Salah satu tools yang dapat kita gunakan untuk melakukan Stress Test dan Penetration Test adalah Locust.