尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JMeter性能测试从入门到实战:核心组件、脚本编写与结果分析

JMeter性能测试从入门到实战:核心组件、脚本编写与结果分析
📅 发布时间:2026/6/26 22:50:15

1. 项目概述:从“点一下”到“压一片”的思维转变

刚入行做测试那会儿,我对性能测试的理解还停留在“多点点,看看卡不卡”的层面。直到第一次面对上线后系统崩溃的“事故复盘会”,看着监控图上那根陡然飙升然后断崖式下跌的CPU曲线,我才真正意识到,没有经过科学、量化性能验证的系统上线,就像没系安全带上高速。而JMeter,正是我从“功能测试思维”转向“性能工程思维”过程中,最重要的那把钥匙。它不是什么高深莫测的黑科技,而是一个开源的、纯Java开发的、用来模拟用户负载并测量系统性能的工具。你可以把它想象成一个非常专业的“点击机器人军团指挥官”,不仅能指挥成千上万个“机器人”同时操作,还能精确记录下每个操作的响应时间、成功率、服务器资源消耗等关键数据。

这篇文章,就是带你从零开始,亲手搭建并指挥这个“机器人军团”。无论你是测试新人想拓宽技能栈,还是开发同学想自查接口性能,或是运维工程师想评估系统容量,通过JMeter,你都能获得直观、量化的答案。我们将避开那些枯燥的理论堆砌,直接上手,用一个个具体的场景,拆解JMeter的核心组件、脚本设计思路、压测执行流程以及结果分析要领。你会发现,性能测试入门,远没有想象中那么难,关键在于掌握正确的工具和清晰的思路。

2. JMeter核心组件与工作原理拆解

在动手之前,我们得先搞清楚手里的“武器”到底由哪些部件构成,以及它们是如何协同工作的。JMeter的界面看起来组件繁多,但核心逻辑非常清晰,遵循着“模拟用户行为 -> 施加负载 -> 收集数据 -> 生成报告”这条主线。

2.1 测试计划与线程组:测试的蓝图与并发军团

打开JMeter,你首先看到的就是测试计划(Test Plan)。它是所有测试元素的容器,是整个性能测试脚本的根节点和蓝图。在这里,你可以设置全局变量、引入外部jar包(比如数据库驱动),或者添加一些监听器来收集全局数据。

测试计划之下,最重要的就是线程组(Thread Group)。这是定义并发用户模型的核心。你可以把它理解为你将要创建的虚拟用户军团。

  • 线程数(Number of Threads):这就是你的“虚拟用户数”。设置100,就意味着JMeter会模拟100个并发用户。
  • Ramp-Up时间(Ramp-Up Period):这100个用户不是“唰”一下同时出现的,那样可能会对系统造成不真实的瞬时冲击。Ramp-Up定义了在多长时间内启动所有线程。例如,线程数100,Ramp-Up时间50秒,意味着JMeter会在50秒内均匀地启动这100个用户,大约每秒启动2个。
  • 循环次数(Loop Count):每个虚拟用户要执行多少次测试脚本。如果设置为“永远”,则需要手动停止测试。

注意:很多人误以为“线程数”就是“每秒请求数(QPS/RPS)”,这是不对的。线程数只是并发用户数,实际的QPS取决于单个用户的思考时间(Timer)和服务器响应时间。一个线程在收到响应后,可能会等待一段时间(思考时间)再发起下一个请求。

2.2 取样器与逻辑控制器:定义用户做什么

虚拟用户有了,接下来要定义他们具体做什么。这就是取样器(Sampler)的职责。JMeter支持多种协议,最常用的是HTTP请求取样器。你只需要像在浏览器中一样,填写服务器名称、端口、路径、方法(GET/POST等)以及可能的参数或消息体数据,就定义了一个基本的请求。

但用户行为不是单一的。用户可能先登录,然后搜索商品,再查看详情,最后下单。这就需要逻辑控制器(Logic Controller)来组织取样器的执行顺序和逻辑。

  • 简单控制器(Simple Controller):仅仅是一个容器,用于分组,没有逻辑。
  • 循环控制器(Loop Controller):控制其子元件循环执行多次。
  • 仅一次控制器(Once Only Controller):在循环的线程组中,确保其子元件只执行一次(常用于登录)。
  • 交替控制器(Interleave Controller):每次循环只执行其下的一个子元件。
  • 随机控制器(Random Controller)和随机顺序控制器(Random Order Controller):用于模拟用户的不确定性操作。

