Gatling+Scala+CI/CD构建现代化性能测试流水线实践指南
1. 项目概述从脚本到流水线构建现代性能测试体系如果你是一名后端或测试工程师正被“上线前性能摸底”和“回归测试资源消耗”这两座大山压得喘不过气那么今天聊的这个组合方案可能会成为你的效率倍增器。我们不再满足于用 JMeter 录制回放或者写一堆难以维护的硬编码脚本。这次的核心是Gatling Scala DSL CI/CD目标是打造一套可版本控制、可自动化执行、结果清晰可追溯的现代化性能测试流水线。简单来说Gatling 是一个基于 Scala 和 Netty 的高性能负载测试工具它的核心优势在于用代码DSL来描述测试场景。这听起来可能比点鼠标复杂但一旦上手你会发现它的维护性和灵活性是图形化工具无法比拟的。而我们将 Scala DSL 脚本与 Maven 或 SBT 构建工具集成再通过 CI/CD 平台如 Jenkins、GitLab CI进行调度就能实现代码提交即触发测试、定时巡检核心接口、生成美观的 HTML 报告并自动归档。这不仅仅是跑个测试而是将性能测试真正工程化、常态化融入开发流程让性能问题在早期就被暴露和解决。2. 核心设计思路为什么是 Gatling Scala CI/CD在深入代码之前我们先厘清选择这套技术栈背后的逻辑。性能测试工具很多为什么偏偏是它们2.1 Gatling 的优势与 DSL 的必要性JMeter 是经典但它在处理高并发、资源消耗和脚本维护上存在短板。Gatling 的异步非阻塞架构基于 Netty让它可以用更少的硬件资源模拟更高的并发用户结果数据也更精确。其真正的杀手锏是领域特定语言DSL。DSL 不是普通的 Scala 代码而是一套为性能测试量身定制的语法糖读起来几乎像自然语言。例如你想表达“100个用户在30秒内启动持续运行2分钟访问首页并思考2秒”用 Gatling DSL 写出来是这样的setUp( scn.inject( rampUsers(100).during(30.seconds), constantUsersPerSec(20).during(2.minutes) ) ).protocols(httpProtocol)这种写法不仅清晰而且脚本本身就是源代码可以享受版本控制Git的所有好处差异对比、分支管理、代码评审。修改一个参数或增加一个请求就像修改业务代码一样简单可控。2.2 Scala 语言的选择强大与简洁的平衡Gatling 选择 Scala 作为基础语言是明智的。Scala 运行在 JVM 上兼容 Java 生态这意味着你可以轻松调用现有的 Java 库来处理加解密、数据解析等复杂逻辑。同时Scala 的函数式编程特性和强大的类型系统让编写结构良好、易于复用的测试脚本成为可能。你不需要成为 Scala 专家只需掌握基础语法和 Gatling 的 DSL API 就能开始这降低了学习门槛。2.3 CI/CD 集成实现测试左移与持续反馈将性能测试集成到 CI/CD 流水线是质变的一步。其核心价值在于自动化与常态化无需手动执行代码合并请求Merge Request或定时任务自动触发测试使性能测试成为开发环节的“标配”。快速反馈开发者在提交代码后几分钟内就能看到核心接口的性能影响便于及时定位和修复实现“测试左移”。历史趋势分析每次测试的报告和关键指标如响应时间、吞吐量都被保存下来可以直观地看到版本迭代对系统性能的影响趋势为容量规划和优化提供数据支撑。资源统一管理测试脚本、环境配置、执行机都在流水线中集中管理避免了“脚本在我本地是好用的”这类环境问题。3. 环境准备与项目初始化工欲善其事必先利其器。我们先搭建好开发环境。你可以选择 Maven 或 SBT 作为构建工具两者 Gatling 都提供官方插件支持。这里会分别介绍你可以根据团队习惯选择。3.1 基础环境安装首先确保你的机器上安装了JDK 8 或 11建议选择 LTS 版本如 OpenJDK 11。这是运行 Scala 和 Gatling 的基础。Scala可选但推荐虽然 Gatling 插件会处理依赖但本地安装 Scala 和 sbt 有助于理解和调试。可以通过 SDKMANLinux/Mac或下载安装包Windows安装。# 使用 SDKMAN 安装 sbt它包含了 Scala curl -s https://get.sdkman.io | bash source $HOME/.sdkman/bin/sdkman-init.sh sdk install sbt3.2 使用 Maven 创建项目对于熟悉 Java 生态的团队Maven 是更自然的选择。使用官方提供的 archetype 可以快速生成项目骨架。mvn archetype:generate \ -DarchetypeGroupIdio.gatling.highcharts \ -DarchetypeArtifactIdgatling-highcharts-maven-archetype \ -DarchetypeVersion3.9.5 \ # 请使用最新稳定版本 -DgroupIdcom.yourcompany \ -DartifactIdgatling-performance-suite \ -Dversion1.0-SNAPSHOT生成的项目结构清晰gatling-performance-suite ├── pom.xml └── src └── test ├── resources # 存放配置文件、数据文件如 CSV └── scala # 存放所有 Scala 测试脚本pom.xml中已经配置好了gatling-maven-plugin。你可以直接运行mvn gatling:test来执行默认的模拟测试。3.3 使用 SBT 创建项目SBT 是 Scala 的原生构建工具更灵活适合纯 Scala 项目。创建目录并新建build.sbt文件// build.sbt enablePlugins(GatlingPlugin) name : gatling-sbt-demo version : 1.0 scalaVersion : 2.13.10 // 需与 Gatling 版本匹配 val gatlingVersion 3.9.5 libraryDependencies io.gatling.highcharts % gatling-charts-highcharts % gatlingVersion % test libraryDependencies io.gatling % gatling-test-framework % gatlingVersion % test项目结构gatling-sbt-demo ├── build.sbt └── src └── test ├── resources └── scala运行测试使用sbt gatling:test。注意构建工具选择如果你的团队项目以 Java/Maven 为主或需要与现有 Maven 仓库深度集成选 Maven。如果你追求更快的依赖解析和增量编译或者项目以 Scala 为主选 SBT。两者在功能上都能满足需求。4. Gatling DSL 脚本编写详解现在进入核心部分编写测试脚本。Gatling 的 DSL 结构层次分明遵循“定义协议 - 定义场景 - 设置负载模型”的模式。4.1 脚本基本结构一个完整的 Gatling 模拟类Simulation通常包含以下部分import io.gatling.core.Predef._ // 引入核心DSL import io.gatling.http.Predef._ // 引入HTTP协议DSL import scala.concurrent.duration._ class BasicSimulation extends Simulation { // 每个脚本都是一个Simulation类 // 1. 定义HTTP协议配置如基础URL、公共头信息 val httpProtocol http .baseUrl(http://your-api-server.com) .acceptHeader(application/json) .userAgentHeader(Gatling/Performance Test) // 2. 定义场景Scenario用户的操作链 val scn scenario(基础用户场景) .exec( http(获取首页) // 给这个请求起个名字会显示在报告里 .get(/api/v1/home) .check(status.is(200)) // 断言响应状态码为200 ) .pause(2.seconds) // 模拟用户思考时间 // 3. 设置负载注入模型Load Injection Profile setUp( scn.inject( nothingFor(4.seconds), // 开始前等待4秒 atOnceUsers(10), // 瞬间注入10个用户 rampUsers(100).during(30.seconds) // 在30秒内线性增加到100个用户 ).protocols(httpProtocol) ) }4.2 关键组件深度解析HTTP 协议配置除了baseUrl你还可以配置连接超时、请求重试、SSL 等。例如.disableFollowRedirect可以禁止自动重定向便于你控制流程。场景定义一个scenario代表一类用户的行为模式。exec方法执行一个动作通常是 HTTP 请求也可以是计算或日志输出。pause用于模拟真实用户操作间隔这对于避免对服务器产生不自然的持续洪泛攻击至关重要。检查与断言check是 Gatling 的验证机制用于提取响应数据并断言。这是脚本健壮性的关键。.check( jsonPath($.data.userId).saveAs(userId), // 从JSON响应中提取userId并存入会话 status.in(200, 304) // 断言状态码是200或304 )提取出的变量如userId可以在后续请求中使用get(/api/user/${userId})。负载注入模型这是控制压力曲线的核心。Gatling 提供了丰富的注入策略constantUsersPerSec(20).during(1.minute)保持每秒20个用户的到达率。stressPeakUsers(1000).during(20.seconds)阶梯式加压常用于找到系统瓶颈。incrementUsersPerSec(5).times(6).eachLevelLasting(10.seconds)每秒用户数阶梯递增。4.3 使用数据源进行参数化真实的测试需要不同的用户数据。Gatling 支持从文件如 CSV、JSON中读取测试数据。在src/test/resources下创建user-data.csvuserId,username,email 1,alice,aliceexample.com 2,bob,bobexample.com在脚本中引用并循环使用val userFeeder csv(user-data.csv).circular // circular表示循环使用 val scn scenario(参数化用户登录) .feed(userFeeder) // 为每个虚拟用户注入一行数据 .exec( http(用户登录) .post(/api/login) .body(StringBody({username:${username}, email:${email}})).asJson .check(jsonPath($.token).saveAs(authToken)) ) .exec( http(获取用户信息) .get(/api/user/${userId}/profile) .header(Authorization, Bearer ${authToken}) // 使用上一步获取的token )random和queue是另外两种常用的数据获取策略分别表示随机取用和顺序取用用完为止。实操心得会话Session管理Gatling 中每个虚拟用户都有一个Session对象存储其状态和数据。saveAs和${}插值是在会话间传递数据的桥梁。务必确保在引用变量前它已经被正确保存到会话中否则会抛出异常导致虚拟用户失败。对于复杂的流程可以使用.doIf、.asLongAs等条件或循环构造来控制执行路径。5. 高级技巧与最佳实践掌握了基础之后这些技巧能让你的脚本更强大、更可靠。5.1 模块化与代码复用不要把所有请求堆在一个场景里。利用 Scala 的函数和对象特性进行模块化。object ApiActions { def login(username: String, password: String) { exec(http(登录请求) .post(/login) .body(StringBody(s{username:$username,password:$password})) .check(jsonPath($.accessToken).saveAs(accessToken)) ) } def getUserProfile() { exec(http(获取资料) .get(/profile) .header(Authorization, Bearer ${accessToken}) ) } } val scn scenario(完整用户流程) .exec(ApiActions.login(testUser, pass123)) .pause(1) .exec(ApiActions.getUserProfile())这样ApiActions可以在多个测试场景中被复用。5.2 模拟复杂业务场景结合条件、循环和分组模拟真实用户行为。val scn scenario(购物流程) .exec(ApiActions.login(user, pass)) .during(5.minutes) { // 持续运行5分钟 randomSwitch( // 随机选择执行路径 60.0 - exec(ApiActions.browseProduct), // 60%概率浏览商品 30.0 - exec(ApiActions.addToCart), // 30%概率加购 10.0 - exec(ApiActions.checkout) // 10%概率结账 ).pause(1.second, 5.seconds) // 每次操作后随机等待1-5秒 }5.3 资源管理与调试日志控制在logback-test.xml配置日志级别测试时设为WARN或ERROR减少输出干扰调试时设为DEBUG。全局配置在src/test/resources下的gatling.conf文件中可以配置数据目录、报告格式、HTTP 引擎参数如最大连接数等实现环境隔离如测试环境 vs 预生产环境。6. 与 CI/CD 工具集成以 GitLab CI 为例脚本写好了接下来让它自动跑起来。这里以 GitLab CI 为例Jenkins 或其他工具的思路类似。6.1 创建.gitlab-ci.yml配置文件在项目根目录创建此文件定义你的流水线阶段。stages: - test - performance variables: MAVEN_OPTS: -Dmaven.repo.local$CI_PROJECT_DIR/.m2/repository # 缓存Maven本地仓库加速后续构建 cache: paths: - .m2/repository/ - target/ # 单元测试阶段可选 unit-test: stage: test image: maven:3.8-openjdk-11 script: - mvn clean test -DskipTestsfalse only: - merge_requests # 仅在合并请求时触发 - main # 或在主分支推送时触发 # 性能测试阶段 performance-test: stage: performance image: maven:3.8-openjdk-11 script: # 运行特定的Gatling模拟类例如BasicSimulation - mvn gatling:test -Dgatling.simulationClasscom.yourcompany.BasicSimulation artifacts: paths: - target/gatling/*/ # 归档所有生成的报告目录 expire_in: 1 week # 报告保留一周 when: always # 即使测试失败也归档报告便于排查 only: - schedules # 由定时任务触发例如每晚执行 - main # 或者主分支有更新时触发 dependencies: - unit-test # 依赖于单元测试阶段成功6.2 配置执行器与资源性能测试是资源密集型任务切勿在 GitLab 共享 Runner 上运行这会影响平台稳定性并可能因资源不足导致测试结果失真。你需要配置专用的、配置较高的Specific Runner来执行性能测试任务。在 Runner 的config.toml中为其打上标签如tags [performance]。在.gitlab-ci.yml的performance-test任务中通过tags关键字指定使用该 Runnerperformance-test: tags: - performance # ... 其他配置6.3 报告处理与通知Gatling 默认生成交互式 HTML 报告。在 CI 中你可以归档报告如上例所示通过artifacts将target/gatling/目录下的最新报告保存起来。团队成员可以直接从 GitLab 流水线页面下载并查看。关键指标提取可以编写一个简单的脚本如 Python 或 Shell在测试结束后解析target/gatling/*/simulation.log或报告中的js/stats.json文件提取关键指标如 95% 响应时间、错误率。设置质量门禁在脚本中判断关键指标是否超过阈值如果超标则以非零退出码结束让 CI 任务失败从而阻止代码合并或发出警报。# 示例在script中增加检查需编写解析脚本check_perf.py - mvn gatling:test -Dgatling.simulationClass... - python check_perf.py --threshold-95pct 2000 # 如果95%响应时间2秒则脚本返回1发送通知结合 GitLab 的 Webhook 或使用curl命令将测试结果成功/失败、关键指标发送到团队聊天工具如钉钉、飞书、Slack。7. 常见问题排查与优化实录在实际集成和运行过程中你肯定会遇到一些坑。这里记录了几个典型问题及其解决方案。7.1 脚本执行失败报告“No simulation found”问题描述使用-Dgatling.simulationClass指定类名运行但 Maven 提示找不到模拟类。排查步骤检查类名确保类名完全正确包括包路径。使用mvn compile确认编译无误。检查源码目录确认你的.scala文件放在了src/test/scala下正确的包路径中。检查插件配置在pom.xml中确保gatling-maven-plugin的configuration里没有错误的simulationClass默认值覆盖了命令行参数。解决方案最稳妥的方式是先不指定类名运行mvn gatling:testGatling 会列出所有检测到的模拟类你可以从中复制正确的全限定名。7.2 测试运行时出现大量连接超时或拒绝连接问题描述虚拟用户数不高但错误日志中充满java.net.ConnectException: Connection refused或超时。排查步骤目标服务状态首先确认被测试的服务是否正在运行且健康。Gatling 配置检查gatling.conf中的http部分。maxConnectionsPerHost默认值可能不够可以适当调大如 1000。同时检查requestTimeout是否设置过短。系统资源在测试机上运行ulimit -n查看文件描述符限制。模拟大量连接需要提高此限制例如设置为 65535。网络与防火墙确认测试机与被测服务器之间网络通畅无防火墙拦截。解决方案# 在 gatling.conf 中调整 http { maxConnectionsPerHost 1000 requestTimeout 60000 # 单位毫秒 }在 Linux 测试机上临时提高限制ulimit -n 65535。7.3 CI/CD 流水线中性能测试时间过长或不稳定问题描述流水线中的性能测试任务耗时远超本地或时好时坏。排查步骤Runner 资源确认你使用的 Specific Runner 资源配置CPU、内存足够。性能测试本身消耗资源资源不足会导致测试进程变慢甚至扭曲测试结果测试机先成为瓶颈。依赖下载检查是否每次构建都重新下载全部依赖。充分利用 CI 的缓存机制如示例中的.m2/repository缓存。测试数据与环境确保 CI 环境中的测试数据库、中间件等与被测服务匹配且数据量级与生产环境有可比性。环境差异是结果不稳定的主要原因。并发干扰如果 Runner 同时执行多个性能测试任务会相互干扰。确保 Runner 配置为一次只执行一个性能测试任务在config.toml中设置limit 1。解决方案为性能测试任务配置独占的、高配置的 Runner并做好环境隔离和数据准备。将耗时较长的性能测试设置为由定时任务触发而非每次提交都触发以平衡反馈速度和资源消耗。7.4 报告中的响应时间与真实用户体验不符问题描述Gatling 报告显示平均响应时间很好但前端用户或监控系统反馈慢。排查步骤检查点位置Gatling 测量的是从发送请求到接收完最后一个字节的时间。如果页面渲染、前端 JS 执行慢这个时间无法捕获。网络延迟测试机与被测服务可能在同一内网延迟极低而真实用户网络环境复杂。缓存影响测试脚本可能重复访问相同资源触发了服务端缓存导致测试结果过于乐观。解决方案端到端测试对于关键用户旅程考虑使用如 Gatling 的 Selenium 集成或其他端到端测试工具来测量包含渲染在内的完整时间。引入网络延迟在 Gatling 的 HTTP 协议配置中可以模拟不同的网络条件如.disableWarmUp并配合特定的思考时间。数据多样性使用更丰富的测试数据避免所有请求都命中缓存。在测试开始前执行清理缓存的步骤。将 Gatling 性能测试集成到 CI/CD初期会有些配置成本但一旦跑通它带来的自动化能力和质量保障是巨大的。这套体系不仅解放了人力更重要的是它建立了持续的性能守护机制让团队对每一次变更的影响都心中有数。从编写第一个简单的 DSL 脚本开始逐步构建起复杂的场景和自动化的流水线你会发现性能测试不再是发布前令人焦虑的“突击任务”而是开发流程中平静而可靠的一环。

相关新闻

Rust错误处理机制:Result与Option实战解析

Rust错误处理机制:Result与Option实战解析

1. Rust 错误处理机制深度解析作为一门系统级编程语言,Rust 的错误处理机制是其最引人注目的特性之一。与传统的异常处理机制不同,Rust 采用了基于返回值的显式错误处理方式,这种设计在保证安全性的同时,也带来了独特的编程体验。…

2026/7/30 11:15:30 阅读更多 →
STM32 CAN总线通信原理与实战:从半双工本质到多主仲裁配置

STM32 CAN总线通信原理与实战:从半双工本质到多主仲裁配置

1. 项目概述:从“半双工还是全双工”的疑问切入 最近在调试一个基于STM32的电机控制项目,需要用到CAN总线来连接主控板和多个驱动器。在搭建通信框架时,一个看似基础但非常关键的问题冒了出来: CAN通信到底是半双工还是全双工&am…

2026/7/30 11:15:30 阅读更多 →
Beyond Compare密钥生成器:3分钟解决评估期限制的完整教程

Beyond Compare密钥生成器:3分钟解决评估期限制的完整教程

Beyond Compare密钥生成器:3分钟解决评估期限制的完整教程 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否正在使用Beyond Compare这款强大的文件对比工具,却因为3…

2026/7/30 11:14:30 阅读更多 →

最新新闻

面试还不会Spring全家桶,看这篇就够了!

面试还不会Spring全家桶,看这篇就够了!

Spring是我们Java程序员面试和工作都绕不开的重难点。很多粉丝就经常跟我反馈说由Spring衍生出来的一系列框架太多了,根本不知道从何下手;大家学习过程中大都不成体系,但面试的时候都上升到源码级别了,你不光要清楚了解Spring源码…

2026/7/30 11:22:33 阅读更多 →
为什么92%的AI批处理脚本无法上线?资深SRE披露4大致命缺陷+可落地的6层人工审核清单(含Checklist下载链接)

为什么92%的AI批处理脚本无法上线?资深SRE披露4大致命缺陷+可落地的6层人工审核清单(含Checklist下载链接)

更多请点击: https://intelliparadigm.com 第一章:AI 写批处理脚本 在 Windows 环境下,批处理(.bat)脚本仍广泛用于自动化部署、日志清理、环境检测等轻量级运维任务。借助大语言模型(LLM)&…

2026/7/30 11:22:33 阅读更多 →
KMS智能激活方案:开源工具的完整实战指南

KMS智能激活方案:开源工具的完整实战指南

KMS智能激活方案:开源工具的完整实战指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款高效的开源智能激活脚本,能够为Windows系统和Office办公套…

2026/7/30 11:22:33 阅读更多 →
豆包    LeetCode 3782. 交替删除操作后最后剩下的整数 TypeScript实现

豆包 LeetCode 3782. 交替删除操作后最后剩下的整数 TypeScript实现

TypeScript / JavaScript 实现 LeetCode 3782 lastInteger题意回顾初始数组 [1,2,3,...,n] ,交替执行删除:1. 第一轮:从左删,隔一删一(保留奇数位置) 2. 第二轮:从右删,隔一删一 循…

2026/7/30 11:22:33 阅读更多 →
马斯克派船回收 Starship S40:这不是捞残骸,而是星舰复用的第一次硬件复盘

马斯克派船回收 Starship S40:这不是捞残骸,而是星舰复用的第一次硬件复盘

马斯克说正在派船回收 Starship S40,这事最有意思的地方,不是 SpaceX 又做了一次海上打捞,而是 Starship 第一次把“再入后的真实硬件”完整留给了工程团队。 如果只看飞行结果,S40 仍然是一次海上软溅落;但如果看复用…

2026/7/30 11:22:33 阅读更多 →
WAF+DDoS 双层防护架构!解决应用层混合攻击漏杀误杀问题

WAF+DDoS 双层防护架构!解决应用层混合攻击漏杀误杀问题

很多企业同时被四层流量攻击 七层 CC 攻击混合打击,单靠高防只能防流量、防不住 CC,单靠 WAF 防不住大流量。本篇详解企业标准「DDoS 高防 WAF」双层防护架构,解决漏杀、误杀、业务卡顿难题。一、双层防护分工逻辑外层 DDoS 高防&#xff1…

2026/7/30 11:21:33 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