Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menguji Perkhidmatan gRPC dengan Cekap dalam Go Menggunakan Sambungan Dalam Memori?

Bagaimana untuk Menguji Perkhidmatan gRPC dengan Cekap dalam Go Menggunakan Sambungan Dalam Memori?

DDD
Lepaskan: 2024-12-26 01:26:11
asal
572 orang telah melayarinya

How to Efficiently Test gRPC Services in Go Using In-Memory Connections?

Menguji Perkhidmatan gRPC dalam Go

Pengenalan

gRPC, rangka kerja yang digunakan secara meluas untuk mencipta panggilan prosedur jauh (RPC) , menyediakan mekanisme yang teguh untuk komunikasi antara perkhidmatan. Untuk memastikan kebolehpercayaan dan ketepatan perkhidmatan gRPC, ujian memainkan peranan yang penting. Artikel ini meneroka menguji perkhidmatan gRPC yang ditulis dalam Go menggunakan sambungan dalam memori.

Menggunakan Pakej Bufconn

Untuk mengelakkan kerumitan menggunakan port rangkaian sebenar semasa menguji perkhidmatan gRPC, pakej google.golang.org/grpc/test/bufconn disyorkan. Pakej ini membolehkan penciptaan pendengar dalam memori yang meniru gelagat rangkaian tanpa melibatkan sistem pengendalian.

Contoh Kod

Pertimbangkan perkhidmatan gRPC dengan definisi proto berikut dan pelaksanaan pelayan:

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
Salin selepas log masuk
// SayHello implements GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
Salin selepas log masuk

Ujian Pelaksanaan

Untuk menguji fungsi SayHello, fungsi ujian boleh dibuat menggunakan bufconn:

func TestSayHello(t *testing.T) {
    ctx := context.Background()
    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)
        }
    }()
    defer s.GracefulStop()
    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)
    // Perform additional tests on the response.
}
Salin selepas log masuk

Ujian ini memulakan pendengar dalam memori, memulakan pelayan gRPC dan menetapkan sambungan ke pelayan menggunakan pendail bufconn. Ia kemudian memanggil fungsi SayHello dan menegaskan ketepatan respons.

Kelebihan Menggunakan Bufconn

Menggunakan bufconn menawarkan beberapa kelebihan untuk menguji perkhidmatan gRPC:

  • Meniru tingkah laku rangkaian, menyediakan ujian yang realistik syarat.
  • Membenarkan ujian tanpa memerlukan port tertentu atau kebergantungan luaran.
  • Menyokong penstriman RPC, membolehkan ujian menyeluruh kefungsian penstriman.
  • Memudahkan persediaan ujian dan teardown, mengurangkan kod boilerplate.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Perkhidmatan gRPC dengan Cekap dalam Go Menggunakan Sambungan Dalam Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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