通过逻辑控制器的组合,你可以构建出非常贴近真实场景的用户行为流。

2.3 配置元件与前置/后置处理器:丰富请求与处理响应

一个光秃秃的HTTP请求往往不够。你可能需要读取文件中的数据作为参数,或者给请求加上统一的头信息。配置元件(Config Element)用于为取样器提供预备数据或配置。

  • HTTP信息头管理器(HTTP Header Manager):添加或重写HTTP请求头,如Content-Type: application/json。
  • CSV数据文件设置(CSV Data Set Config):从外部CSV文件中读取数据,例如用户名、密码、商品ID等,实现参数化,让不同用户使用不同数据。
  • 用户定义的变量(User Defined Variables):定义一些在整个测试计划中可重用的变量。

当服务器返回响应后,我们经常需要从响应中提取一些数据,供后续请求使用。比如登录后返回一个token,后续所有请求都需要在请求头中带上它。这就是后置处理器(Post-Processor)的舞台。

  • 正则表达式提取器(Regular Expression Extractor):利用正则表达式从响应文本中提取数据,功能强大但编写需谨慎。
  • JSON提取器(JSON Extractor):如果响应是JSON格式,用它来提取数据更加方便直观,通过JSONPath表达式定位。
  • 边界提取器(Boundary Extractor):根据左右边界文本来提取数据,适用于非结构化文本。

相对应的,前置处理器(Pre Processor)则在取样器发出请求前执行,常用于在请求发出前生成或修改某些数据。

2.4 定时器与断言:控制节奏与验证结果

真实用户操作间是有间隔的,这个间隔在性能测试中称为思考时间(Think Time)。定时器(Timer)就是用来模拟这个时间的。为线程组或某个请求添加一个固定定时器(Constant Timer),设置等待3000毫秒,那么虚拟用户在执行完上一个请求后,就会等待3秒再执行下一个。这能更真实地模拟用户行为,避免产生远高于实际场景的请求压力。

发出去请求,收到了响应,我们怎么知道这个响应是否正确呢?断言(Assertion)就是用来验证响应是否满足预期的元件。例如,你可以添加一个响应断言(Response Assertion),检查响应文本中是否包含“登录成功”字样,或者检查响应代码是否为200。如果断言失败,JMeter会将该次取样标记为失败,这直接影响最终结果中的“错误率”统计。

2.5 监听器:性能数据的观察窗

最后,也是最能直观看到测试结果的部分——监听器(Listener)。它负责收集、展示和保存测试运行期间的数据。JMeter提供了十几种监听器,最常用的有:

  • 查看结果树(View Results Tree):用于调试脚本。它能展示每个请求和响应的详细信息,包括请求头、请求体、响应头、响应体。但在正式压测时,务必禁用或删除它,因为它会消耗大量内存,严重影响JMeter自身性能,导致测试结果失真。
  • 聚合报告(Aggregate Report):这是分析性能指标的核心监听器。它提供了所有取样器的统计摘要,包括:样本数(请求数)、平均值、中位数、90%/95%/99%百分位响应时间、最小值、最大值、异常率、吞吐量(Requests/sec)等。这些是评估系统性能的关键指标。
  • 用表格查看结果(View Results in Table):以表格形式展示每个样本的详细信息,包括时间戳、响应时间、状态等,适合小规模测试时查看。
  • 图形结果(Graph Results)和聚合图(Aggregate Graph):以图表形式展示响应时间、吞吐量随时间的变化趋势,更直观。

3. 从零构建一个完整的HTTP接口压测脚本

理论说得再多,不如亲手做一遍。下面我们以一个典型的“登录->查询信息”场景为例,构建一个完整的JMeter测试脚本。假设我们有一个用户系统,需要先调用/api/login接口登录获取token,然后带着这个token去调用/api/user/profile接口查询用户资料。

3.1 环境准备与脚本骨架搭建

首先,确保你的机器上安装了Java运行环境(JRE 8或以上),然后从Apache官网下载JMeter的二进制压缩包,解压即可使用。进入bin目录,双击jmeter.bat(Windows)或运行./jmeter(Linux/Mac)启动图形界面。

  1. 创建测试计划:启动后默认有一个空的“测试计划”,可以将其重命名为“用户系统接口压测”。
  2. 添加线程组:右键“测试计划” -> 添加 -> 线程(用户) -> 线程组。将其命名为“并发用户组”。我们先设置线程数为10,Ramp-Up为5秒,循环次数为2。这意味着10个虚拟用户将在5秒内启动完毕,每个用户执行2轮“登录->查询”操作。
  3. 添加HTTP请求默认值:为了避免在每个HTTP请求中重复填写相同的服务器信息,我们可以添加一个配置元件。右键“线程组” -> 添加 -> 配置元件 -> HTTP请求默认值。在“服务器名称或IP”中填入你的测试服务器地址(例如api.yourdomain.com),在“端口号”中填入端口(例如 8080)。这样,后续的HTTP请求只需填写路径即可。

3.2 实现登录与Token传递逻辑

这是脚本的核心部分,涉及参数化、后置处理器提取和变量传递。

  1. 添加登录请求:

    • 右键“线程组” -> 添加 -> 取样器 -> HTTP请求。命名为“用户登录”。
    • 路径填写/api/login。
    • 方法选择POST。
    • 切换到“Body Data”选项卡,填入JSON格式的登录参数,例如:{"username": "testUser", "password": "123456"}。
    • 添加HTTP信息头管理器(右键“用户登录” -> 添加 -> 配置元件 -> HTTP信息头管理器),添加一个头:Name: Content-Type, Value: application/json。
  2. 从登录响应中提取Token:

    • 假设登录成功后的JSON响应为:{"code": 200, "message": "success", "data": {"token": "eyJhbGciOiJ..."}}。
    • 我们需要提取data.token的值。右键“用户登录” -> 添加 -> 后置处理器 ->JSON提取器。
    • 在JSON提取器中:
      • Names of created variables: 填写一个变量名,例如auth_token。后续用${auth_token}来引用它。
      • JSON Path expressions: 填写$.data.token。$表示根节点,.data.token是JSONPath语法,指向token字段。
      • Match No. (0 for Random): 填写1。表示取第一个匹配项(通常只有一个)。
  3. 添加查询用户资料请求:

    • 在“用户登录”取样器下方(注意顺序,JMeter默认顺序执行),添加另一个HTTP请求,命名为“查询用户资料”。
    • 路径填写/api/user/profile。
    • 方法选择GET。
    • 现在需要把token加到请求头中。为这个请求单独添加一个HTTP信息头管理器。
    • 添加一个头:Name: Authorization, Value: Bearer ${auth_token}。JMeter会自动将变量auth_token替换成上一步提取到的真实token值。
  4. 添加思考时间与断言:

    • 为了更真实,在两个请求之间添加一个固定定时器,设置3000毫秒,模拟用户查看登录结果后的停顿。
    • 为“用户登录”请求添加一个响应断言,检查响应代码是否为200,或者响应文本是否包含"success",确保登录成功才进行后续操作。

3.3 使用CSV文件进行参数化数据驱动

上面的脚本中,所有用户都用同一个账号testUser登录,这不符合真实场景。我们需要让不同的虚拟用户使用不同的账号。这时就要用到CSV数据文件设置。

  1. 准备CSV文件:创建一个users.csv文件,内容如下(不要有表头):
    user1,pass1 user2,pass2 user3,pass3 ...
  2. 添加CSV数据文件设置:
    • 右键“线程组” -> 添加 -> 配置元件 -> CSV数据文件设置。
    • 文件名:浏览选择你的users.csv文件。
    • 文件编码:UTF-8。
    • 变量名称(逗号分隔):username,password。这里定义了两个变量名,对应CSV文件中的两列。
    • 其他选项默认即可。
  3. 修改登录请求:
    • 将“用户登录”请求的Body Data修改为:{"username": "${username}", "password": "${password}"}。
    • 设置CSV数据文件设置的“遇到文件结束符再次循环?”为True,这样当用户数多于CSV数据行时,会从头开始读取。如果设为False,则读取完数据后,后面的线程将获取不到值。

