Membandingkan tiga tools load testing utama: k6 (script JavaScript ringan), JMeter (GUI-based Java dengan plugin ecosystem luas), dan Locust (Python-based dengan model distributed built-in), termasuk kapan menggunakan masing-masing.

Setelah di episode 4 kita menguasai k6 secara mendalam, kini saatnya memahami dua tool alternatif yang juga penting di dunia performance testing: JMeter dan Locust. Di dunia nyata, Performance Test Engineer tidak selalu bisa memilih tools sendiri — tim yang sudah ada mungkin sudah menggunakan JMeter, atau tim data engineering mungkin lebih nyaman dengan Python. Memahami ketiga tools membuat kalian lebih fleksibel dan valuable di organisasi mana pun.
Episode ini bukan tutorial lengkap untuk JMeter atau Locust — melainkan perbandingan praktis yang membantu kalian memahami kapan harus menggunakan masing-masing, kelebihan dan kekurangan masing-masing, serta contoh skenario penggunaan.
Apache JMeter adalah tool load testing open-source berbasis Java dengan antarmuka GUI. JMeter sudah ada sejak 1998 dan menjadi tool performance testing paling banyak digunakan di enterprise. Ia menguji performa pada protocol HTTP, HTTPS, SOAP, REST, JDBC, FTP, SMTP, dan banyak lagi.
| Aspek | Detail |
|---|---|
| GUI visual | Test plan dirancang dengan drag-and-drop, cocok untuk non-developer |
| Plugin ecosystem | Ratusan plugin untuk protocol dan integrasi tambahan |
| Multi-protocol | HTTP, JDBC, LDAP, SMTP, FTP, WebSocket — satu tool untuk semua |
| Distributed testing | Built-in remote testing dengan slave nodes |
| Community | Komunitas besar, banyak tutorial, dan dokumentasi lengkap |
| Aspek | Detail |
|---|---|
| Resource-heavy | Java JVM memakan RAM (200MB-2GB tergantung beban) |
| GUI-only workflow | Test plan sulit di-version control (XML format) |
| Belajar curve | GUI yang kompleks dengan banyak menu dan opsi |
| Kecepatan | Lebih lambat dari k6 untuk throughput tinggi |
JMeter test plan dibuat di GUI dan disimpan sebagai XML. Berikut contoh sederhana yang divisualisasikan:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan>
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="API Load Test">
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments"/>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup"
testname="User Thread Group" num_threads="100" ramp_time="30">
<elementProp name="ThreadGroup.main_controller" elementType="LoopController"/>
</ThreadGroup>
</hashTree>
</hashTree>
</jmeterTestPlan>Locust adalah load testing tool open-source yang menulis test dalam Python. Philosophy Locust adalah "test as code" — semua test ditulis dalam Python tanpa GUI, mirip dengan pendekatan k6 tetapi menggunakan bahasa yang lebih familiar bagi data engineers dan backend developers.
| Aspek | Detail |
|---|---|
| Python ecosystem | Akses penuh ke library Python: pandas, requests, SQLAlchemy |
| Distributed built-in | Master-worker architecture tanpa konfigurasi kompleks |
| Realistic user behavior | Model between() untuk think time yang natural |
| Web UI | Dashboard built-in untuk monitoring real-time |
| Extensible | Custom classes dan继承 untuk test scenario kompleks |
| Aspek | Detail |
|---|---|
| Python dependency | Butuh Python environment (virtualenv, pip) |
| Throughput terbatas | Single-threaded Python lebih lambat dari k6 Go |
| Tidak se-ringan k6 | Lebih banyak overhead per VU |
| Protocol terbatas | HTTP/HTTPS primarily, ekstensi untuk WebSocket/gRPC |
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 5) # Think time 1-5 detik
@task(3)
def view_products(self):
self.client.get("/products")
@task(1)
def checkout(self):
self.client.post("/checkout", json={"product_id": 1, "quantity": 2})
def on_start(self):
self.client.post("/login", json={
"username": "testuser",
"password": "testpass"
})| Kriteria | k6 | JMeter | Locust |
|---|---|---|---|
| Bahasa scripting | JavaScript | XML (GUI) | Python |
| Resource usage | Rendah (Go binary) | Tinggi (Java JVM) | Sedang (Python) |
| Kecepatan | Sangat cepat | Sedang | Sedang |
| Learning curve | Rendah (JS familiar) | Tinggi (GUI kompleks) | Sedang (Python) |
| Distributed testing | k6 Cloud atau Docker | Remote nodes | Master-worker |
| Protocol support | HTTP, WebSocket, gRPC, k6 extensions | HTTP, JDBC, LDAP, SMTP | HTTP primarily |
| CI/CD integration | Sangat mudah | Kompleks | Mudah |
| Community | Growing cepat (Grafana Labs) | Sangat besar | Moderate |
| License | LGPL-3.0 | Apache 2.0 | MIT |
Gunakan k6 jika: tim developer-oriented, butuh performa tinggi, CI/CD integration, dan berfokus pada HTTP/API testing. Ini tool utama di series ini.
Gunakan JMeter jika: tim non-developer, perlu multi-protocol (JDBC, LDAP), atau organisasi sudah berinvestasi di JMeter.
Gunakan Locust jika: tim Python-centric, butuh integrasi dengan data pipeline Python, atau test scenarios membutuhkan logic Python kompleks.
# Download JMeter dari halaman releases Apache
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz
tar xzf apache-jmeter-5.6.3.tgz
cd apache-jmeter-5.6.3/bin
./jmeterJMeter bisa juga dijalankan tanpa GUI untuk CI/CD:
./jmeter -n -t test-plan.jmx -l results.jtl -e -o ./reportpip install locust
# Buat file locustfile.py (contoh di atas)
locust -f locustfile.py --host=https://api.example.comBuka browser ke http://localhost:8089 untuk web UI Locust.
# Mulai master
locust -f locustfile.py --master --host=https://api.example.com
# Mulai worker (bisa banyak di mesin berbeda)
locust -f locustfile.py --worker --master-host=192.168.1.100Di episode 5 ini kalian telah memahami tiga tools load testing utama:
Tidak ada tool yang "paling bagus" secara absolut — yang terbaik adalah tool yang paling cocok dengan konteks tim dan organisasi kalian. Di episode 6 selanjutnya, kita akan mempelajari stress, soak, dan spike testing — genre testing di luar load testing biasa yang menguji batas dan ketahanan sistem. Siapkan lab kalian!