软件测试之gRPC接口测试详解

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读2.5k次,点赞85次,收藏11次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502gRPC是什么?

gRPC是什么可以用官网的一句话来概括:

A high-performance, open-source universal RPC framework

所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。如下图所示就是一个典型的RPC结构图。

gRPC有什么好处以及在什么场景下需要用gRPC

既然是server/client模型,那么我们直接用restful api不是也可以满足吗,为什么还需要RPC呢?下面我们就来看看RPC到底有哪些优势

gRPC vs. Restful API

gRPC和restful API都提供了一套通信机制,用于server/client模型通信,而且它们都使用http作为底层的传输协议(严格地说, gRPC使用的http2.0,而restful api则不一定)。不过gRPC还是有些特有的优势,如下:

gRPC可以通过protobuf来定义接口,从而可以有更加严格的接口约束条件。关于protobuf可以参见笔者之前的小文Google Protobuf简明教程

另外,通过protobuf可以将数据序列化为二进制编码,这会大幅减少需要传输的数据量,从而大幅提高性能。

gRPC可以方便地支持流式通信(理论上通过http2.0就可以使用streaming模式, 但是通常web服务的restful api似乎很少这么用,通常的流式数据应用如视频流,一般都会使用专门的协议如HLS,RTMP等,这些就不是我们通常web服务了,而是有专门的服务器应用。)

使用场景

需要对接口进行严格约束的情况,比如我们提供了一个公共的服务,很多人,甚至公司外部的人也可以访问这个服务,这时对于接口我们希望有更加严格的约束,我们不希望客户端给我们传递任意的数据,尤其是考虑到安全性的因素,我们通常需要对接口进行更加严格的约束。这时gRPC就可以通过protobuf来提供严格的接口约束。

对于性能有更高的要求时。有时我们的服务需要传递大量的数据,而又希望不影响我们的性能,这个时候也可以考虑gRPC服务,因为通过protobuf我们可以将数据压缩编码转化为二进制格式,通常传递的数据量要小得多,而且通过http2我们可以实现异步的请求,从而大大提高了通信效率。

但是,通常我们不会去单独使用gRPC,而是将gRPC作为一个部件进行使用,这是因为在生产环境,我们面对大并发的情况下,需要使用分布式系统来去处理,而gRPC并没有提供分布式系统相关的一些必要组件。而且,真正的线上服务还需要提供包括负载均衡,限流熔断,监控报警,服务注册和发现等等必要的组件。不过,这就不属于本篇文章讨论的主题了,我们还是先继续看下如何使用gRPC。

gRPC HelloWorld实例详解

gRPC的使用通常包括如下几个步骤:

  1. 通过protobuf来定义接口和数据类型

  2. 编写gRPC server端代码

  3. 编写gRPC client端代码

下面来通过一个实例来详细讲解上述的三步。

下边的hello world实例完成之后,其目录结果如下:

定义接口和数据类型

通过protobuf定义接口和数据类型:

  syntax = "proto3";
  package rpc_package;
  // define a service
  service HelloWorldService {
      // define the interface and data type
      rpc SayHello (HelloRequest) returns (HelloReply) {}
  }
  // define the data type of request
  message HelloRequest {
      string name = 1;
  }
  // define the data type of response
  message HelloReply {
      string message = 1;
  }

使用gRPC protobuf生成工具生成对应语言的库函数:

  python -m grpc_tools.protoc -I=./protos --python_out=./rpc_package --grpc_python_out=./rpc_package ./protos/user_info.proto

这个指令会自动生成rpc_package文件夹中的helloworld_pb2.py和helloworld_pb2_grpc.py,但是不会自动生成__init__.py文件,需要我们手动添加。

gRPC server端代码​​​​​​​

  #!/usr/bin/env python
  # -*-coding: utf-8 -*-
  from concurrent import futures
  import grpc
  import logging
  import time
  from rpc_package.helloworld_pb2_grpc import add_HelloWorldServiceServicer_to_server, \ 
      HelloWorldServiceServicer
  from rpc_package.helloworld_pb2 import HelloRequest, HelloReply
  class Hello(HelloWorldServiceServicer):
      # 这里实现我们定义的接口
      def SayHello(self, request, context):
          return HelloReply(message='Hello, %s!' % request.name)
  def serve():
      # 这里通过thread pool来并发处理server的任务
      server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
      # 将对应的任务处理函数添加到rpc server中
      add_HelloWorldServiceServicer_to_server(Hello(), server)
      # 这里使用的非安全接口,世界gRPC支持TLS/SSL安全连接,以及各种鉴权机制
      server.add_insecure_port('[::]:50000')
      server.start()
      try:
          while True:
              time.sleep(60 * 60 * 24)
      except KeyboardInterrupt:
          server.stop(0)
  if __name__ == "__main__":
      logging.basicConfig()
      serve()

gRPC client端代码​​​​​​​

  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  from __future__ import print_function
  import logging
  import grpc
  from rpc_package.helloworld_pb2 import HelloRequest, HelloReply
  from rpc_package.helloworld_pb2_grpc import HelloWorldServiceStub
  def run():
      # 使用with语法保证channel自动close
      with grpc.insecure_channel('localhost:50000') as channel:
          # 客户端通过stub来实现rpc通信
          stub = HelloWorldServiceStub(channel)
          # 客户端必须使用定义好的类型,这里是HelloRequest类型
          response = stub.SayHello(HelloRequest(name='eric'))
      print ("hello client received: " + response.message)
  if __name__ == "__main__":
      logging.basicConfig()
      run()

演示

先执行server端代码:

python hello_server.py

接着执行client端代码如下:​​​​​

   grpc_test python hello_client.py
  hello client received: Hello, eric!

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gRPC是一种高性能的远程过程调用框架,它可以用于构建分布式系统。通过gRPC,我们可以定义我们自己的接口服务,并通过使用Protocol Buffers来定义消息类型和服务接口接口文档是一份详细描述这些接口及其使用方法的文档。 gRPC接口文档中文提供了对于gRPC接口的详细说明和使用指南。文档中通常包含以下信息: 1. 接口定义:文档会提供接口的定义,包括接口名称、方法名称和方法参数。这些定义将在客户端和服务端之间进行通信时使用。 2. 消息类型:文档会描述消息类型及其字段的定义。这些消息类型用于在不同服务之间传递数据。 3. 错误码:文档会列出可能的错误码及其含义。这些错误码用于标识调用接口时可能出现的错误情况。 4. 使用示例:文档中通常会提供一些使用示例,以帮助开发人员理解如何使用接口。这些示例可以包括创建客户端、调用接口方法和处理返回结果。 5. 安全认证:如果接口需要进行安全认证,文档会提供相应的认证方法和配置。 通过阅读gRPC接口文档中文,开发人员可以更加清楚地了解如何使用gRPC构建分布式系统。在开发过程中,可以根据接口文档编写客户端代码、验证接口调用和处理错误情况。接口文档也可以帮助团队成员之间更加协作,确保彼此的理解和一致性。 总之,gRPC接口文档中文在使用gRPC构建分布式系统时是一个重要的参考工具。它提供了接口的详细定义、用法示例和错误处理,帮助开发人员更加高效地使用gRPC接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值