3.4 添加监听器并运行调试

脚本完成后,我们需要添加监听器来查看结果。

  1. 添加监听器:右键“线程组” -> 添加 -> 监听器 ->聚合报告。再添加一个用表格查看结果用于调试。
  2. 调试运行:点击工具栏上的绿色启动按钮(或Ctrl+R)运行测试。在“用表格查看结果”中,你可以看到每个请求的详细信息,检查token是否被正确提取和传递,断言是否通过。
  3. 正式运行前:调试无误后,务必禁用或删除“用表格查看结果”和“查看结果树”这类消耗资源的监听器。然后可以增加线程数(如100、200),进行正式压测。

实操心得:脚本调试阶段,一定要小规模(1-2个线程,1次循环)运行,并充分利用“查看结果树”和“调试取样器”来检查变量提取、参数替换是否正确。一个常见的坑是:JSON提取器或正则表达式提取器配置错误,导致变量为空,后续请求使用空值发送,导致失败。另一个坑是,忘记在正式压测前禁用资源消耗型监听器,导致JMeter自身成为瓶颈,测试结果严重偏离真实情况。

4. 关键性能指标解读与结果分析

压测脚本跑起来了,聚合报告里出来一堆数字,哪些才是我们真正需要关注的?性能测试不是跑完就完事了,读懂数据背后的故事才是关键。

4.1 核心性能指标详解

打开聚合报告,你会看到类似下面的指标(假设针对“查询用户资料”请求):

指标示例值含义与解读
样本数2000总共发出的请求数量。10个用户 * 2次循环 * 每个循环发出1次该请求 = 20?不对,这里应该是“查询用户资料”请求的总数。注意,登录请求的样本数是另外统计的。
平均值150 ms所有请求响应时间的算术平均值。需谨慎参考,因为它容易受到少数极端值(极大或极小)的影响。
中位数120 ms将响应时间从小到大排列,位于中间位置的值。它表示有50%的请求响应时间快于此值,50%慢于此值。比平均值更能代表“典型”用户体验。
90%百分位250 ms90%的请求响应时间都小于等于这个值。这是非常重要的指标,它反映了绝大多数用户的体验。例如,P90=250ms,意味着90%的用户感觉系统很快(响应在250ms内),但有10%的用户体验较差(超过250ms)。通常我们更关注P90、P95甚至P99,而不是平均值。
最小值/最大值50 ms / 2000 ms最快和最慢的响应时间。最大值偶尔出现一个很大的数(比如2秒),可能是由于GC(垃圾回收)或网络抖动引起,需要结合其他监控(如服务器GC日志)分析。如果最大值持续很高,则系统存在明显瓶颈。
异常率0.5%失败的请求数占总请求数的百分比。这是底线指标,通常要求在生产压测中异常率接近于0(例如<0.1%)。过高的异常率(如>1%)可能意味着系统已不堪重负或存在bug。
吞吐量85.6/sec单位时间内(每秒)系统处理的请求数。这是衡量系统处理能力的核心指标。在并发用户数增加时,吞吐量会先上升后趋于平缓甚至下降。当吞吐量达到峰值并开始下降,而响应时间急剧上升、错误率增加时,说明系统已经达到性能瓶颈。
接收/发送KB/sec12.3 / 5.6网络吞吐量,可以帮助判断是否是网络带宽成为瓶颈。

4.2 如何定位性能瓶颈

单看一个聚合报告可能不够,我们需要结合趋势和资源监控来定位问题。

  1. 响应时间趋势分析:使用响应时间图(Response Time Graph)监听器。观察随着测试时间推移,响应时间曲线是否平稳。如果曲线持续缓慢上升,说明系统可能有内存泄漏或资源逐渐耗尽;如果曲线出现周期性毛刺,可能与后台定时任务或GC有关。
  2. 吞吐量与线程数关系:进行梯度压测。分别用50、100、150、200线程数进行测试,记录每次的吞吐量和平均/P90响应时间。绘制曲线图。理想情况下,吞吐量随线程数线性增长(资源充足)。当曲线增长变缓时,说明系统某个资源开始饱和(如CPU、数据库连接池)。当曲线持平甚至下降,而响应时间飙升时,就是系统的最大处理能力点。
  3. 结合服务器监控:性能测试绝不能只看JMeter的结果。必须同时监控服务器的资源使用情况:
    • CPU使用率:持续高于70%-80%可能成为瓶颈。
    • 内存使用率:关注是否持续增长(内存泄漏),以及GC频率和时长。
    • 磁盘I/O:特别是数据库服务器,磁盘读写等待时间是否过高。
    • 网络带宽:是否被占满。
    • 数据库监控:慢查询日志、连接数、锁等待情况。
    • 应用服务器监控:线程池状态、队列长度、JVM堆内存等。

