Maison > développement back-end > Golang > Comment puis-je tester efficacement les services gRPC en Go sans utiliser de vrais ports ?

Comment puis-je tester efficacement les services gRPC en Go sans utiliser de vrais ports ?

DDD
Libérer: 2024-12-17 18:12:15
original
428 Les gens l'ont consulté

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

Test d'un service gRPC

Le test des services gRPC écrits en Go peut être réalisé à l'aide du package google.golang.org/grpc/test/bufconn. Ce package facilite le test des RPC de streaming sans dépendre de numéros de port réels.

Exemple :

Pour tester le serveur Hello World fourni :

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.
}
Copier après la connexion

Avantages :

  • Évite l'utilisation réelle du port pendant les tests
  • Fournit le comportement du réseau dans un environnement contrôlé
  • Simule des modèles d'utilisation réels pour tester les RPC de streaming

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal