Jmeter是用来做什么的?
JMeter是一个开源的Java应用,主要用于性能测试和功能测试。它最初由Apache软件基金会设计用于测试Web应用程序,但现在已经扩展到其他测试功能。JMeter的主要功能如下:
性能测试:性能测试是JMeter的核心功能,主要分为两大部分:负载测试和压力测试。负载测试是模拟大量的用户同时访问应用程序,以测试系统在正常或峰值负载下的性能。压力测试是通过不断增加负载来找出系统的崩溃点或性能瓶颈。
性能测试是一种检测和评估应用程序或系统在特定负载和并发用户下表现的测试方法。在JMeter中,性能测试主要分为负载测试和压力测试。
负载测试:负载测试是模拟大量的用户同时对系统进行访问,以测试系统在正常或峰值负载下的性能和响应时间。例如,如果你的网站在黑色星期五期间预计将有数千个用户同时在线,那么你就可以通过JMeter创建一个测试,模拟这些用户的行为,并查看你的网站在这种负载下的性能。负载测试可以帮助你发现系统在高负载下可能出现的性能瓶颈或错误。
压力测试:压力测试则是通过不断增加负载来找出系统的极限性能或崩溃点。例如,你可以使用JMeter来模拟越来越多的用户访问你的网站,直到网站无法处理更多的请求。通过压力测试,你可以知道你的系统能够处理的最大并发用户数量,以及超过这个数量时,系统会出现什么样的问题(例如响应时间过长,或者服务器崩溃)。
在进行性能测试时,JMeter会收集关于系统性能的各种数据,如响应时间、处理能力(吞吐量)、错误率等。你可以通过JMeter的图形、表格或树形视图来查看这些数据,以便了解系统在不同负载下的表现,以及可能存在的性能问题。
性能测试是一个重要的过程,它可以帮助你确保你的系统能够在高负载下正常运行,并在超负载情况下优雅地降级,而不是突然崩溃。通过性能测试,你可以提前发现并解决性能问题,以提供更好的用户体验。
功能测试:功能测试是确认应用程序所有功能都按照预期工作的过程。在JMeter中,你可以设置断言来验证请求的响应,以此来确认特定功能是否正常。
功能测试是为了检验应用程序或系统的各种功能是否按照预期工作。这涉及到创建各种测试用例,这些用例代表了应用程序应该完成的任务或用户可能执行的操作。
在JMeter中,功能测试主要通过以下方式进行:
-
创建和执行请求:JMeter允许你创建各种类型的请求,包括HTTP、FTP、JDBC等,然后发送这些请求到你的应用程序或服务器,并接收响应。
-
验证响应:你可以在JMeter中设置断言(Assertions),以验证请求的响应是否符合期望。例如,你可以检查响应中是否包含某个特定的文本,响应代码是否为200,或响应时间是否在特定的范围内。
-
模拟用户行为:你可以使用JMeter创建测试计划,模拟真实用户的行为。例如,你可以模拟用户登录、浏览页面、提交表单、下载文件等操作。你还可以设置线程(用户)数量和循环次数,以模拟多个用户同时进行操作。
-
参数化测试:JMeter允许你使用变量和函数,创建参数化的测试用例。这意味着你可以使用同一个测试计划,测试不同的输入数据。
-
逻辑控制:JMeter提供了各种逻辑控制器,如If Controller、Loop Controller、While Controller等,以控制测试用例的执行流程。
通过功能测试,你可以确保你的应用程序的所有功能都能正常工作,并按照预期的方式响应用户的操作。这是软件开发过程中的一个重要步骤,可以帮助你发现和修复功能性的错误和问题。
服务器性能监控:JMeter可以收集关于服务器性能的数据,如处理时间、吞吐量、错误率等。这些数据可以帮助你理解系统在不同负载下的表现,以及找出可能存在的性能问题。
服务器性能监控是系统管理员和开发人员监视和管理服务器硬件和软件性能的过程。它涉及到收集、分析和处理有关服务器和其运行的应用程序的性能数据。
在JMeter中,服务器性能监控主要涉及以下几个方面:
-
收集性能数据:在性能测试过程中,JMeter可以收集各种性能数据,包括响应时间、吞吐量(即单位时间内服务器处理的请求数量)、错误率等。
-
分析性能数据:JMeter提供了多种方式来查看和分析这些数据。你可以通过图形、表格或树形视图来查看测试结果,以便了解服务器在不同负载下的性能。
-
找出性能瓶颈:通过分析JMeter的测试结果,你可以找出可能存在的性能瓶颈。例如,如果你发现在高负载下,服务器的响应时间显著增加,那么可能是服务器的CPU或内存已经饱和,或者是你的应用程序存在性能问题。
-
调整和优化服务器:一旦找出性能瓶颈,你就可以采取行动来调整和优化你的服务器。这可能涉及到升级硬件、更改系统配置、优化应用程序代码等。
服务器性能监控是一个持续的过程,它可以帮助你确保服务器始终处于最佳状态,以提供高质量的服务。通过定期进行性能测试和监控,你可以提前发现和解决问题,避免服务器过载或崩溃,从而提供更好的用户体验。
多协议支持:JMeter支持许多网络协议,包括HTTP/HTTPS(用于Web应用)、FTP(用于文件传输)、SOAP(用于Web服务)、LDAP(用于目录服务)、JDBC(用于数据库应用)等。这使得JMeter可以用于测试各种类型的网络应用。
多协议支持指的是一个应用程序或系统能够理解和处理多种不同的通信协议。通信协议是一种规则,定义了两个或多个系统如何交换信息。在网络应用中,常见的协议包括HTTP、HTTPS、FTP、SMTP等。
在JMeter中,多协议支持体现在以下几个方面:
-
HTTP/HTTPS:JMeter提供了HTTP Request sampler,支持创建和发送HTTP和HTTPS请求。这包括GET、POST、PUT、DELETE等各种类型的请求。
-
FTP:JMeter的FTP Request sampler支持FTP协议,可以用于测试FTP服务器的性能。
-
JDBC:JMeter提供了JDBC Request sampler,支持通过JDBC发送SQL查询到数据库服务器。
-
SMTP:JMeter的SMTP Sampler支持SMTP协议,可以用于测试邮件服务器的性能。
-
SOAP/REST:JMeter可以通过HTTP Request sampler发送SOAP和REST请求,以测试Web服务的性能。
-
JMS:JMeter提供了JMS sampler,支持Java消息服务(JMS)协议,可以用于测试消息驱动的应用程序。
-
TCP:JMeter的TCP Sampler支持TCP协议,可以用于测试TCP服务器的性能。
-
LDAP:JMeter的LDAP Request sampler支持轻量级目录访问协议(LDAP),可以用于测试LDAP服务器的性能。
通过支持多种协议,JMeter可以用于测试各种类型的网络应用和服务,包括Web应用、数据库、邮件服务器、消息队列等。这使得JMeter成为一个非常强大和灵活的性能测试工具。
除了以上提到的协议,JMeter还支持以下协议:
-
POP3/IMAP:JMeter提供了POP3和IMAP sampler,可以用于测试电子邮件服务器的性能。
-
Shell/Command:JMeter提供了OS Process Sampler,可以执行shell命令或外部进程,这提供了很大的灵活性,可以用来测试几乎任何类型的应用。
-
MongoDB:JMeter具有MongoDB Script sampler,可以执行MongoDB脚本。
-
Native commands or shell scripts:JMeter也支持用各种原生命令或shell脚本进行测试。
此外,JMeter还支持通过插件扩展其协议支持范围。例如,通过安装扩展插件,JMeter可以支持更多的协议如AMQP,Kafka,gRPC等等。
这种多协议的支持使得JMeter可以用于全面的性能测试,无论是从网络传输级别还是操作系统级别。这也使得JMeter可以应用于各种各样的环境和应用,包括但不限于web应用,数据库,消息队列,邮件服务器,文件传输,脚本执行等等。
测试结果可视化:JMeter提供多种方式来展示和分析测试结果,如图形、表格和树形视图。这可以帮你更好地理解测试结果,并找出可能的问题。
测试结果可视化是将测试数据转化为图形或图表的过程,使其更易于理解和分析。这是一个十分重要的步骤,因为它可以帮助我们更好地理解测试结果,发现性能问题,以及确定性能优化的方向。
在JMeter中,测试结果可视化主要由以下几个部分组成:
-
采样器结果:JMeter的每个采样器(Sampler)都会产生测试结果,这些结果可以在“查看结果”组件中查看。例如,HTTP Request Sampler的结果包括请求详情(如URL、请求方法、请求头等)、响应详情(如状态码、响应头、响应体等)和性能数据(如响应时间、等待时间等)。
-
图形结果:JMeter提供了多种图形结果,如“图形结果”、“聚合报告”、“聚合图”等,以图形和表格的形式显示测试结果。这些图形可以显示各种性能数据,如吞吐量、平均响应时间、错误率等。
-
树形结果:JMeter的“查看结果树”组件以树形结构显示测试结果,每个采样器的请求和响应都是树的一个节点。这使得你可以详细查看每个请求的结果,包括请求详情、响应详情和性能数据。
-
日志文件:JMeter可以将测试结果保存到日志文件中,这使得你可以在测试完成后查看和分析结果。日志文件可以保存为CSV或XML格式,包含了所有采样器的详细结果和性能数据。
通过这些可视化工具,你可以更好地理解你的应用程序或系统的性能表现,发现和定位性能问题,从而提升应用程序的性能和用户体验。
可扩展性:JMeter的API允许你编写自定义的Java代码来扩展它的功能。例如,你可以编写新的取样器、处理器或断言,以满足特定的测试需求。
可扩展性是一个系统、网络或进程在需要处理更多工作时能改变大小或调整以适应增大的需求的能力。
在JMeter中,可扩展性主要体现在以下几个方面:
-
插件系统:JMeter具有一个强大的插件系统,允许开发者和用户扩展其功能。这些插件可以用于扩展JMeter的协议支持、添加新的取样器、提供新的图形报告等等。通过使用和开发插件,你可以使JMeter适应你特定的测试需求。
-
分布式测试:JMeter支持分布式测试,这允许你在多台机器上同时运行测试以生成更大的负载。这对于测试大规模系统或应用非常有用,因为你可以很容易地扩大测试规模以匹配你的目标系统的规模。
-
多线程:JMeter使用多线程来模拟多用户并发访问,每一个线程在JMeter中代表一个用户。你可以简单地增加线程数来模拟更多的用户访问,这对于测试系统在高并发条件下的性能非常有用。
-
参数化和脚本:JMeter支持参数化和脚本,这意味着你可以使用变量和脚本来创建复杂的测试场景。这提供了很大的灵活性,允许你创建高度定制的测试以满足你的需求。
-
可编程性:JMeter是一个开源项目,你可以获取其源代码并修改它以满足你的需求。这为扩展JMeter提供了几乎无限的可能性。
总的来说,JMeter的可扩展性非常高,无论是在功能增加、测试规模扩大、测试复杂度提升,或是深度定制等方面,都能够很好地满足需求。
脚本录制:通过HTTP(S) Test Script Recorder,JMeter可以录制用户在浏览器中的操作,并将其转化为测试脚本。这极大地简化了测试脚本的编写过程。
脚本录制是一个自动化测试中的关键步骤,通过它,测试者可以捕获和记录在一个应用程序中的用户行为。这些行为信息会被用来生成测试脚本,可以在后续的自动化测试中重复使用。
在JMeter中,你可以使用HTTP(S) Test Script Recorder来进行脚本录制。以下是具体步骤:
-
设置代理:在你的浏览器或应用程序中设置代理,代理服务器地址设置为运行JMeter的机器的IP地址,代理端口设置为JMeter录制的端口(默认为8888)。
-
配置HTTP(S) Test Script Recorder:在JMeter中,添加一个HTTP(S) Test Script Recorder,设置代理端口(默认为8888)。你可以在“Target Controller”中选择录制的请求将要保存的位置。
-
添加监听器:在HTTP(S) Test Script Recorder下添加一个或多个监听器,如“View Results Tree”,以便查看和验证录制的请求。
-
启动录制:点击HTTP(S) Test Script Recorder的"Start"按钮开始录制。如果你的应用程序使用HTTPS,你可能需要安装JMeter的根证书。
-
进行操作:在你的浏览器或应用程序中进行操作,这些操作将被JMeter捕获并转换为HTTP请求。
-
停止录制:完成操作后,点击HTTP(S) Test Script Recorder的"Stop"按钮停止录制。
完成以上步骤后,你将得到一个包含了所有被录制操作的HTTP请求的JMeter测试脚本。你可以修改这个脚本,添加更多的sampler,listener或timer,以满足你的测试需求。
注意:录制的脚本可能包含一些静态资源的请求,如图片、CSS、JavaScript等,这些请求在某些情况下可能并不需要,你可以通过设置"URL Patterns to Exclude"来排除这些请求。
分布式测试:在JMeter中,你可以设置多台机器同时执行测试。这使得你可以模拟大规模的并发用户,以测试系统在极高负载下的性能。
分布式测试是一种在多台机器上执行测试的方法,以模拟大量用户并发访问的情况。这种方法可以在一次测试中生成大量的负载,检测系统在高负载条件下的性能表现。
在JMeter中,分布式测试是通过一台控制节点(Master)和多台工作节点(Slave)实现的。控制节点负责创建和分发测试计划,收集和显示测试结果;工作节点负责执行实际的测试。
具体步骤如下:
-
配置Master和Slave:在Master节点的JMeter配置文件中,需要指定所有Slave节点的IP地址。在Slave节点的JMeter配置文件中,需要指定Master节点的IP地址。
-
创建测试计划:在Master节点上,使用JMeter GUI创建测试计划。测试计划包含了所有要执行的测试步骤和参数。
-
启动Slave节点:在每台Slave节点上,启动JMeter服务器。这使得Slave节点可以接收来自Master节点的命令。
-
执行测试:在Master节点上,执行测试计划。Master节点会将测试计划分发给所有的Slave节点,每个Slave节点会并发执行测试。
-
收集结果:测试执行过程中,所有的Slave节点会将测试结果发送回Master节点。Master节点会收集所有的结果,进行统计和分析。
通过分布式测试,可以在多台机器上生成大量的负载,模拟真实世界的用户行为。这使得你可以检测你的应用程序在高负载条件下的性能表现,发现和解决性能瓶颈,提升用户体验。
相关文章:
Jmeter是用来做什么的?
JMeter是一个开源的Java应用,主要用于性能测试和功能测试。它最初由Apache软件基金会设计用于测试Web应用程序,但现在已经扩展到其他测试功能。JMeter的主要功能如下: 性能测试:性能测试是JMeter的核心功能,主要分为两…...
Docker基础教程
Docker基础教程 Docker简介 Docker基本操作 Docker应用 Docker自定义镜像 Docker compose 为什么使用DockerDocker简介安装DockerDocker的中央仓库Docker镜像操作Docker容器操作准备一个web项目创建MySQL容器创建Tomcat容器将项目部署到TomcatDocker数据卷DockerfileDock…...
Linux命令200例:who用于显示当前登录到系统的用户信息
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师࿰…...
HGDB-修改分区表名称及键值
瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:N/A 版本:4.5.7 文档用途 使用存储过程拼接SQL,修改分区名称、分区键值、并重新加入主表,适用于分区表较多场景。 详细信息 说明:本文档为测试过程࿱…...
1分钟了解音频、语音数据和自然语言处理的关系
机器学习在日常场景中的应用 音频、语音数据和自然语言处理这三者正在不断促进人工智能技术的发展,人机交互也逐渐渗透进生活的每个角落。在各行各业包括零售业、银行、食品配送服务商)的多样互动中,我们都能通过与某种形式的AI(…...
线性代数的学习和整理20,关于向量/矩阵和正交相关,相似矩阵等
目录 1 什么是正交 1.1 正交相关名词 1.2 正交的定义 1.3 正交向量 1.4 正交基 1.5 正交矩阵的特点 1.6 正交矩阵的用处 1 什么是正交 1.1 正交相关名词 orthogonal set 正交向量组正交变换orthogonal matrix 正交矩阵orthogonal basis 正交基orthogonal decompositio…...
OpenCV之ellipse函数
ellipse函数用来在图片中绘制椭圆、扇形,有两个重载函数。 函数原型1: void cv::ellipse( InputOutputArray img,Point center,Size axes,double angle,double startAngle,double …...
git快速查看某个文件修改的所有commit
1. git blame file git blame 可以显示历史修改的每一行记录,有时候我们只想了解某个文件一共提交几次commit,只显示commit列表,这种方式显然不满足要求。 2.git log常规使用 (1)显示整个project的所有commit (2)显示某个文件的所有commit 这是git log不添加参数的常规…...
加强版python连接飞书通知——本地电脑PC端通过网页链接打开本地已安装软件(调用注册表形式,以漏洞扫描工具AppScan为例)
前言 如果你想要通过超链接来打开本地应用,那么你首先你需要将你的应用添入windows注册表中(这样网页就可以通过指定代号来调用程序),由于安全性的原因所以网页无法直接通过输入绝对路径来调用本地文件。 一、通过创建reg文件自动配置注册表 创建文本文档,使用记事本打开…...
Jmeter进阶使用指南-使用断言
Apache JMeter是一个流行的开源负载和性能测试工具。在JMeter中,断言(Assertions)是用来验证响应数据是否符合预期的一个重要组件。它是对请求响应的一种检查,如果响应不符合预期,那么断言会标记为失败。 以下是如何在…...
44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例--网上有些说法好像是错误的
Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...
电脑入门: 路由器初学者完全教程
路由器初学者完全教程 本文以Cisco2620为例,讲述了路由器的初始化配置以及远程接入的配置方法,探讨了如何使用内部网络的DHCP服务功能为远程拨入的用户分配地址信息以及路由器常见故障的排除技巧。 (本文假定Cisco2620路由器为提供远…...
如何查找GNU C语言参考手册
快捷通道 标准C/C参考手册 GNU C参考手册HTML版 GNU C参考手册PDF版本 HTML版本部分目录预览 从GNU官网找那个GNU C参考手册 访问gnu.org 点击软件 下滑找到gnu-c-manual或者在这个页面Ctrl-f搜索"manual" 点进去即可看到HTML版本和PDF版本...
弄懂软件设计模式(一):单例模式和策略模式
前言 软件设计模式和设计原则是十分重要的,所有的开发框架和组件几乎都使用到了,比如在这小节中的单例模式就在SpringBean中被使用。在这篇文章中荔枝将会仔细梳理有关单例模式和策略模式的相关知识点,其中比较重要的是掌握单例模式的常规写法…...
Redis----布隆过滤器
目录 背景 解决方案 什么是布隆过滤器 布隆过滤器的原理 一些其他运用 背景 比如我们在观看新闻或者刷微博的时候,会不停地给我们推荐新的内容,我们发现几乎没有重复的,说明后台已经进行了去重处理,基于如何去重,…...
day 49 | 647. 回文子串 ● 516.最长回文子序列
647. 回文子串 dp含义:dp如果是表示i-j的序列中回文子串的个数的话,当新来一个后只能判定出来是整体的回文,内部的无法判断,所以用bool表示整体比较恰当。 递推公式:由于i,j是由i1,j-1决定的,所…...
【网络编程】C++实现网络通信服务器程序||计算机网络课设||Linux系统编程||TCP协议(附源码)
TCP网络服务器 🐍 1.程序简洁🦎2. 服务端ServerTcp程序介绍🦖3.线程池ThreadPool介绍🦕 4.任务类Task介绍🐙5. 客户端Client介绍🦑6.运行结果:🦐 7. 源码🦞7.1 serverTcp…...
C语言类型占内存大小
C语言类型占内存大小 C语言数据类型sizeof测试基本数据类型所占字符大小运行结果数据模型 C语言数据类型 sizeof测试基本数据类型所占字符大小 #include <stdio.h>int main() {char a;short b;int c;long d;float e;double f;printf("char %d\n", sizeof (a…...
使用GPT-4生成训练数据微调GPT-3.5 RAG管道
OpenAI在2023年8月22日宣布,现在可以对GPT-3.5 Turbo进行微调了。也就是说,我们可以自定义自己的模型了。然后LlamaIndex就发布了0.8.7版本,集成了微调OpenAI gpt-3.5 turbo的功能 也就是说,我们现在可以使用GPT-4生成训练数据&a…...
RUST 每日一省:模式匹配
我们经常使用let 语句创建新的变量绑定——但是 let 的功能并不仅限于此。事实上, let 语句是一个模式匹配语句。它允许我们根据内部结构对值进行操作和判断,或者可以用于从代数数据类型中提取值。 let tuple (1_i32, false, 3f32); let (head, center…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...
