Akhdani Tech Talk 2021 Series #6 – Load Test WebRTC

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:

  1. Media Stream
    Untuk penggunaan media device dan merepresentasikan data audio dan video kedalam bentuk stream.
  2. Peer Connection
    Memungkinkan 2 atau lebih pengguna terkoneksi secara bersamaan.
  3. 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. 

 1-1

Gambar 1.1: tampilan halaman podium

 1-2

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.

 2-1

Gambar 2.1: Script untuk melakukan koneksi ke aplikasi WebRTC menggunakan chrome headless mode

2-2

Gambar 2.2: Hasil build dalam bentuk jar

2-3

Gambar 2.3: Konfigurasi pada JMeter dengan sampler menggunakan Java Request

2-4

Gambar 2.4: Hasil eksekusi JMeter(1)

2-5

Gambar 2.5: Hasil eksekusi JMeter (2)

2-6

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.

3-1

Gambar 3.1: Script untuk melakukan koneksi ke aplikasi WebRTC

3-2

Gambar 3.2: Script untuk melakukan replikasi koneksi

3-3

Gambar 3.3: Hasil eksekusi Cypress

Kesimpulan

Beberapa poin penting pada penggunaan Apache JMeter:

  1. Tidak bisa menggunakan HTTP Sampler, sehingga harus menggunakan Sampler Java Request.
  2. Sulit mencari referensi, karena masih sangat jarang yang melakukan. Referensi terbaik yang didapat: https://www.cnblogs.com/chenkx6/p/13639629.html
  3. 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:

  1. 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)