title: “88. Menggunakan grpcurl untuk Testing Manual”
date: 2024-06-20T12:00:00Z
tags: [grpc, testing, cli, productivity, tutorial]
cover_image: https://miro.medium.com/v2/resize:fit:1400/1*0UvK7Uv0LpD_gQE7IJzFNw.png
88. Menggunakan grpcurl untuk Testing Manual
Testing adalah bagian integral dalam pengembangan aplikasi, terutama ketika kita berbicara tentang protokol komunikasi seperti gRPC. Namun, seringkali testing pada service gRPC bisa menjadi mimpi buruk—setup terlalu rumit, Anda harus menulis banyak kode “client dummy”, atau bahkan tersandung dependency yang tidak jelas hanya untuk memastikan service berjalan seperti yang diinginkan. Di sinilah peran grpcurl sebagai game changer.
Pada artikel ini, saya ingin berbagi pengalaman dan praktik terbaik dalam menggunakan grpcurl untuk manual testing service gRPC, beserta contoh langsung, simulasi, dan bahkan sedikit diagram alur untuk memperjelas workflow yang sering saya gunakan dalam sehari-hari sebagai engineer.
Apa Itu grpcurl?
grpcurl adalah sebuah CLI tool open-source yang memungkinkan kita untuk berkomunikasi langsung dengan server gRPC. Fungsinya mirip seperti curl—hanya saja untuk gRPC. Dengan tool ini, kamu bisa inspect, call, dan debug endpoint gRPC tanpa harus menulis kode client khusus.
Kenapa Butuh grpcurl?
- Tidak Perlu Client Code: Cukup modal terminal, kamu sudah bisa perform call.
- Dinamis: Mendukung protokol reflection, tidak wajib punya file
.proto. - Automasi: Bisa dikombinasikan dengan bash script atau CI pipeline.
- Interaktif: Mudah untuk explore parameter dan response.
Instalasi Singkat
# Untuk Mac (Homebrew)
brew install grpcurl
# Untuk Linux
sudo apt install protobuf-compiler
GO111MODULE=on go get github.com/fullstorydev/grpcurl/cmd/grpcurl
Cek instalasi dengan:
grpcurl --version
Langkah 1: Mengenal Service
Sebelum testing, pastikan Anda tahu endpoint mana saja yang tersedia di server. Jika server mendukung reflection, jalankan perintah berikut:
grpcurl <host>:<port> list
Contoh output:
helloworld.Greeter
userprofile.UserService
Untuk mengetahui method dari service tertentu:
grpcurl <host>:<port> list userprofile.UserService
Output:
userprofile.UserService.GetUser
userprofile.UserService.UpdateUser
userprofile.UserService.ListUsers
Langkah 2: Menampilkan Detail Method
Agar tahu input/output dari sebuah method, gunakan describe:
grpcurl <host>:<port> describe userprofile.UserService.GetUser
Output contoh:
rpc GetUser (GetUserRequest) returns (User) {
}
Langkah 3: Melakukan Call (Tanpa .proto)
Jika server support reflection—modal json, kamu sudah bisa panggil RPC.
grpcurl -d '{
"user_id": "u123"
}' <host>:<port> userprofile.UserService.GetUser
Hasilnya:
{
"user_id": "u123",
"name": "John",
"email": "john@mail.com"
}
Jika Reflection Tidak Ada (Harus .proto)
Kadang, produk yang secure atau environment production sengaja menonaktifkan reflection. Tenang, grpcurl bisa pakai file .proto secara lokal:
grpcurl -import-path . -proto userprofile.proto \
-d '{"user_id": "u123"}' \
<host>:<port> userprofile.UserService.GetUser
Diagram Alur: Workflow Testing Manual
flowchart TD
A[Mulai] --> B{GRPC Reflection Tersedia?}
B -- Ya --> C[Langsung grpcurl endpoint]
B -- Tidak --> D[Pakai .proto lokal]
C --> E[Panggil method dengan data]
D --> E
E --> F[Lihat hasil]
F --> G{Perlu Testing Lanjut?}
G -- Ya --> E
G -- Tidak --> H[Selesai]
Diagram di atas sangat mirip dengan kebiasaan saya saat debugging service gRPC baru untuk klien atau tim lain.
Contoh Simulasi: Workflow End-to-End
Asumsi: Ada service UserService dengan endpoint CreateUser.
1. Melihat Endpoint
grpcurl localhost:50051 list
2. Lihat Detail CreateUser
grpcurl localhost:50051 describe userprofile.UserService.CreateUser
3. Mulai Testing CreateUser
grpcurl -d '{
"name": "Alice",
"email": "alice@mail.com"
}' localhost:50051 userprofile.UserService.CreateUser
Output:
{
"user_id": "u124",
"name": "Alice",
"email": "alice@mail.com"
}
4. Simulasi Error Case
Coba kirim request tanpa email:
grpcurl -d '{
"name": "Bob"
}' localhost:50051 userprofile.UserService.CreateUser
Output:
ERROR:
Code: InvalidArgument
Message: email is required
5. Table Perbandingan: grpcurl vs Menulis Client
| Fitur | grpcurl | Client gRPC Sendiri |
|---|---|---|
| Mudah Digunakan | Sangat mudah | Perlu setup, build |
| Tidak Butuh .proto | Jika reflect aktif | Wajib butuh |
| Otomasi | Bisa di-script | Perlu coding |
| Response format | JSON (user-friendly) | Struct/object (kode) |
| Inline Testing | CLI, copy-paste | Debug code |
Tips & Best Practice
- Automasi testing: Masukkan grpcurl dalam bash script untuk regression/CI pipeline.
- Environment variable: Simpan host/port di ENV agar lebih mudah.
- Handle Auth/TLS: grpcurl mendukung autentikasi dan sertifikat, cek docs.
- Documentation: Attach output deskripsi ke dokumentasi internal tim.
- Testing Negative Case: Jangan lupa testing input invalid, edge case, ataupun error!
Kesimpulan
grpcurl sangat powerful dalam melibas masalah “How do I test this gRPC service?” tanpa harus terus-menerus menulis atau rebuild kode client dummy. Anda bisa mengeksplorasi API, mendebug, bahkan mengautomasi regression check hanya dengan modal terminal. Bagi engineer yang sering bermain di level integration dan system, grpcurl wajib masuk toolbelt.
Catatan: gRPC adalah masa depan API modern; tool yang tepat akan mempercepat Anda berinovasi.
Semoga ini membantu meningkatkan produktivitas manual testing service gRPC Anda. Silakan share pengalaman menggunakan tools CLI lain di kolom komentar! 🚀
Referensi: