测试覆盖率

Apache Spark 社区使用各种资源来维护社区的测试覆盖率。

GitHub Actions

GitHub Actions 在 Ubuntu 22.04 上提供以下功能。

Apache Spark 4

  • 使用 Java 17 的 Scala 2.13 SBT 构建
  • 使用 Java 17/21 的 Scala 2.13 Maven 构建
  • 使用 Java 17/Scala 2.13/SBT 的 Java/Scala/Python/R 单元测试
  • 规模因子为 1 的 TPC-DS 基准测试
  • JDBC Docker 集成测试
  • Kubernetes 集成测试
  • 使用 Java 21 和 Scala 2.13/SBT 的每日 Java/Scala/Python/R 单元测试

Apache Spark 3

  • 使用 Java 8 的 Scala 2.12 SBT 构建
  • 使用 Java 11/17 的 Scala 2.12 Maven 构建
  • 使用 Java 8/Scala 2.12/SBT 的 Java/Scala/Python/R 单元测试
  • Kubernetes 集成测试
  • 使用 Java 8 和 Scala 2.13/SBT 的每日 Java/Scala/Python/R 单元测试
  • 使用 Java 8 和 Scala 2.13/SBT 的每日 JDBC Docker 集成测试
  • 使用 Java 8 和 Scala 2.12/SBT 的每日规模因子为 1 的 TPC-DS 基准测试

实用开发者工具

缩短构建时间

SBT:避免重新创建 assembly JAR

Spark 的默认构建策略是组装一个包含其所有依赖项的 jar 包。在进行迭代开发时,这可能会很繁琐。在本地开发时,可以先创建一个包含 Spark 所有依赖项的 assembly jar,然后在进行更改时仅重新打包 Spark 本身。

$ build/sbt clean package
$ ./bin/spark-shell
$ export SPARK_PREPEND_CLASSES=true
$ ./bin/spark-shell # Now it's using compiled classes
# ... do some local development ... #
$ build/sbt compile
$ unset SPARK_PREPEND_CLASSES
$ ./bin/spark-shell
 
# You can also use ~ to let sbt do incremental builds on file changes without running a new sbt session every time
$ build/sbt ~compile

单独构建子模块

例如,您可以使用以下命令构建 Spark Core 模块

$ # sbt
$ build/sbt
> project core
> package

$ # or you can build the spark-core module with sbt directly using:
$ build/sbt core/package

$ # Maven
$ build/mvn package -DskipTests -pl core

运行单个测试

在本地开发时,运行单个测试或少量测试通常比运行整个测试套件更方便。

使用 SBT 测试

运行单个测试最快的方法是使用 sbt 控制台。保持 sbt 控制台处于打开状态,并根据需要使用它来重新运行测试是最快的。例如,要运行特定项目(如 core)中的所有测试

$ build/sbt
> project core
> test

您可以使用 testOnly 命令运行单个测试套件。例如,运行 DAGSchedulerSuite

> testOnly org.apache.spark.scheduler.DAGSchedulerSuite

testOnly 命令支持通配符;例如,您还可以运行 DAGSchedulerSuite

> testOnly *DAGSchedulerSuite

或者,您可以运行 scheduler 包中的所有测试

> testOnly org.apache.spark.scheduler.*

如果您只想运行 DAGSchedulerSuite 中的单个测试(例如名称中包含“SPARK-12345”的测试),请在 sbt 控制台中运行以下命令

> testOnly *DAGSchedulerSuite -- -z "SPARK-12345"

如果您愿意,也可以在命令行上运行所有这些命令(但这会比使用打开的控制台运行测试慢)。为此,您需要将 testOnly 和后续参数括在引号中

$ build/sbt "core/testOnly *DAGSchedulerSuite -- -z SPARK-12345"

有关如何使用 sbt 运行单个测试的更多信息,请参阅 sbt 文档

使用 Maven 测试

对于 Maven,您可以使用 -DwildcardSuites 标志来运行单个 Scala 测试

build/mvn -Dtest=none -DwildcardSuites=org.apache.spark.scheduler.DAGSchedulerSuite test

您需要使用 -Dtest=none 来避免运行 Java 测试。有关 ScalaTest Maven 插件的更多信息,请参阅 ScalaTest 文档

要运行单个 Java 测试,可以使用 -Dtest 标志

build/mvn test -DwildcardSuites=none -Dtest=org.apache.spark.streaming.JavaAPISuite test

测试 PySpark

要运行单个 PySpark 测试,可以使用 python 目录下的 run-tests 脚本。测试用例位于每个 PySpark 包下的 tests 包中。请注意,如果您在 Apache Spark 的 Scala 或 Python 端进行了更改,则需要在运行 PySpark 测试之前手动重新构建 Apache Spark 以应用更改。运行 PySpark 测试脚本不会自动进行构建。

另外,请注意在 macOS High Sierra+ 上使用 PySpark 存在一个已知问题。必须将 OBJC_DISABLE_INITIALIZE_FORK_SAFETY 设置为 YES 才能运行某些测试。更多详细信息,请参见 PySpark 问题Python 问题

要运行特定模块中的测试用例

$ python/run-tests --testnames pyspark.sql.tests.test_arrow

要运行特定类中的测试用例

$ python/run-tests --testnames 'pyspark.sql.tests.test_arrow ArrowTests'

要运行特定类中的单个测试用例

$ python/run-tests --testnames 'pyspark.sql.tests.test_arrow ArrowTests.test_null_conversion'

您还可以运行特定模块中的文档测试(doctests)

$ python/run-tests --testnames pyspark.sql.dataframe

最后,在同一位置还有一个名为 run-tests-with-coverage 的脚本,它会为 PySpark 测试生成覆盖率报告。它接受与 run-tests 相同的参数。

$ python/run-tests-with-coverage --testnames pyspark.sql.tests.test_arrow --python-executables=python
...
Name                              Stmts   Miss Branch BrPart  Cover
-------------------------------------------------------------------
pyspark/__init__.py                  42      4      8      2    84%
pyspark/_globals.py                  16      3      4      2    75%
...
Generating HTML files for PySpark coverage under /.../spark/python/test_coverage/htmlcov

您可以通过 /.../spark/python/test_coverage/htmlcov 下的 HTML 文件直观地查看覆盖率报告。

请通过 python/run-tests[-with-coverage] --help 查看其他可用选项。

测试 K8S

虽然 GitHub Actions 提供了 K8s 单元测试和集成测试覆盖,但您也可以在本地运行。例如,Volcano 批处理调度程序集成测试需要手动完成。详情请参阅集成测试文档。

https://github.com/apache/spark/blob/master/resource-managers/kubernetes/integration-tests/README.md

运行 Docker 集成测试

Docker 集成测试由 GitHub Actions 覆盖。不过,您可以在本地运行它们以加速开发和测试。详情请参阅 Docker 集成测试文档

使用 GitHub Actions 工作流进行测试

Apache Spark 利用 GitHub Actions 实现持续集成和广泛的自动化。Apache Spark 存储库为开发者提供了多种 GitHub Actions 工作流,供在创建拉取请求 (Pull Request) 前运行。

在您的分支存储库中运行基准测试

Apache Spark 存储库提供了一种在 GitHub Actions 中运行基准测试的简便方法。当您在拉取请求中更新基准测试结果时,建议使用 GitHub Actions 来运行并生成结果,以确保它们在尽可能相同的环境中运行。

  • 点击您分支存储库中的“Actions”选项卡。
  • 在“All workflows”列表中选择“Run benchmarks”工作流。
  • 点击“Run workflow”按钮并按如下方式适当输入字段
    • Benchmark class:您希望运行的基准测试类。支持 glob 模式。例如,org.apache.spark.sql.*
    • JDK version:您希望运行基准测试的 Java 版本。例如,11
    • Failfast:指示测试失败时是否停止基准测试和工作流。如果为 true,则立即失败;如果为 false,则无论是否失败都会全部运行。
    • Number of job splits:将基准测试作业拆分为指定数量,并并行运行。这对于绕过 GitHub Actions 中工作流和作业的时间限制特别有用。
  • “Run benchmarks”工作流完成后,点击该工作流并在“Artifacts”中下载基准测试结果。
  • 进入 Apache Spark 存储库的根目录,解压下载的文件,这将通过在适当位置更新文件来更新基准测试结果。

ScalaTest 问题

如果在运行 ScalaTest 时出现以下错误

An internal error occurred during: "Launching XYZSuite.scala".
java.lang.NullPointerException

这是由于类路径中的 Scala 库不正确。要修复它

  • 右键点击项目
  • 选择 Build Path | Configure Build Path
  • 添加库 | Scala Library
  • 删除 scala-library-2.10.4.jar - lib_managed\jars

如果出现“Could not find resource path for Web UI: org/apache/spark/ui/static”,这是由于类路径问题(某些类可能未编译)。要修复此问题,只需从命令行运行一次测试即可

build/sbt "testOnly org.apache.spark.rdd.SortingSuite"

二进制兼容性

为了确保二进制兼容性,Spark 使用了 MiMa

确保二进制兼容性

在处理问题时,在打开拉取请求之前检查您的更改是否引入了二进制不兼容性始终是一个好习惯。

您可以通过运行以下命令来执行此操作

$ dev/mima

MiMa 报告的二进制不兼容可能如下所示

[error] method this(org.apache.spark.sql.Dataset)Unit in class org.apache.spark.SomeClass does not have a correspondent in current version
[error] filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.spark.SomeClass.this")

解决二进制不兼容问题

如果您认为二进制不兼容是合理的,或者 MiMa 报告了误报(例如,报告的二进制不兼容涉及非用户可见的 API),您可以通过在 project/MimaExcludes.scala 中添加排除项来过滤掉它们,其中包含 MiMa 报告建议的内容,以及包含您正在处理的问题的 JIRA 编号及其标题的注释。

对于上述描述的问题,我们可以添加以下内容

// [SPARK-zz][CORE] Fix an issue
ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.spark.SomeClass.this")

否则,您必须在打开或更新拉取请求之前解决这些不兼容性。通常,MiMa 报告的问题是不言自明的,主要围绕缺少成员(方法或字段),您必须将其添加回来以保持二进制兼容性。

检出拉取请求

Git 提供了将远程拉取请求提取到您自己的本地存储库的机制。这在审查代码或在本地测试补丁时非常有用。如果您尚未克隆 Spark Git 存储库,请使用以下命令

$ git clone https://github.com/apache/spark.git
$ cd spark

要启用此功能,您需要配置 git 远程存储库以获取拉取请求数据。通过修改 Spark 目录下的 .git/config 文件来执行此操作。如果您将远程存储库命名为非“origin”,请相应修改

[remote "origin"]
  url = git@github.com:apache/spark.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/pull/*/head:refs/remotes/origin/pr/*   # Add this line

完成此操作后,您可以获取远程拉取请求

# Fetch remote pull requests
$ git fetch origin
# Checkout a remote pull request
$ git checkout origin/pr/112
# Create a local branch from a remote pull request
$ git checkout origin/pr/112 -b new-branch

生成依赖关系图

$ # sbt
$ build/sbt dependencyTree
 
$ # Maven
$ build/mvn -DskipTests install
$ build/mvn dependency:tree

组织 import 导入

您可以使用 Aaron Davidson 开发的 IntelliJ Imports Organizer 来帮助组织代码中的 import。它可以配置为符合样式指南中的导入顺序。

格式化代码

要格式化 Scala 代码,请在提交 PR 之前运行以下命令

$ ./dev/scalafmt

默认情况下,此脚本将格式化与 git master 分支不同的文件。有关更多信息,请参见 scalafmt 文档,但请使用现有脚本,而不是本地安装的 scalafmt 版本。

IDE 设置

在设置 IDE 之前,请确保环境是干净的:从一个干净的 Spark 仓库 git clone 开始,并安装最新版本的 IDE。

如果出现问题,请通过 ./build/sbt clean./build/mvn clean 清除构建输出,通过 rm -rf ~/.m2/repository/* 清除 m2 缓存,然后干净地将项目重新导入 IDE 并重试。

IntelliJ

虽然许多 Spark 开发者在命令行使用 SBT 或 Maven,但我们最常使用的 IDE 是 IntelliJ IDEA。您需要在 Preferences > Plugins 中安装 JetBrains Scala 插件。

由于 Spark 构建的复杂性,请修改 IntelliJ IDEA 的以下全局设置

  • 进入 Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Importing,确保为 Generated source folders 选择“Detect automatically”,并为 Phase to be used for folders update 选择“generate sources”。
  • 进入 Settings -> Build, Execution, Deployment -> Compiler -> Scala Compiler -> Scala Compiler Server,为 Maximum heap size, MB 选择一个足够大的数值,例如“4000”。

创建 Spark IntelliJ 项目

  • 下载 IntelliJ 并安装 IntelliJ 的 Scala 插件
  • 进入 File -> Import Project,定位到 Spark 源代码目录,并选择“Maven Project”。在此处选择 Maven 而非 sbt 很重要,因为 Spark 具有复杂的构建逻辑,该逻辑通过 SparkBuilder.scala 中的 Scala 代码为 sbt 实现,而 IntelliJ IDEA 无法很好地理解它。
  • 在导入向导中,保留默认设置即可。但通常建议启用“Import Maven projects automatically”,因为对项目结构的更改将自动更新 IntelliJ 项目。
  • 正如 构建 Spark 文档所述,某些构建配置需要启用特定的 profile。与上述使用 -P[profile name] 启用的 profile 相同,这些 profile 也可以在导入向导的 Profiles 屏幕中启用。例如,如果是为支持 YARN 的 Hadoop 2.7 进行开发,请启用 yarnhadoop-2.7 profile。这些选择以后可以通过访问 View 菜单中的“Maven Projects”工具窗口并展开 Profiles 部分进行更改。

其他提示

  • “Rebuild Project”在首次编译时可能会失败,因为生成的源文件不会自动生成。请尝试点击“Maven Projects”工具窗口中的“Generate Sources and Update Folders For All Projects”按钮来手动生成这些源文件。
  • IntelliJ 捆绑的 Maven 版本可能不够新,无法满足 Spark 的要求。如果发生这种情况,“Generate Sources and Update Folders For All Projects”操作可能会静默失败。请记得重置项目的 Maven 主目录(Preference -> Build, Execution, Deployment -> Maven -> Maven home directory)以指向较新的 Maven 安装。您也可以先使用 build/mvn 脚本构建 Spark。如果该脚本无法找到足够新的 Maven 安装,它将下载并安装最新版本的 Maven 到 build/apache-maven-<version>/ 文件夹中。
  • 某些模块根据 Maven profile 具有可插入的源目录(例如支持 Scala 2.11 和 2.10,或允许针对不同版本的 Hive 进行交叉构建)。在某些情况下,IntelliJ 无法正确检测到使用 maven-build-plugin 添加源目录的情况。在这种情况下,您可能需要显式添加源位置来编译整个项目。如果需要,打开“Project Settings”并选择“Modules”。根据您选择的 Maven profile,您可能需要将源文件夹添加到以下模块
    • spark-hive: 添加 v0.13.1/src/main/scala
    • spark-streaming-flume-sink: 添加 target\scala-2.11\src_managed\main\compiled_avro
    • spark-catalyst: 添加 target\scala-2.11\src_managed\main
  • 编译可能会失败,报错类似“scalac: bad option: -P:/home/jakub/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar”。如果发生这种情况,请转到 Preferences > Build, Execution, Deployment > Scala Compiler 并清除“Additional compiler options”字段。这样就可以工作了,尽管项目重新导入时选项会回来。如果您尝试使用 quasiquotes(例如 sql)构建任何项目,则需要将该 jar 设置为编译器插件(位于“Additional compiler options”正下方)。否则,您会看到类似以下的错误
    /Users/irashid/github/spark/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
    Error:(147, 9) value q is not a member of StringContext
     Note: implicit class Evaluate2 is not applicable here because it comes after the application point and it lacks an explicit result type
          q"""
          ^ 
    

远程调试 Spark

本节将向您展示如何使用 IntelliJ 远程调试 Spark。

设置远程调试配置

按照 Run > Edit Configurations > + > Remote 打开默认的远程配置模板:

通常,默认值应该足够使用。确保在 Debugger mode 中选择 Listen to remote JVM,并选择正确的 JDK 版本以生成合适的 Command line arguments for remote JVM

完成配置并保存后。您可以按照 Run > Run > Your_Remote_Debug_Name > Debug 启动远程调试过程,并等待 SBT 控制台连接

触发远程调试

通常分为两个步骤

  1. 使用上一步生成的 Command line arguments for remote JVM 设置 JVM 选项。
  2. 启动 Spark 执行(SBT 测试、pyspark 测试、spark-shell 等)

以下是使用 SBT 单元测试触发远程调试的示例。

在 SBT 控制台中输入

./build/sbt

切换到目标测试所在的项目,例如

sbt > project core

复制并粘贴 Command line arguments for remote JVM

sbt > set javaOptions in Test += "-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005"

在 IntelliJ 中设置断点并使用 SBT 运行测试,例如

sbt > testOnly *SparkContextSuite -- -t "Only one SparkContext may be active at a time"

当您在 IntelliJ 控制台中看到“Connected to the target VM, address: ‘localhost:5005’, transport: ‘socket’”时,说明已成功连接到 IntelliJ。然后,您可以像往常一样在 IntelliJ 中开始调试。

要退出远程调试模式(这样您就不必一直重启远程调试器),在项目中的 SBT 控制台输入“session clear”。

Cursor/VS Code

您可以通过使用 Metals 扩展来利用 CursorVS Code 的强大功能进行 Spark 开发。Metals 通过构建服务器协议 (BSP) 提供强大的 Scala 支持。

初始设置

  • 安装 Metals:在 Marketplace 中搜索并安装 Scala (Metals) 扩展。
  • 打开项目:打开您的 Spark 根目录。
  • 选择构建工具:当左下角弹出窗口提示时,选择 sbt 以读取构建定义。
  • 确认构建服务器:Metals 默认使用 Bloop 作为构建服务器。请不要更改此设置,因为 Bloop 为本地开发提供了最快的编译速度和最好的集成。打开命令面板 (Cmd+Shift+P 或 Ctrl+Shift+P),运行 Metals: Run doctor,并验证状态仪表板。确保它显示:Build definition is coming from sbtBuild server currently being used is Bloop

如果您遇到编译错误或 IDE 无法识别符号,请按照以下步骤执行干净导入

  1. 停止 Bloop 服务器:在终端运行以下命令停止 bloop 服务器:pkill -f "bloop.BloopServer"。如果您安装了 bloop CLI,也可以运行 bloop exit
  2. 清理工作区:在终端运行以下命令以删除缓存的构建元数据:rm -rf .bloop/ .metals/ .bsp/
  3. 重新加载窗口:从命令面板运行 Developer: Reload Window,并在提示重新出现时选择 sbt。
  4. 导入构建:运行 Metals: Import build 并等待过程完成。
  5. 连接到服务器:运行 Metals: Connect to build server 并等待过程完成。
  6. 确认:运行 Metals: Run doctor 并验证状态仪表板。

Eclipse

Eclipse 可用于开发和测试 Spark。以下配置是已知的可行方案

最简单的方法是从 Scala IDE 下载页面下载 Scala IDE 包。它预装了 ScalaTest。或者,使用 Scala IDE 更新站点或 Eclipse Marketplace。

SBT 可以创建 Eclipse .project.classpath 文件。要为每个 Spark 子项目创建这些文件,请使用此命令

sbt/sbt eclipse

要导入特定项目(例如 spark-core),请选择 File | Import | Existing Projects into Workspace。请勿选择“Copy projects into workspace”。

如果您想在 Scala 2.10 上开发,则需要为用于编译 Spark 的确切 Scala 版本配置 Scala 安装。由于 Scala IDE 目前捆绑了最新版本(此时为 2.10.5 和 2.11.8),您需要在 Eclipse Preferences -> Scala -> Installations 中通过指向您的 Scala 2.10.5 发行版的 lib/ 目录来添加一个。完成后,选择所有 Spark 项目并右键点击,选择 Scala -> Set Scala Installation 并指向 2.10.5 安装。这应该会清除所有关于无效交叉编译库的错误。现在应该可以成功进行干净构建了。

ScalaTest 可以通过右键点击源文件并选择 Run As | Scala Test 来执行单元测试。

如果发生 Java 内存错误,可能需要增加 Eclipse 安装目录中 eclipse.ini 的设置。根据需要增加以下设置

--launcher.XXMaxPermSize
256M

带有 sbt 的 IDE

当您使用 VSCode 或 Cursor 等 IDE 并从终端使用 sbt 进行构建时,通常会遇到类似以下的问题

java.lang.RuntimeException: Failed to find name hashes for

这是因为多个实例试图同时构建项目。通常罪魁祸首是 IDE 中的 Java/Scala 插件。

为了修复此问题,首先您需要禁用 IDE 插件的自动构建。然后,您需要使用 sbt clean 清除所有 artifact。您还需要清除以下位置的缓存

~/.m2
~/.ivy2/

每日构建版本

Spark 每天为其 master 和维护分支的 Maven artifact 发布 SNAPSHOT 版本。要链接到 SNAPSHOT,您需要将 ASF 快照存储库添加到您的构建中。请注意,SNAPSHOT artifact 是临时的,可能会更改或被删除。要使用这些版本,您必须添加位于 https://repository.apache.org/snapshots/ 的 ASF 快照存储库。

groupId: org.apache.spark
artifactId: spark-core_2.12
version: 3.0.0-SNAPSHOT

使用 YourKit 分析 Spark 应用程序

以下是使用 YourKit Java Profiler 分析 Spark 应用程序的说明。

在 Spark EC2 镜像上

  • 登录 master 节点后,从 YourKit 下载页面下载适用于 Linux 的 YourKit Java Profiler。该文件很大(约 100 MB),且 YourKit 下载网站速度较慢,因此您可能需要镜像此文件或将其包含在自定义 AMI 中。
  • 将此文件解压到某处(在本例中为 /root):unzip YourKit-JavaProfiler-2017.02-b66.zip
  • 使用 copy-dir 将展开的 YourKit 文件复制到每个节点:~/spark-ec2/copy-dir /root/YourKit-JavaProfiler-2017.02
  • 通过编辑 ~/spark/conf/spark-env.sh 并添加以下行,配置 Spark JVM 使用 YourKit 分析代理
    SPARK_DAEMON_JAVA_OPTS+=" -agentpath:/root/YourKit-JavaProfiler-2017.02/bin/linux-x86-64/libyjpagent.so=sampling"
    export SPARK_DAEMON_JAVA_OPTS
    SPARK_EXECUTOR_OPTS+=" -agentpath:/root/YourKit-JavaProfiler-2017.02/bin/linux-x86-64/libyjpagent.so=sampling"
    export SPARK_EXECUTOR_OPTS
    
  • 将更新后的配置复制到每个节点:~/spark-ec2/copy-dir ~/spark/conf/spark-env.sh
  • 重启您的 Spark 集群:~/spark/bin/stop-all.sh~/spark/bin/start-all.sh
  • 默认情况下,YourKit 分析器代理使用端口 10001-10010。要将 YourKit 桌面应用程序连接到远程分析代理,您必须在集群的 EC2 安全组中打开这些端口。为此,登录 AWS 管理控制台。转到 EC2 部分,在页面左侧的 Network & Security 部分选择 Security Groups。找到与您的集群对应的安全组;如果您启动了一个名为 test_cluster 的集群,则需要修改 test_cluster-slavestest_cluster-master 安全组的设置。对于每个组,从列表中选中它,点击 Inbound 选项卡,并创建一个新的 Custom TCP Rule,开放端口范围 10001-10010。最后,点击 Apply Rule Changes。确保对两个安全组都执行此操作。注意:默认情况下,spark-ec2 会重用安全组:如果您停止此集群并启动另一个同名集群,您的安全组设置将被重用。
  • 在您的桌面上启动 YourKit 分析器。
  • 从欢迎屏幕选择“Connect to remote application…”并输入您的 Spark master 或 worker 机器的地址,例如 ec2--.compute-1.amazonaws.com
  • YourKit 现在应该已连接到远程分析代理。分析信息可能需要片刻时间才会出现。

请参阅完整的 YourKit 文档以获取分析代理 启动选项 的完整列表。

在 Spark 单元测试中

通过 SBT 运行 Spark 测试时,在 SparkBuild.scala 中添加 javaOptions in Test += "-agentpath:/path/to/yjp",以在启用 YourKit 分析器代理的情况下启动测试。
特定平台的分析器代理路径列在 YourKit 文档 中。

生成式工具的使用

通常情况下,ASF 允许使用生成式 AI 工具共同创作的贡献。但是,当您提交包含生成内容的补丁时,需要考虑一些因素。

首先,您必须披露此类工具的使用情况。此外,您有责任确保相关工具的条款和条件与在开源项目中的使用兼容,并且包含生成的内容不会带来版权侵权的风险。

详情和最新进展,请参阅 ASF 生成式工具指导