常见问题排查:如果压测时吞吐量很低,但服务器CPU、内存、网络都很空闲,那么瓶颈可能出现在应用逻辑或外部依赖上。例如:

  • 单线程逻辑/锁竞争:应用内部有全局锁或同步代码块,导致请求串行处理。
  • 慢SQL:数据库查询没有索引或写法低效。
  • 外部接口调用:调用了其他慢速的第三方服务。
  • JMeter自身瓶颈:单台JMeter机器可能无法产生足够压力,或者监听器消耗资源过大。此时需要考虑使用分布式压测。

5. 高级场景与实战避坑指南

掌握了基础脚本和指标分析,我们可以挑战一些更复杂的场景,并分享一些实战中积累的“血泪教训”。

5.1 分布式压测部署

当需要模拟成千上万的并发用户时,单台JMeter机器可能受限于网络、CPU或端口数,无法产生足够压力,或者自身成为瓶颈。这时就需要使用JMeter的分布式压测功能。

  1. 原理:由一台机器作为控制机(Master),负责管理测试计划和收集结果;其他多台机器作为负载机(Slave),接收控制机指令,实际执行测试脚本并向控制机回送结果。
  2. 部署步骤:
    • 在所有机器(控制机和负载机)上安装相同版本的JMeter和Java。
    • 在负载机上,进入JMeter的bin目录,编辑jmeter.properties文件,找到server.rmi.ssl.disable并将其值改为true(简化配置,生产环境建议配置SSL)。
    • 在负载机上,运行jmeter-server.bat(Windows)或jmeter-server(Linux/Mac)启动服务。
    • 在控制机上,编辑jmeter.properties,在remote_hosts配置项后添加负载机的IP地址和端口(默认1099),例如:remote_hosts=192.168.1.101:1099,192.168.1.102:1099。
    • 在控制机的JMeter GUI中,运行 -> 远程启动,就可以选择指定的负载机启动测试了。
  3. 注意事项:
    • 时钟同步:所有机器的时间必须同步(使用NTP),否则聚合报告的时间戳会混乱。
    • 数据文件:如果脚本中使用CSV数据文件,需要确保该文件在所有负载机的相同路径下都存在,或者使用共享存储。
    • 防火墙:确保控制机和负载机之间1099、1098等端口通信畅通。

5.2 处理动态参数与关联

除了登录token,很多场景需要处理更复杂的关联。例如,一个创建订单的接口,可能需要先从前一个“查询商品”的响应中提取动态的商品SKU_ID和库存ID。

技巧:使用正则表达式提取器时,尽量使用更精确的左右边界,而不是匹配大段的动态内容。例如,响应中有"skuId": "123456789",,使用左边界"skuId": "和右边界"来提取,比用.*更可靠。对于JSON,优先使用JSON提取器。

如果同一个响应中需要提取多个值,可以为一个取样器添加多个后置处理器(JSON提取器或正则表达式提取器),分别提取不同的变量。

5.3 模拟真实流量模型:阶梯加压与集合点

真实用户访问往往不是固定并发数的,而是有高峰和低谷。JMeter可以通过Stepping Thread Group(需安装插件)或使用Ultimate Thread Group插件来模拟复杂的流量模型,如“阶梯式加压”:先以50用户运行5分钟,然后每分钟增加50用户,直到300用户,持续10分钟,最后每分钟减少50用户。

集合点(Synchronizing Timer)用于模拟“秒杀”场景。在某个请求前插入一个同步定时器,设置一个较大的超时时间和需要释放的线程数(比如100)。当100个虚拟用户都到达这个集合点并等待时,JMeter会一次性释放它们,同时向服务器发起请求,制造瞬时高并发。

5.4 常见坑点与解决方案实录

  • 坑点1:JMeter GUI模式进行高并发压测

    • 现象:压测时JMeter界面卡死,结果严重失真。
    • 原因:GUI模式消耗大量资源用于渲染。
    • 解决方案:永远使用非GUI(命令行)模式进行正式压测。命令为:jmeter -n -t your_test_plan.jmx -l result.jtl -e -o report_folder。-n非GUI,-t指定脚本,-l指定结果文件,-e -o生成HTML报告。
  • 坑点2:“连接超时”或“地址已在使用”错误

    • 现象:压测中后期大量报连接超时错误。
    • 原因:JMeter作为客户端,短时间内创建了大量TCP连接,而关闭的连接会进入TIME_WAIT状态,占用本地端口。当本地临时端口(通常1024-5000)被耗尽时,就无法创建新连接。
    • 解决方案:
      1. 在JMeter的bin/jmeter.properties中,设置httpclient4.time_to_live为一个较低的值(如60000,单位毫秒),缩短连接存活时间。
      2. 在HTTP请求的“高级”选项卡中,勾选“Use KeepAlive”。但注意,这可能会改变测试行为(连接复用)。
      3. 调整操作系统(如Linux)的net.ipv4.ip_local_port_range,扩大临时端口范围。
      4. 减少TIME_WAIT等待时间(需谨慎,可能影响其他应用)。
  • 坑点3:插件管理器无法下载插件

    • 现象:使用Plugins Manager时卡住或报错。
    • 原因:网络问题,JMeter插件官网访问不稳定。
    • 解决方案:
      1. 使用代理(需自行配置网络环境)。
      2. 手动下载插件:访问https://jmeter-plugins.org/网站,找到所需插件(如Custom Thread Groups),下载.jar文件,将其放入JMeter的lib/ext目录,重启JMeter。
  • 坑点4:聚合报告中吞吐量计算的理解误区

    • 现象:测试时长60秒,样本数6000,计算得6000/60=100/sec,但聚合报告显示吞吐量是85/sec。
    • 原因:JMeter计算的吞吐量,是从第一个样本开始到最后一个样本结束的时间段内的平均值,而不是整个测试计划的时长。如果第一个请求在1秒时发出,最后一个请求在59秒时收到响应,那么实际用于计算的时间窗口是58秒,吞吐量约为6000/58≈103.4/sec。如果还有思考时间(Timer),这个时间窗口会更复杂。所以,吞吐量指标以JMeter报告为准,它更精确地反映了服务器实际处理请求的速率。

性能测试是一项实践性极强的工程活动,JMeter是一个强大的工具,但比工具更重要的是测试思维和对系统的理解。从制定明确的性能目标(如:首页P95响应时间<200ms,支持1000用户同时在线),到设计贴近真实场景的测试脚本,再到执行压测并关联分析系统监控指标,最后给出有说服力的性能评估报告和优化建议,这整个过程才是性能测试工程师的价值所在。多动手、多思考、多总结,你会发现在这个过程中,不仅测试了系统,更深刻地理解了系统。

相关新闻

  • Anuttacon研究模拟多智能体社会系统Agentopia:让AI更有人味儿,但仍面临挑战
  • 如何彻底解决游戏按键冲突:Hitboxer智能按键重映射完全指南
  • JMeter压测实战:秒杀场景下401与200异常问题的深度排查与优化

最新新闻

  • 视频编码识别与处理:从原理到工具,快速解决播放兼容问题
  • 从双曲几何到AdS时空:Weil-Petersson度量与重正化面积的深刻联系
  • 终极指南:5分钟快速上手ExtractorSharp游戏资源编辑器
  • Frida Gadget配置文件详解:从基础集成到高级动态分析实战
  • 5分钟实战:用Aircrack-ng抓取WiFi握手包,从原理到硬件避坑指南
  • 139、飞控中的气压计选型:MS5611、BMP280

日新闻

  • 单节点跑业务稳如泰山 扩容高可用集群反而频繁卡死 复盘完整连接交互揪出深层根因
  • Boss直聘批量投递工具:5倍效率提升的求职价值重构指南
  • 3分钟解锁VLC点击暂停插件:让视频控制变得如此简单!

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号