欢迎使用 Emcee 项目,它是在多个服务器(无论是裸机还是容器化)上并行运行 Android 和 iOS 测试的终极解决方案。
Emcee 允许您将单元测试、集成测试和 UI 测试分成更小的块来运行,从而分散负载并更快地获得测试运行的结果。 共享队列管理测试执行的顺序。 Emcee worker 自动执行测试并维护其模拟器/仿真器的生命周期。 Emcee 可以生成各种测试报告,例如 Junit、Allure、XCResult。 跟踪报告将帮助您了解测试运行在不同机器上的行为。
使用简单的 JSON 文件格式的丰富测试计划
自动模拟器/仿真器生命周期管理
每个测试的超时时间、模拟器设置、环境变量
用于运行来自多个并行 Pull Request 的测试的单一测试队列
针对不同类型测试运行的优先级作业和作业组
Worker 机器的负载平衡,以实现最佳的并行化性能
对 Worker 的实时维护
通过插件集成到现有的测试管理系统中
易于使用的命令行界面
丰富的测试发现机制
Worker 和队列发送的高级分析事件和日志
在部署 Emcee 并使其正常运行的过程中,您将遇到以下术语。
queue
- Emcee 队列接受来自客户端的测试请求,将测试拆分为 bucket 以进行分布式执行,控制负载以及将哪些任务放置在哪些 worker 上。 队列还负责检测卡住的 bucket 并在发生故障时进行恢复。worker
- Emcee worker 负责运行分配给它的测试。 它还会向队列注册自身并监视要分配的任何工作。client
- 客户端充当队列的接口(cli 或 gradle 插件),能够轮询测试运行状态。典型的测试工作流程涉及几个步骤,并且从 Emcee 之外开始。
在 Emcee 上运行任何测试的前提是拥有输入工件。 Emcee 支持不同的输入类型:xctest、target 和 runner 应用程序包、xctestrun(来自测试计划)用于 iOS,以及 application、testApplication apk 用于 Android。 Emcee 不会创建这些测试输入。 通常,您使用诸如 GitHub Actions、CircleCI 之类的 CI 工具来构建项目,然后将构建工件上传到 Emcee worker 可以访问的存储。 或者可以使用本地构建来创建此类工件,Emcee 客户端将在安排测试运行时提供它们。
通过我们的 示例项目 开始使用 Emcee 在本地构建和测试 iOS 应用程序。 使用我们的 指南 部署 Emcee 队列和 worker 以运行您的 Android 测试。
完整的文档可在我们的 Wiki 中找到。
runTests
命令允许您快速启动并运行 Emcee;但是,它不允许进行大量配置。 另一方面,runTestsOnRemoteQueue
命令允许对测试的执行方式进行细粒度的控制。 要开始使用 runTestsOnRemoteQueue
,请查看 队列服务器配置 和 测试参数文件 wiki 页面。
Emcee 使用 Swift Package Manager 来构建、测试和暴露 Swift 包。
要开始浏览代码,请打开 Package.swift
或执行 make open
以生成并打开 Xcode 项目。
我们很高兴接受您的 Pull Request。 如果某些内容对您不起作用,请提交 Issue 告知我们。 阅读文档并提出改进建议!
可帮助您进行开发工作流程的通用命令
make open
Package.swift
:make package
.build/debug/Emcee
中:make build
make test
Package.swift
文件自动生成。 您必须在提交 Pull Request 之前更新它(运行 make package
)。 如果您忘记这样做,CI 检查将会失败。