Uji Beban Vegeta: Tutorial HTTP Laju Konstan

Pelajari pengujian beban Vegeta: serangan HTTP kecepatan konstan, instalasi, alur serangan/laporan/plot, format berkas target, dan bagaimana pengujian fungsional berperan di dalamnya.

INEZA Felin-Michel

INEZA Felin-Michel

6 July 2026

Uji Beban Vegeta: Tutorial HTTP Laju Konstan

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Anda ingin tahu bagaimana API Anda berperilaku pada tepat 500 permintaan per detik, bukan "secepat yang dapat dihantam oleh N thread." Sebagian besar alat beban kerja menetapkan konkurensi dan membiarkan tingkat permintaan mengambang. Vegeta melakukan yang sebaliknya: Anda menetapkan tingkat, dan ia mengirimkan sejumlah permintaan per detik terlepas dari bagaimana server merespons. Perbedaan itu penting ketika Anda peduli dengan angka yang digunakan lembar jawaban, throughput pada beban target, dan latensi yang sebenarnya akan Anda janjikan dalam SLO.

button

Apa Itu Vegeta

Vegeta adalah alat pengujian beban HTTP baris perintah yang ditulis dalam Go. Ini juga dapat digunakan sebagai pustaka Go, tetapi tutorial ini berfokus pada CLI. Ide intinya adalah tingkat permintaan yang konstan. Anda memberi tahu Vegeta "kirim 100 permintaan per detik selama 30 detik," dan ia mempertahankan kecepatan itu dengan menambahkan pekerja sesuai kebutuhan. Jika server melambat, Vegeta terus mengeluarkan permintaan baru sesuai jadwal alih-alih menunggu permintaan lama selesai.

Desain itu memberi Anda pengujian beban model terbuka. Lalu lintas nyata tiba sesuai waktunya sendiri; pengguna tidak berhenti dan menunggu titik akhir Anda yang lambat sebelum pengguna berikutnya muncul. Alat berbasis tingkat permintaan cocok dengan perilaku tersebut.

Beban Berbasis Tingkat Permintaan vs. Berbasis Konkurensi

Inilah perbedaan yang sering membingungkan orang.

Alat berbasis konkurensi (kumpulan thread atau pengguna virtual yang tetap, masing-masing mengulang permintaan-respons) menggunakan model tertutup. Ketika server menjadi lambat, loop terhenti, sehingga tingkat permintaan aktual menurun. Anda meminta beban, tetapi alat itu secara diam-diam mengurangi beban. Itu menyembunyikan penumpukan yang akan Anda lihat di lingkungan produksi.

Alat berbasis tingkat permintaan seperti Vegeta menggunakan model terbuka. Anda menetapkan tingkat kedatangan permintaan. Jika server tidak dapat mengimbangi, permintaan akan mengantre, latensi meningkat, dan laporan menunjukkannya. Anda mendapatkan gambaran jujur tentang apa yang terjadi ketika permintaan melebihi kapasitas.

Tidak ada model yang salah. Gunakan konkurensi ketika Anda ingin tahu "berapa banyak pengguna bersamaan yang dapat saya tangani." Gunakan model tingkat permintaan ketika Anda ingin tahu "apa yang terjadi pada 2.000 permintaan per detik." Vegeta adalah jenis yang kedua. Untuk peta yang lebih luas tentang ruang perkakas, lihat alat pengujian beban API terbaik.

Instal Vegeta

Pilih salah satu yang sesuai dengan pengaturan Anda.

Homebrew di macOS:

brew update && brew install vegeta

Manajer paket lain:

# MacPorts
port install vegeta

# Arch Linux
pacman -S vegeta

# FreeBSD
pkg install vegeta

Dari sumber dengan Go terinstal:

git clone https://github.com/tsenart/vegeta
cd vegeta
make vegeta

Anda juga dapat mengunduh biner yang sudah jadi dari halaman rilis GitHub. Konfirmasi instalasi:

vegeta --help

Alur Kerja Inti

Vegeta dibangun di sekitar pipa Unix. Target masuk, serangan berjalan, dan laporan keluar. Jalankan yang paling sederhana adalah satu baris:

echo "GET http://localhost:8080/" | vegeta attack -duration=5s -rate=100 | vegeta report

Baca dari kiri ke kanan:

  1. echo menulis satu target (metode dan URL) ke output standar.
  2. vegeta attack membaca target itu dari input standar dan meluncurkan 100 permintaan per detik selama 5 detik. Totalnya 500 permintaan.
  3. vegeta report membaca aliran hasil biner dan mencetak ringkasan.

Flag -rate menerima permintaan per unit waktu. -rate=100 dan -rate=100/1s memiliki arti yang sama. -rate=50/500ms berarti 50 permintaan setiap 500 milidetik. Mengatur -rate=0 menghapus batas dan mengirim secepat mungkin, yang merupakan pengujian yang sama sekali berbeda.

Laporan teks terlihat seperti ini:

Requests      [total, rate, throughput]  500, 100.20, 100.18
Duration      [total, attack, wait]      4.991s, 4.990s, 1.2ms
Latencies     [min, mean, 50, 90, 95, 99, max]  412us, 1.3ms, 1.1ms, 1.9ms, 2.4ms, 5.1ms, 12ms
Bytes In      [total, mean]              128500, 257.00
Bytes Out     [total, mean]              0, 0.00
Success       [ratio]                    100.00%
Status Codes  [code:count]               200:500
Error Set:

Baca baris latensi terlebih dahulu. Kolom 50 adalah median. Kolom 99 adalah ekor: 1 persen permintaan lebih lambat dari itu. Ekor adalah tempat pengguna merasakan sakit, jadi rata-rata yang sehat dengan persentil ke-99 yang buruk masih merupakan masalah. Periksa Success [ratio] dan Status Codes selanjutnya. Rasio keberhasilan 100 persen dengan semua kode 200 berarti server menahan beban. Kode 5xx apa pun atau Error Set yang tidak kosong berarti server mulai rusak.

Simpan Hasil, Lalu Laporkan dengan Berbagai Cara

Mengarahkan langsung ke report baik untuk melihat sekilas. Untuk apa pun yang akan Anda kunjungi kembali, simpan hasil mentah ke file terlebih dahulu, lalu hasilkan setiap laporan yang Anda inginkan dari satu file tersebut.

echo "GET http://localhost:8080/" | \
  vegeta attack -duration=10s -rate=200 -output=results.bin

Sekarang hasil dijalankan disimpan dalam results.bin. Buat laporan teks:

vegeta report results.bin

Hasilkan JSON terstruktur untuk dasbor atau perbedaan antara beberapa kali jalankan:

vegeta report -type=json results.bin > metrics.json

Hasilkan histogram latensi dengan bucket yang Anda pilih:

vegeta report -type='hist[0,2ms,5ms,10ms,25ms,100ms]' results.bin

Histogram menghitung berapa banyak permintaan yang masuk ke setiap rentang latensi. Ini adalah cara cepat untuk melihat apakah latensi terkumpul rapat atau tersebar di rentang yang luas.

Format File Target

API nyata membutuhkan lebih dari satu GET. Pindahkan target Anda ke file dan berikan dengan -targets. Format HTTP default berbasis baris dan mudah dibaca.

Buat targets.txt:

GET http://localhost:8080/api/users

POST http://localhost:8080/api/users
Content-Type: application/json
@./payload.json

GET http://localhost:8080/api/users/42

Beberapa aturan membuat ini berfungsi:

Letakkan badan JSON Anda di payload.json:

{ "name": "Ada", "role": "engineer" }

Jalankan serangan terhadap file:

vegeta attack -targets=targets.txt -rate=50 -duration=30s | vegeta report

Vegeta berputar melalui target secara berurutan dan terus mengulang hingga durasi berakhir. Anda juga dapat menambahkan header global pada baris perintah dengan -header, yang berguna untuk otentikasi:

vegeta attack -targets=targets.txt -rate=50 -duration=30s \
  -header="Authorization: Bearer $TOKEN" | vegeta report

Untuk menjalankan secara terprogram atau volume tinggi, Vegeta juga membaca format target JSON. Setiap baris adalah satu objek JSON, dan Anda memilihnya dengan -format=json:

{"method": "GET", "url": "http://localhost:8080/api/users"}
{"method": "POST", "url": "http://localhost:8080/api/users", "header": {"Content-Type": ["application/json"]}, "body": "eyJuYW1lIjoiQWRhIn0="}

Bidang body dikodekan base64. Format ini mengalir dengan baik, sehingga Anda dapat menghasilkan target dengan cepat dan memasukkannya langsung dengan -lazy untuk efisiensi memori.

Plot dan Histogram

Satu angka menyembunyikan tren. Jika latensi menurun di tengah jalannya pengujian, Anda ingin melihat kurvanya. Perintah plot Vegeta mengubah aliran hasil menjadi halaman HTML interaktif:

vegeta attack -targets=targets.txt -rate=100 -duration=60s | \
  vegeta plot > plot.html

Buka plot.html di browser. Anda mendapatkan grafik deret waktu latensi selama pengujian, sehingga peningkatan yang lambat atau lonjakan di tengah pengujian akan terlihat jelas. Anda dapat memplot beberapa pengujian bersama-sama untuk membandingkan tingkat beban:

vegeta attack -rate=50  -duration=30s -targets=targets.txt -output=50qps.bin
vegeta attack -rate=100 -duration=30s -targets=targets.txt -output=100qps.bin
vegeta plot 50qps.bin 100qps.bin > compare.html

Untuk lingkungan tanpa antarmuka grafis, lewati plot dan ekspor histogram atau CSV mentah dengan encode:

vegeta encode -to=csv results.bin > results.csv

Kapan Menggunakan Vegeta

Gunakan Vegeta ketika pertanyaannya adalah tentang tingkat permintaan dan kapasitas:

