Load Test WebRTC
Oleh: Muhamad Indra Kusmana, Rahmat Hidayat, Rahmat Setiawan
Apa itu WebRTC?
WebRTC (Web Real-TIme Communication) merupakan teknologi yang memungkinkan kita melakukan komunikasi secara real-time menggunakan video dan audio secara langsung pada halaman web. Contoh aplikasi yang menggunakan teknologi ini misalnya Google Meet, Zoom, Microsoft Teams, dan sebagainya.
Teknologi WebRTC
WebRTC menggunakan 3 komponen utama:
- Media Stream
Untuk penggunaan media device dan merepresentasikan data audio dan video kedalam bentuk stream. - Peer Connection
Memungkinkan 2 atau lebih pengguna terkoneksi secara bersamaan. - Data Channel
Memungkinkan pengguna mengirim data dalam bentuk text chat, file sharing, dsb secara bersamaan.
Apa itu Load Test?
Load test adalah proses pengujian non-functional suatu aplikasi dimana performa diuji dengan load tertentu. Proses ini dilakukan untuk mengetahui bagaimana suatu aplikasi dapat berjalan pada saat penggunaan dalam jumlah banyak dan waktu bersamaan.
Permasalahan Load Test pada WebRTC
Seperti aplikasi berbasis web yang diakses oleh banyak pengguna pada umumnya, tentunya load test perlu dilakukan pada aplikasi WebRTC untuk mengetahui performa dari aplikasi tersebut saat diakses oleh banyak pengguna pada waktu bersamaan. Sayangnya saat ini tidak banyak tools open source untuk yang tersedia untuk melakukan load test pada WebRTC. Selain itu beberapa tools hanya tersedia untuk aplikasi yang menggunakan platform yang sama dengan tools tersebut.
Tujuan
Sample aplikasi yang kami gunakan pada pengujian kali ini adalah sebuah aplikasi sederhana, dimana terdapat 2 halaman podium dan student. Halaman podium akan melakukan broadcast ke halaman student yang berada pada room yang sama berupa screen sharing dan audio.
Gambar 1.1: tampilan halaman podium
Gambar 1.2: tampilan halaman student
Pada pengujian ini, akan dilakukan load test pada aplikasi WebRTC menggunakan Apache Jmeter dan Cypress. Metode pengujian dilakukan dengan cara melakukan sejumlah koneksi pada aplikasi. Hal ini dapat berguna untuk mengetahui berapa jumlah maksimal pengguna yang dapat terhubung pada aplikasi yang dibangun pada waktu bersamaan.
Apache JMeter
JMeter merupakan aplikasi berbasis Java yang didesain untuk melakukan load test mengukur performa suatu aplikasi. Pada pengujian ini, JMeter akan mensimulasikan sejumlah pengguna dengan membuat banyak koneksi menggunakan chrome headless mode.
Gambar 2.1: Script untuk melakukan koneksi ke aplikasi WebRTC menggunakan chrome headless mode
Gambar 2.2: Hasil build dalam bentuk jar
Gambar 2.3: Konfigurasi pada JMeter dengan sampler menggunakan Java Request
Gambar 2.4: Hasil eksekusi JMeter(1)
Gambar 2.5: Hasil eksekusi JMeter (2)
Gambar 2.6: Console log aplikasi WebRTC menampilkan jumlah subscriber yang terhubung
Cypress
Cypress merupakan end-to-end test framework berbasis Javascript. Pada pengujian ini, penggunaan Cypress dilakukan untuk menyimulasikan sejumlah pengguna dengan membuka aplikasi WebRTC pada banyak halaman sekaligus.
Gambar 3.1: Script untuk melakukan koneksi ke aplikasi WebRTC
Gambar 3.2: Script untuk melakukan replikasi koneksi
Gambar 3.3: Hasil eksekusi Cypress
Kesimpulan
Beberapa poin penting pada penggunaan Apache JMeter:
- Tidak bisa menggunakan HTTP Sampler, sehingga harus menggunakan Sampler Java Request.
- Sulit mencari referensi, karena masih sangat jarang yang melakukan. Referensi terbaik yang didapat: https://www.cnblogs.com/chenkx6/p/13639629.html
- Hasil eksekusi pada JMeter menampilkan error meskipun koneksi berhasil dilakukan, sehingga untuk melihat jumlah koneksi yang terhubung dapat dilihat melalui log aplikasi
Poin penting pada penggunaan Cypress:
- Selalu terjadi error di sekitar iterasi ke-10. Terdapat tiket terkait issue tersebut pada forum https://github.com/cypress-io/cypress/issues/1305 (status: open saat pengujian dilakukan, 28 Januari 2021)