Go 言語の自動パフォーマンス テスト ソリューション:ベジータと GoConvey フレームワークを使用します。ソリューションは次の手順で構成されます。 ベジータを使用して攻撃テストまたは負荷テストを作成します。 BDD テストに GoConvey を使用して、サーバーの応答が 200 OK であることを確認します。ベジータのヒストグラムを使用して、リクエストの遅延が 95% の確率で 500 ミリ秒未満であるかどうかを測定します。
はじめに
パフォーマンス テストは、高負荷時のコードの安定性と応答性を確保するために重要です。 Go 言語のサイズと複雑さが増大し続けるにつれて、自動パフォーマンス テストの重要性がさらに増しています。この記事では、Go 言語を使用して自動パフォーマンス テストを実装する方法を紹介します。
ツール
実践例
簡単な HTTP サーバーを構築し、ベジータと GoConvey を使用してパフォーマンス テストを実行してみましょう。
サーバーコード
// 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) }
テストコード
// 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) }) }) }
実行方法
go run server.go
go run server.go
go test
go test
結論
ベジータとGoConveyを使用すると、自動化可能なパフォーマンステストを簡単に作成できます。これらのテストは、コードのパフォーマンスを検証し、高負荷下でも適切に動作することを確認するための、スケーラブルで読み取り可能なメカニズムを提供します。 🎜以上がGo言語パフォーマンステストの自動化ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。