Ini adalah instrumen yang fokus. Ia mengirim permintaan HTTP pada tingkat tertentu dan mengukur bagaimana server merespons. Ia tidak menskrip perjalanan pengguna multi-langkah dengan logika percabangan, dan ia tidak memvalidasi badan respons di luar kode status. Fokus itu adalah fitur; ini menjaga alat tetap kecil dan hasilnya bersih.

Jika Anda membandingkannya dengan alat lain, perbandingan di pengujian beban k6 dan pengujian beban JMeter mencakup alternatif model konkurensi. Untuk konsep dan metrik yang mendasarinya, tutorial pengujian kinerja API adalah panduan yang baik.

Tempat Pengujian Fungsional Cocok

Pengujian beban menjawab "apakah cukup cepat." Ia tidak menjawab "apakah benar." Sebuah jalankan Vegeta dapat melaporkan 100 persen kode 200 sementara titik akhir mengembalikan pengguna yang salah, harga yang usang, atau bidang JSON yang salah format. Setiap respons tersebut adalah kode 200 yang cepat dan berhasil sejauh menyangkut alat beban.

Kebenaran membutuhkan pemeriksaan yang berbeda: pernyataan pada badan respons, skema, dan aturan bisnis. Itu adalah pengujian fungsional, dan itu termasuk sebelum dan bersamaan dengan pengujian beban Anda. Pola yang sehat adalah memvalidasi bahwa API sudah benar, lalu mengukur bagaimana kinerjanya di bawah tingkat permintaan.

Di sinilah Apidog melengkapi alat seperti Vegeta daripada bersaing dengannya. Di Apidog Anda membangun skenario pengujian dengan pernyataan visual pada status, header, dan bidang JSON, merantai permintaan, dan menggerakkannya dari file data. Anda mengonfirmasi bahwa API mengembalikan data yang benar. Vegeta kemudian mengonfirmasi bahwa API tetap cepat ketika jalur yang benar itu diakses ratusan kali per detik. Dua alat, dua pertanyaan.

Apidog juga menyediakan CLI tanpa antarmuka grafis sehingga skenario fungsional tersebut berjalan di pipa CI yang sama dengan langkah beban Anda. Instal dengan Node:

npm install -g apidog-cli

Kemudian jalankan skenario atau suite yang tersimpan berdasarkan id, dengan pelapor untuk pipa Anda:

apidog run --access-token "$APIDOG_ACCESS_TOKEN" \
  -t <scenarioOrSuiteId> \
  -e <environmentId> \
  -r cli,html,junit

Flag -t menerima id skenario, folder, atau suite, -e menerima id lingkungan, dan -r memilih satu atau lebih pelapor (cli, html, json, junit). Output junit cocok dengan sebagian besar dasbor CI. Lihat tutorial baris perintah Apidog CLI untuk menjalankan langkah demi langkah, dan panduan pipa CI/CD untuk alur kerja yang dapat disalin-tempel. Jalankan gerbang fungsional terlebih dahulu, lalu biarkan Vegeta mengukur titik akhir yang telah lulus.

FAQ

Apakah Vegeta mendukung permintaan POST dengan body?

Ya. Dalam file target HTTP, letakkan metode dan URL pada baris pertama, tambahkan header Content-Type, dan referensikan file body dengan @./payload.json. Dalam format JSON, atur bidang method, url, dan body yang dikodekan base64.

Apa yang dilakukan -rate=0?

Ini menghilangkan batas tingkat permintaan dan mengirim permintaan secepat yang diizinkan oleh pekerja dan koneksi. Itu adalah pengujian throughput maksimum, yang berbeda dari pengujian tingkat konstan yang terkontrol. Untuk pengukuran kapasitas yang dapat diulang, tetapkan tingkat yang eksplisit.

Bagaimana cara membaca persentil latensi?

Baris latensi laporan menunjukkan min, rata-rata, dan persentil ke-50, 90, 95, 99, dan maks. Fokus pada persentil ke-95 dan ke-99. Ini menggambarkan "ekor" lambat yang dialami pengguna nyata, yang dapat disembunyikan oleh rata-rata saja.

Dapatkah Vegeta memeriksa apakah API saya mengembalikan data yang benar?

Tidak. Ini mengukur throughput, latensi, dan kode status. Ini tidak menegaskan pada body respons atau skema. Pasangkan dengan alat pengujian fungsional untuk kebenaran, lalu gunakan Vegeta untuk tingkat permintaan dan latensi.

Bagaimana cara menjalankan Vegeta di CI?

Ini adalah biner tunggal yang membaca stdin dan menulis hasil, jadi ia dapat dimasukkan ke dalam langkah shell apa pun. Simpan hasilnya dengan -output, lalu hasilkan laporan teks atau JSON sebagai artefak build. Tambahkan gerbang fungsional, seperti Apidog CLI, sebelum langkah beban sehingga Anda hanya mengukur titik akhir yang sudah lulus pernyataannya.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.