首页 > 其他分享 >【grpcurl】使用grpcurl测试GRPC服务

【grpcurl】使用grpcurl测试GRPC服务

时间:2024-08-12 19:54:40浏览次数:13  
标签:reflection License grpcurl helloworld server GRPC 测试 grpc

一、场景

    由于我们需要访问GRPC服务的方法,便于我们进行测试,所以我们开启了grpc服务的反射机制

 

二、安装grpcurl

    https://github.com/fullstorydev/grpcurl

   https://github.com/fullstorydev/grpcurl/releases 下载对应环境的包即可

sudo dpkg -i grpcurl_1.9.1_linux_amd64.deb

ubuntu系统安装

 

三、服务端代码

proto文件,生成代码方法百度一下即可

// Copyright 2015 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}

  rpc SayHelloStreamReply (HelloRequest) returns (stream HelloReply) {}

  rpc SayHelloBidiStream (stream HelloRequest) returns (stream HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

服务端代码

# Copyright 2018 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""The reflection-enabled version of gRPC helloworld.Greeter server."""
import time
from concurrent import futures
import logging

import grpc
from grpc_reflection.v1alpha import reflection
from grpc_reflection.v1alpha import reflection_pb2_grpc
import helloworld_pb2
import helloworld_pb2_grpc


class Greeter(helloworld_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        print(time.time())
        return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name)


def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    SERVICE_NAMES = (
        helloworld_pb2.DESCRIPTOR.services_by_name["Greeter"].full_name,
        reflection.SERVICE_NAME,
    )
    reflection.enable_server_reflection(SERVICE_NAMES, server)
    # server.add_insecure_port("[::]:50051")
    server.add_insecure_port("127.0.0.1:50051")
    server.start()
    server.wait_for_termination()


if __name__ == "__main__":
    logging.basicConfig()
    serve()

需要安装

pip install grpcio_reflection

 

四、使用

1、查看服务及接口信息

$ grpcurl --plaintext  localhost:50051 describe
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
  rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
helloworld.Greeter is a service:
service Greeter {
  rpc SayHello ( .helloworld.HelloRequest ) returns ( .helloworld.HelloReply );
  rpc SayHelloBidiStream ( stream .helloworld.HelloRequest ) returns ( stream .helloworld.HelloReply );
  rpc SayHelloStreamReply ( .helloworld.HelloRequest ) returns ( stream .helloworld.HelloReply );
}

 

2、查看服务信息

$ grpcurl --plaintext  localhost:50051 list
grpc.reflection.v1alpha.ServerReflection
helloworld.Greeter

 

3、调用grpc服务方法

$ grpcurl --plaintext -d '{ "name": "World" }' localhost:50051 helloworld.Greeter/SayHello
{
  "message": "Hello, World!"
}

 

 

五、问题

1、$ grpcurl localhost:50051 describe
Failed to dial target host "localhost:50051": tls: first record does not look like a TLS handshake

由于默认是TLS加密,我们起的服务不支持,所以需要使用--plaintext参数

 

参考链接:

在 ASP.NET Core 中使用 gRPCurl 和 gRPCui 测试 gRPC 服务 | Microsoft Learn

标签:reflection,License,grpcurl,helloworld,server,GRPC,测试,grpc
From: https://www.cnblogs.com/fireblackman/p/18355638

相关文章

  • 科大讯飞智文 2.0 版本发布;人工智能模型 Grok 2 测试版即将发布丨 RTE 开发者日报
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • C# Binding之 DataContext 测试
    <Windowx:Class="WpfApp2.BindingTest5"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 软件测试需要具备的基础知识【功能测试】---后端知识(三)
    ​​您好,我是程序员小羊!前言为了更好的学习软件测试的相关技能,需要具备一定的基础知识。需要学习的基础知识包括:1、计算机基础2、前端知识3、后端知识4、软件测试理论后期分四篇文章进行编写,这是第三篇这一篇文章是讲解后端基础知识的一篇文章:正文:一、系统......
  • BOOST c++库学习 之 boost.thread入门实战指南 使用boost.thread库以及读写锁mutex的
    Boost.Thread库简介1.概述Boost.Thread库是Boost库中专门用于处理多线程编程的模块。它提供了一组跨平台的线程管理和同步工具,帮助开发者在C++中更轻松地编写多线程程序。Boost.Thread的设计目标是使多线程编程更加简单、可靠,同时保持高效和可移植性。2.Boost.Thread......
  • CogVideoX环境搭建&推理测试
    ​ 引子智谱AI版Sora开源,首个可商用,18G显存即可运行。前文写了Open-Sora1.2的博文,感兴趣的童鞋请移步(Open-Sora1.2环境搭建&推理测试_opensora1.2-CSDN博客)。对于这种占用资源少,且效果不错的多模态模型那么肯定不容错过。OK,我们开始吧。一、模型介绍CogVideoX是 清影 同......
  • 不只是前端,后端、产品和测试也需要了解的浏览器知识(二)
    继上篇《不只是前端,后端、产品和测试也需要了解的浏览器知识(一)》介绍了浏览器的基本情况、发展历史以及市场占有率。本篇文章将介绍浏览器基本原理。在掌握基本原理后,通过技术深入,在研发过程中不断创新,推动产品性能、用户体验的提升,来实现业务的增长,创造可持续的价值。一、业......
  • “揭秘职业兴趣测试的独门秘籍,提升你的职业发展!“
    简介霍兰德职业兴趣自测(Self-DirectedSearch)是由美国职业指导专家霍兰德(JohnHolland)根据他本人大量的职业咨询经验及其职业类型理论编制的测评工具。霍兰德认为,个人职业兴趣特性与职业之间应有一种内在的对应关系。根据兴趣的不同,人格可分为研究型(I)、艺术型(A)、社会型(S)、企......
  • 奥特曼花园私照“惊”到AI圈创始人,引出OpenAI代号“草莓”神秘项目进展大讨论,匿名基础
    今天,SamAltman在X上晒了一张自家花园的照片,结果却把AI界的创始人们“惊”到了。图片公司高层突发的巨大变动,似乎并没有太多影响到这位当家人,奥特曼在海外媒体秀出了一张花园花盆中生长的草莓的宜人景色,并用他典型的全小写文字风格配文“我喜欢花园里的夏天”。看起来,既在......
  • 自动化测试面试点
    1. 封装自动化测试框架po页面对象层,用例层,元素定位层,测试数据层。  ----PO页面对象层(用例层从页面层调用操作方法,写成用例)其他的是:日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成---PO是PageObject模式的简称,它是一种设计思......
  • Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)
    一、并行性和超时您可以指示TestNG以各种方式在单独的线程中运行测试。可以通过在suite标签中使用parallel属性来让测试方法运行在不同的线程中。这个属性可以带有如下这样的值:二、并行套件(suites)如果您正在运行多个套件文件(例如“ javaorg.testng.TestNGtestng1.xml......