ホームページ バックエンド開発 Golang Golang 学習 Web アプリケーションのパフォーマンス ストレス テスト

Golang 学習 Web アプリケーションのパフォーマンス ストレス テスト

Jun 24, 2023 am 10:59 AM
golang ウェブアプリケーション パフォーマンスストレステスト

Web アプリケーションの開発プロセスでは、パフォーマンスと安定性に対する要件が非常に高くなります。特にアプリケーションが多数の同時リクエストを処理する必要がある場合、パフォーマンスはより差し迫った問題になります。 Web アプリケーションのパフォーマンスと信頼性を保証するには、パフォーマンス ストレス テストを実行する必要があります。

この記事では、Golang を使用して Web アプリケーションのパフォーマンス ストレス テストを実行する方法を理解できるようにします。これにより、アプリケーションのボトルネックを迅速に発見し、対策を講じることができます。

1. Golang テスト ツールの紹介

Golang は、テスト ケースを簡単に作成して実行できる Go Test というツールを公式に提供しています。さらに、Go Test ツールを使用して、パフォーマンス テスト ケースを作成し、テスト ケースを通じてパフォーマンス テストを実行することもできます。

Go Test ツールに加えて、パフォーマンス テストに使用できるベンチマーク テストと呼ばれるテスト フレームワークもあります。これにより、ベンチマーク関数を作成し、それを複数回実行して正確なテスト結果を得ることができます。

この記事では、ベンチマーク テスト フレームワークを使用して、Web アプリケーションのパフォーマンス テストを実行します。

2. Web アプリケーションの性能テストの準備作業

性能テストの準備をする前に、次の 2 つの準備を行う必要があります:

1. Web アプリケーションのプログラムを作成する

パフォーマンス テストを実施する前に、テスト ケースを提供するために Web アプリケーションの作成を完了する必要があります。ここでは、Gin フレームワークを使用して Web アプリケーションを作成します。コードは次のとおりです:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.String(200, "Hello Golang!")
    })
    r.Run(":8080")
}
ログイン後にコピー

2. テスト関数を作成します

テスト インターフェイスを Web アプリケーションに追加した後、次のように記述できます。パフォーマンステストを実行するベンチマーク機能。ここでは、Golang のテスト パッケージとベンチマーク テスト フレームワークに基づいたテスト関数を作成します。コードは次のとおりです:

package main_test

import (
    "net/http"
    "net/http/httptest"
    "testing"

    "github.com/gin-gonic/gin"
)

var (
    ts *httptest.Server
)

func setup() {
    r := gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.String(200, "Hello Golang!")
    })
    ts = httptest.NewServer(r)
}

func BenchmarkGetHello(b *testing.B) {
    setup()
    defer ts.Close()
    client := ts.Client()
    for i := 0; i < b.N; i++ {
        _, err := client.Get(ts.URL + "/hello")
        if err != nil {
            b.Fatal(err)
        }
    }
}
ログイン後にコピー

このテスト関数では、setup() 関数を通じてテスト サーバーを起動します。次に、BenchmarkGetHello というベンチマーク関数を作成し、その中で Golang のテスト パッケージの B.N 属性を使用して、Get リクエストをループ内で b.N 回実行しました。

3. Web アプリケーションのパフォーマンス テストを実行します

1. コマンド ラインの実行

パフォーマンス テストを実行するには、まず Web アプリケーションが存在するディレクトリに入る必要があります次に、 go test コマンドを使用してテスト関数を実行します。このコマンドを実行するときは、テスト関数をフィルターして出力するためのパラメーターをいくつか追加する必要があります。コマンドの例を次に示します:

go test -bench=. -benchmem -run=none -cpuprofile=cpu.out -memprofile=mem.out
ログイン後にコピー
  • -bench= すべてのベンチマークの実行を示します
  • -benchmem メモリ割り当てをアクティブにする追加のベンチマークを示します
  • -run= none を意味します単体テストを実行しない
  • -cpuprofile=cpu.out は、CPU 分析レポートをファイル cpu.out に出力することを意味します
  • -memprofile=mem.out は、メモリ分析レポートをファイル mem に出力することを意味します.out

コマンドを実行すると、システムは次のような出力を行います:

BenchmarkGetHello-8       20000000            66.1 ns/op           0 B/op           0 allocs/op
ログイン後にコピー

出力からわかるように、ベンチマーク関数では Get が実行されます。ループ 20,000,000 のリクエストがあり、各リクエストには 66.1ns かかり、メモリ割り当ては 0B、メモリ割り当て数は 0 です。

2. ビジュアル ツールを使用する

コマンド ライン ツールに加えて、pprof、go-torch などのいくつかのビジュアル ツールを使用して、パフォーマンス テスト結果を視覚的に表示することもできます。これらのツールを使用すると、パフォーマンス テストの結果をより直感的に表示し、問題をより適切に特定できるようになります。

4. パフォーマンス テストの結論

パフォーマンス テストと分析レポートを通じて、次の結論を導き出すことができます:

1. Web アプリケーションは同時実行に対して安定し続けることができます。リクエストが応答します。

2. テスト結果には、ネットワークの変動やテスト サーバーのハードウェア レベルなど、応答時間を増加させるいくつかの要因が含まれる可能性があります。

3. Web アプリケーションの応答時間とメモリ割り当ては非常に小さく、非常に優れたパフォーマンス レベルを実現しています。

要約すると、この記事では、Web アプリケーションのパフォーマンス テストの基本的な概念と手法を紹介し、Go Test ツールとベンチマーク テスト フレームワークを使用したパフォーマンス テストの具体的な手順を説明します。パフォーマンスのテストと分析を通じて、アプリケーションのパフォーマンスのボトルネックをより深く理解し、タイムリーな最適化と調整を行ってアプリケーションのパフォーマンスと安定性を向上させることができます。

以上がGolang 学習 Web アプリケーションのパフォーマンス ストレス テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Jun 06, 2024 am 11:21 AM

Golang データベース接続用の接続プールを構成するにはどうすればよいですか?

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか?

Golangでリストからランダムな要素を生成するにはどうすればよいですか? Golangでリストからランダムな要素を生成するにはどうすればよいですか? Jun 05, 2024 pm 04:28 PM

Golangでリストからランダムな要素を生成するにはどうすればよいですか?

golangフレームワークの長所と短所の比較 golangフレームワークの長所と短所の比較 Jun 05, 2024 pm 09:32 PM

golangフレームワークの長所と短所の比較

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Jun 05, 2024 pm 10:39 PM

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか?

golang フレームワーク ドキュメントの使用手順 golang フレームワーク ドキュメントの使用手順 Jun 05, 2024 pm 06:04 PM

golang フレームワーク ドキュメントの使用手順

See all articles