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; }
// SayHello implements GreeterServer func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil }
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. }
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:
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!