Penyelesaian automatik untuk ujian prestasi bahasa Go

WBOY
Lepaskan: 2024-05-07 12:45:01
asal
765 orang telah melayarinya

Penyelesaian ujian prestasi automatik bahasa Go: menggunakan rangka kerja Vegeta dan GoConvey. Penyelesaiannya terdiri daripada langkah berikut: Gunakan Vegeta untuk mencipta serangan atau ujian beban. Gunakan GoConvey untuk ujian BDD untuk mengesahkan bahawa respons pelayan adalah 200 OK. Gunakan Histogram Vegeta untuk mengukur sama ada kependaman permintaan kurang daripada 500 milisaat dengan kebarangkalian 95%.

Penyelesaian automatik untuk ujian prestasi bahasa Go

Penyelesaian automatik untuk ujian prestasi bahasa Go

Pengenalan

Ujian prestasi adalah penting untuk memastikan kestabilan dan tindak balas kod di bawah beban tinggi. Apabila bahasa Go terus berkembang dari segi saiz dan kerumitan, ujian prestasi automatik menjadi lebih penting. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan ujian prestasi automatik.

Alat

  • [GoConvey](https://github.com/smartystreets/goconvey): Rangka kerja ujian BDD yang pantas, boleh dibaca dan boleh dikembangkan.
  • [Vegeta](https://github.com/tsenart/vegeta): Alat yang boleh menjana serangan atau memuatkan ujian untuk mengukur prestasi pelayan.

Kes Praktikal

Mari bina pelayan HTTP mudah dan lakukan ujian prestasi padanya menggunakan Vegeta dan GoConvey.

Kod pelayan

// server.go

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, World!")
    })

    http.ListenAndServe(":8080", nil)
}
Salin selepas log masuk

Kod ujian

// test.go

package main

import (
    "fmt"
    "testing"
    "time"

    . "github.com/smartystreets/goconvey/convey"
    "github.com/tsenart/vegeta/lib"
)

func TestHTTPServer(t *testing.T) {
    go main()

    Convey("The HTTP server should", t, func() {
        targeter := vegeta.NewStaticTargeter(vegeta.Target{"localhost:8080", "http"})
        attack := vegeta.Config{
            Targets:     targeter,
            Rate:        30,
            Duration:    10 * time.Second,
            Connections: 20,
        }
        results := vegeta.Attack(attack)

        Convey("respond with 200 OK", func() {
            var successCount uint64
            for res := range results {
                if res.Code == 200 {
                    successCount++
                }
            }
            defer results.Close()

            So(successCount, ShouldBeGreaterThan, 0)
        })

        Convey("take less than 500ms per request", func() {
            var latencyHist vegeta.Histogram
            for res := range results {
                latencyHist.Add(res.Latency)
            }
            defer results.Close()

            p95 := latencyHist.Percentile(95)
            So(p95, ShouldBeLessThan, 500*time.Millisecond)
        })
    })
}
Salin selepas log masuk

Cara menjalankan

  1. Jalankan pelayan: go run server.gogo run server.go
  2. 运行测试:go test / kod>

Kesimpulan

Menggunakan Vegeta dan GoConvey, kami boleh membuat ujian prestasi automatik dengan mudah. Ujian ini menyediakan mekanisme berskala dan boleh dibaca untuk mengesahkan prestasi kod anda dan memastikan ia beroperasi dengan betul di bawah beban berat.

Atas ialah kandungan terperinci Penyelesaian automatik untuk ujian prestasi bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan