tutorial

  1. Menggunakan grpcurl untuk Testing Manual


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

FiturgrpcurlClient gRPC Sendiri
Mudah DigunakanSangat mudahPerlu setup, build
Tidak Butuh .protoJika reflect aktifWajib butuh
OtomasiBisa di-scriptPerlu coding
Response formatJSON (user-friendly)Struct/object (kode)
Inline TestingCLI, copy-pasteDebug 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:

comments powered by Disqus