Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
30 Oct 2022 · 2 mnt baca ·Artikel 20 / 119
Go

Cara Membuat Unit Benchmark Pada Golang

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Package testing selain berisikan tools untuk testing juga berisikan tools untuk benchmarking. Cara pembuatan benchmark sendiri cukup mudah yaitu dengan membuat fungsi yang namanya diawali dengan Benchmark dan parameternya bertipe *testing.B.

Membuat program pada file main.go

Buat program seperti dibawah ini, yang mana pada program ini terdapat Struct Tabung yang nantinya terdiri dari beberapa method, diantaranya sebagai berikut. Pertama siapkan terlebih dahulu sebuah struct Tabung. Variabel object hasil struct ini nantinya kita gunakan sebagai bahan testing.

go
 1package main
 2
 3import "math"
 4
 5type Tabung struct {
 6	Jarijari, Tinggi float64
 7}
 8
 9func (t Tabung) Volume() float64 {
10	return math.Phi * math.Pow(t.Jarijari, 2) * t.Tinggi
11}
12
13func (t Tabung) Luas() float64 {
14	return 2 * math.Phi * t.Jarijari * (t.Jarijari + t.Tinggi)
15}
16
17func (t Tabung) KelilingAlas() float64 {
18	return 2 * math.Phi * t.Jarijari
19}

Lalu, kita akan mengetes performa perhitungan luas tabung. Siapkan fungsi dengan nama BenchmarkHitungLuas() dengan isi adalah kode berikut.

go
1func BenchmarkHitungLuas(b *testing.B) {
2	tabung := Tabung{Jarijari: 7, Tinggi: 10}
3	for i := 0; i < b.N; i++ {
4		tabung.Luas()
5	}
6}

Jalankan test menggunakan argument -bench=., argumen ini digunakan untuk menandai bahwa selain testing terdapat juga benchmark yang perlu diuji.

bash
 1➜  tabung git:(main) ✗ go test -v -bench=.              
 2=== RUN   TestTabung_Volume
 3=== RUN   TestTabung_Volume/testing_hitung_volume
 4--- PASS: TestTabung_Volume (0.00s)
 5    --- PASS: TestTabung_Volume/testing_hitung_volume (0.00s)
 6=== RUN   TestTabung_Luas
 7=== RUN   TestTabung_Luas/testing_hitung_luas_permukaan
 8--- PASS: TestTabung_Luas (0.00s)
 9    --- PASS: TestTabung_Luas/testing_hitung_luas_permukaan (0.00s)
10=== RUN   TestTabung_KelilingAlas
11=== RUN   TestTabung_KelilingAlas/testing_hitung_keliling_alas
12--- PASS: TestTabung_KelilingAlas (0.00s)
13    --- PASS: TestTabung_KelilingAlas/testing_hitung_keliling_alas (0.00s)
14goos: darwin
15goarch: arm64
16pkg: github.com/santekno/tabung
17BenchmarkHitungLuas
18BenchmarkHitungLuas-8           1000000000               0.3317 ns/op
19PASS
20ok      github.com/santekno/tabung      2.557s

Cara membaca hasil Benchmark

Arti dari 1000000000 0.3317 ns/op adalah, fungsi di atas di-test sebanyak 1 miliar kali, hasilnya membutuhkan waktu rata-rata 0.3317 nano detik untuk run satu fungsi.

Artikel Terkait

💬 Komentar