仅运行与变更集相关的测试。
“所谓疯狂,就是一遍又一遍地重复做同一件事,却期待不同的结果。”
阿尔伯特·爱因斯坦,大概是吧
假设我们有以下依赖结构
如果 📦Login 模块被更改,它只会影响 📦LoginUI 和 📱MainApp。
如果我们知道只有 📦Login 模块被更改,那么测试所有模块有意义吗?没有意义。我们只需运行 50% 的测试即可获得相同的结果。
这项技术可以节省本地和 CI 测试的时间。
作为 SPM 依赖项添加到 Xcode。
git@github.com:mikeger/XcodeSelectiveTesting
或者,您可以使用该工具的预构建二进制版本,该版本在 releases 部分分发。
将 .package(url: "git@github.com:mikeger/XcodeSelectiveTesting", .upToNextMajor(from: "0.11.2"))
添加到您的 Package.swift
的 dependencies
部分。
使用 SPM 运行命令:swift run xcode-selective-test
。
或者,您可以使用该工具的预构建二进制版本,该版本在 releases 部分分发。
mint install mikeger/XcodeSelectiveTesting@0.11.2
swift build -c release
如果您在使用 Swift Package Manager 而没有 Xcode 项目或工作区
运行 swift test --filter "$(swift run xcode-selective-test . --json | jq -r ". | map(.name) | join(\"|\")")"
注意:此命令假定您已安装 jq 工具。您可以使用 Homebrew 通过 brew install jq
安装它。
SelectiveTestingPlugin
或者,您可以使用 CLI 来达到相同的结果
mint run mikeger/XcodeSelectiveTesting@0.11.2 YourWorkspace.xcworkspace --test-plan YourTestPlan.xctestplan
brew install jq
)xcodebuild test -workspace Workspace.xcworkspace -scheme Scheme $(mint run --silent XcodeSelectiveTesting@provide-if-target-is-test-target --json | jq -r "[.[] | select(.testTarget == true)] | map(\"-only-testing:\" + .name) | join(\" \")")
mint run mikeger/XcodeSelectiveTesting@0.11.2 YourWorkspace.xcworkspace --test-plan YourTestPlan.xctestplan --base-branch $PR_BASE_BRANCH
-c
或 --changed-files
提供已更改文件的列表Git 允许我们找到变更集中修改了哪些文件。
Root
├── Dependencies
│ └── Login
│ ├── ❗️LoginAssembly.swift
│ └── ...
├── MyProject.xcodeproj
└── Sources
从项目到其依赖项,到其依赖项的依赖项,到依赖项的依赖项,...
包之间的依赖关系可以使用 swift package dump-package
解析,Xcode 项目和目标之间的依赖关系可以使用 XcodeProj 解析。
顺便说一句,这是您在 Leetcode 图形练习中获得回报的时刻
这很重要,这样我们就会知道哪些文件影响哪些目标。
从每个已更改的依赖项一直向上遍历,并保存您已触及的依赖项集合。
这是最难的部分:处理晦涩难懂的 Xcode 格式。但是,如果我们走到那一步,我们将不会被 10 年前的 XML 吓倒。
--help
:显示所有命令行选项--base-branch
:用于比较以查找相关更改的分支。如果省略,则使用本地变更集(开发模式)。--test-plan
:测试计划的路径。如果未给出,工具将尝试推断路径。--json
:以 JSON 格式提供输出(STDOUT)。--dependency-graph
:使用依赖关系图可视化打开 Safari。注意:如果您不信任 Javascript 生态系统,请首选使用 --dot
选项。更多信息请访问 此处。--dot
:以 Dot (Graphviz) 格式输出依赖关系图。与 Graphviz 一起使用:brew install graphviz
,然后 xcode-selective-test --dot | dot -Tsvg > output.svg && open output.svg
--turbo
:Turbo 模式:仅为直接受影响的目标运行测试。--verbose
:提供详细输出。-c, --changed-files
:提供要考虑的已更改文件列表。不要尝试计算变更集。可以在单独的文件中定义配置。该工具将在当前目录中查找此文件。
可用的选项有(示例请参阅 selective-testing-config-example.yml
)
basePath
:项目的相对或绝对路径。如果设置,则可以省略命令行选项。testPlan
:要配置的测试计划的相对或绝对路径。exclude
:在查找 Swift 包时要排除的相对路径列表。extra/dependencies
:允许提示工具有关目标或包之间依赖关系的选项。extra/targetsFiles
:允许提示工具有关影响目标或包的文件的选项。支持的操作系统
欢迎贡献。如果您计划贡献,请考虑查看现有问题并创建一个新问题。
请参阅 LICENSE
如果您喜欢这款产品,请考虑向我的家乡慈善项目 Monsters Corporation 捐款 🤝