RPC接口测试-两种方法(Jmeter和代码)

news2024/9/27 19:18:38

相信很多同学在测试RPC接口时会遇到很多困难,博主前段时间在测试时也一样,算是提前踩坑啦,下面就来介绍一下测试RPC接口的方法

1.什么是RPC接口

RPC(Remote Procedure Call)是一种通信协议和模式,用于在分布式系统中实现远程过程调用。
比较常见的RPC框架有gRPC、Apache Thrift、CORBA、XML-RPC、JSON-RPC等。

2.如何测试RPC接口

博主这里给两种方案

1 通过Jmeter

如果只是暂时测一下而懒得写代码的话,可以考虑使用jmeter下载一个grpc的插件来测试RPC接口,方法如下
1.如果之前没有jmeter可以直接下载博主这个链接,自带插件
https://download.csdn.net/download/m0_57098592/86783488

2.如果有jmeter也行,将博主文件里的这几个 jar 包 放到jmeter解压后得 ext 目录下,重启jmeter即可apache-jmeter-5.4.1\lib\ext
jmeter-plugins-manager-1.7.jar
jmeter-plugins-graphs-basic-2.0.jar
jmeter-plugins-casutg-2.10.jar

3.重启后可以在右上角看见一个小标志,点击进去,搜索grpc下载
在这里插入图片描述
在这里插入图片描述
下载完成后再次重启即可

4.在线程组-取样器中添加GRPC即可
在这里插入图片描述
5.按图中方式进行
在这里插入图片描述
6.确认没问题后,直接监听器里面添加个查看结果树看结果就可以啦,当前如果你要压性能直接在jmeter里面也更方便一些

2 通过python代码

优点:扩展性较好 缺点:需要一定代码能力
博主在这里踩了不少坑,下面说一下用代码实现的逻辑
1.首先,proto文件仍然是必须的,我们需要开发提供给我们,然后放在我们的某个目录中,同时装包

grpc
grpcio==1.48.2
grpcio-tools==1.48.2

2.cd 进入到该目录

3.控制台运行

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. kce.proto\n

4.运行完后,会在该目录下根据你的proto自动生成两个文件,我们假设proto文件名为A
A_pb2.py
A_pb2_grpc.py

5.通过以下代码调用RPC接口

import grpc
import A_pb2
import A_pb2_grpc


def run(request_data):
    #创建gRPC通道。
    with grpc.insecure_channel('ip:port') as channel:  #你的ip地址和端口号
        # 创建客户端 Stub。
        stub = A_pb2_grpc.B(channel)  #B为A_pb2_grpc文件中的类名

        # 构造请求对象。
        request = A_pb2.C(**request_data) #C为proto文件message名(看你的proto文件)

        try:
            #调用远程服务。
            response = stub.D(request, timeout=60)  #D为RPC对应的方法

            #处理响应
            if response:
                print("成功")
                return response
            else:
                print("No response received.")
        except grpc.RpcError as e:
            print(f"RPC error occurred: {e}")
        except Exception as e:
            print(f"An error occurred: {e}")

6.创建一个测试方法来调用RPC接口

import json
from google.protobuf.json_format import MessageToDict
from 文件 import run   #上面封装好的run方法

def test_A(requests_file):
    # 读取 JSON 文件并转换成 Python 字典
    request_json = requests_file #把你的传参写入文件,或者直接给json也行
    #这里需要加载文件逻辑
    response = load_json(jsonfile=request_json)
    response_json = run(response)
    # 将CategoryDTO对象转换为字典
    response_dict = MessageToDict(response_json)
    # 将返回的结果保存下来
    response_path = os.path.join(BASE_DIR, 'XXX/XX')
    response_file = os.path.join(response_path, 'XXX.json')

    with open(response_file, 'w') as file:
        file.write(json.dumps(response_dict))

if __name__ == '__main__':
    test_A('XXX.json')

7.通过以上方法就能调用RPC接口,如果后续开发有变更proto文件的话,控制台再执行一下就好了
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. kce.proto\n

代码上面还是有些需要结合自己实际情况修改的地方,大家多看一下哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之权限

目录 一、shell运行原理 二、权限 1、对人操作 2、对角色和文件操作 修改权限(改属性): ①ugo- ②二进制数的表示 修改权限(改人): 三、权限的相关问题 1、目录的权限 2、umask 3、粘滞位 一、s…

一百七十一、Flume——Flume1.9.0单机版安装(亲测有效)

一、目的 以防万一,为了避免kettle从Kafka同步数据到HDFS有问题,因此也测试了用Flume去采集Kafka中的数据然后同步到HDFS,算是一套备用方案 二、安装包版本 (一)Hadoop版本 hadoop-3.1.3.tar.gz (二&a…

JS中执行上下文和执行栈是什么?

一:执行上下文 执行上下文是一种对js执行代码的环境的一种抽象,只要js在执行中,那它一定是运行在执行上下文中 执行上下文的类型 全局执行上下文:全局执行上下文是在程序启动时创建的,它包含全局范围定义的变量和函数…

UltraISO做u盘镜像启动盘

1、工具—刻录光盘映像 2、刻录机选择盘 选择centos镜像 刻录

索尼 toio™应用创意开发征文|一步两步三步模拟浇花系统

目录 1.toio™介绍 2、创意分析 2.1 创意设计 2.2 创意落地 3、创意实现 3.1 环境安装 3.2 核心玩法 总结 1.toio™介绍 索尼的toio™是一款启发创意的机器人产品,旨在通过与真实世界的互动,为各年龄段的用户提供娱乐体验。这款产品具有高度的灵…

【已解决】pyqt5的打包exe软件图标菜单栏/任务栏/小图标/窗口图标未显示

1.起因: 希望:pyqt5 项目,pyinstaller main.spec 打包,我想要 main.exe 就像一个普通的应用软件一样显示我自定义的图标。 结果: main.exe 左侧图标还是老土的样子,并没有成为我的图标。独立运行是&#…

API接口与电商平台之间的联系,采集京东平台数据按关键字搜索商品接口示例

关键字搜索商品的重要性: 1.引入精准流量 关键词第一个也是最重要的作用就是为我们宝贝引进精准的流量,这一作用无论是在自然搜索中还是直通车中都是一样的。 第一步关乎的是我们宝贝的展现,而第二步用户是否会点进我们的宝贝,…

爬虫爬取mp3文件例子

相信训练模型时数据集的获取也是一个很头疼的事情,搞cv领域的可以扛着摄像头架起三脚架拍摄获取(以前干过),但是如果是nlp领域的呢,特别是chatgpt等大模型出来后对这类文本等数据的需求更大,如果没有现成的…

攻防世界-WEB-Web_php_include

打开靶机 通过代码审计可以知道,存在文件包含漏洞,并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下: 这两个都为on 所以我们就可以使用data://伪协议 payload如下: - ?pagedata://text/plain,…

测试可用的淘宝API(商品详情数据、买家信息、卖家信息、店铺信息、订单信息)

什么是API? API全称Application Programming Interface,即应用程序编程接口,是一些预先定义的函数,或指软件系统不同组成部分衔接的约定,用于传输数据和指令,使应用程序之间可以集成和共享数据资源。 简单来说&#…

SQL语言的分类:DDL(数据库、表的增、删、改)、DML(数据的增、删、改)

数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包含:数据的管理、表的管理、库的管理、账户管理、权限管理等。 操作数据库的SQL语言,基于功能,划分为4类: 1、数据定…

64位Office API声明语句第110讲

【分享成果,随喜正能量】以大慈为所住,给一切众生快乐,观众生心与菩萨心平等平等。以大悲为住处,不轻末学,善根成熟了他会发心,将来也能成佛。舍有为而不执著无为,住无为而不舍有为,…

正方实践系统打卡

Use HTTP (已完成) 📜 使用指南 🛖 项目结构 log 日志文件 use 使用情况 (待) data.py 数据 log.py 日志 main.py 主函数 只需要修改data.py文件内容即可: header ——> 头文件 User-AgentCookieAccept user ——> 用户信息 ZFT…

Kafka3.0.0版本——消费者(消费者组详细消费流程图解及消费者重要参数)

目录 一、消费者组详细消费流程图解二、消费者的重要参数 一、消费者组详细消费流程图解 创建一个消费者网络连接客户端,主要用于与kafka集群进行交互,如下图所示: 调用sendFetches发送消费请求,如下图所示: (1)、Fet…

RabbitMQ: Routing结构

生产者 package com.qf.mq2302.routing;import com.qf.mq2302.utils.MQUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;public class EmitLog {public static final String EXCHANGE_NAME"emitlogs";public static void main(…

基于Jmeter和Jenkins搭建性能测试框架

搭建这个性能测试框架是希望能够让每个人(开发人员、测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程。因为,往往配置一个性能环境可能需要很长的时间。 1、性能测试流程 该性能测试框架工作的流程主要有&am…

【代码随想录】dfs和bfs (所有可能的路径、岛屿数量)

所有可能的路径&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:vector<int> path;vector<vector<int>> result;void dfs(vector<vector<int>> graph, int x){//1 确认递归函数…

Java日志框架的扛把子 - SLF4J - SLF4J的原理和实践

1. Java世界中的日志框架 Java世界中的日志框架 其中&#xff0c;slf4j和jcl属于门面日志框架&#xff0c;而其它的几个则是真正干活的ddidic底层日志框架。冷知识&#xff1a;其中标红的日志框架&#xff0c;它们的作者是同一人。不同的日志框架&#xff0c;API接口往往也不一…

解锁前端Vue3宝藏级资料 第一章 带你深入了解Vue3项目创建 2 (使用 Webpack 5 搭建 vue项目)

在之前的文章中&#xff0c;我们已经了解了如何使用Vue CLI来创建Vue项目的开发环境。现在&#xff0c;大家已经可以轻松地运用Vue CLI来构建自己的Vue项目了。然而&#xff0c;你可能仍然对背后的工作原理感到困惑。接下来&#xff0c;我将引导你们在不使用Vue CLI的情况下&am…

Python超入门(1)__迅速上手操作掌握Python

# 1.第一个代码&#xff1a;输出语句 # 1.第一个代码&#xff1a;输出语句 print("My dogs name is Huppy!") print(o----) print( ||| ) print("*" * 10) """ 输出结果&#xff1a; My dogs name is Huppy! o----||| ********** "&…