Heim >Backend-Entwicklung >Golang >Wie kann ich gRPC-Dienste unterwegs effizient testen, ohne echte Ports zu verwenden?

Wie kann ich gRPC-Dienste unterwegs effizient testen, ohne echte Ports zu verwenden?

DDD
DDDOriginal
2024-12-17 18:12:15426Durchsuche

How Can I Efficiently Test gRPC Services in Go Without Using Real Ports?

Testen eines gRPC-Dienstes

Das Testen von in Go geschriebenen gRPC-Diensten kann mit dem Paket google.golang.org/grpc/test/bufconn durchgeführt werden. Dieses Paket erleichtert das Testen von Streaming-RPCs, ohne auf echte Portnummern angewiesen zu sein.

Beispiel:

So testen Sie den bereitgestellten Hello World-Server:

package main

import (
    "context"
    "log"
    "testing"

    pb "helloworld"

    "github.com/golang/protobuf/ptypes/empty"

    "google.golang.org/grpc"
    "google.golang.org/grpc/codes"
    "google.golang.org/grpc/status"
    "google.golang.org/grpc/test/bufconn"
)

const bufSize = 1024 * 1024

var lis *bufconn.Listener

func init() {
    lis = bufconn.Listen(bufSize)
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    go func() {
        if err := s.Serve(lis); err != nil {
            log.Fatalf("Server exited with error: %v", err)
        }
    }()
}

func bufDialer(context.Context, string) (net.Conn, error) {
    return lis.Dial()
}

func TestSayHello(t *testing.T) {
    ctx := context.Background()
    conn, err := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer), grpc.WithInsecure())
    if err != nil {
        t.Fatalf("Failed to dial bufnet: %v", err)
    }
    defer conn.Close()
    client := pb.NewGreeterClient(conn)
    resp, err := client.SayHello(ctx, &pb.HelloRequest{"Dr. Seuss"})
    if err != nil {
        t.Fatalf("SayHello failed: %v", err)
    }
    log.Printf("Response: %+v", resp)
    // Test for output here.
}

Vorteile:

  • Vermeidet echte Portnutzung während des Tests
  • Stellt Netzwerkverhalten in einer kontrollierten Umgebung bereit
  • Simuliert reale Nutzungsmuster zum Testen von Streaming-RPCs

Das obige ist der detaillierte Inhalt vonWie kann ich gRPC-Dienste unterwegs effizient testen, ohne echte Ports zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn