Software Testing: Stress Testing & Penetration Testing

M.Fakhruddin Hafizh
AdHub Team
Published in
4 min readApr 29, 2019

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, task
class 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

Charts req/sec
Charts avg response time
Charts jumlah user
Tampilan Menu Failures

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.

--

--