如何用EAS让e2e在CI中跑iOS模拟测试?完整配置教程
如何用EAS让e2e在CI中跑iOS模拟测试完整配置教程【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2ee2e 是一款面向 Web 和移动端应用的新一代 AI 驱动的端到端e2e测试框架。而 EAS Simulators 是 Expo 提供的云托管 iOS 模拟器服务——把它接进 e2e 后你的 CI 流水线就不需要 Mac、Xcode 或 Android SDK直接租到云端真模拟级别的 iOS 模拟器来跑 e2e 测试。本教程带你从零完成配置安装设备提供器、写 e2e 配置、声明 EAS 构建配置、在 CI 中注入令牌几分钟就能跑通第一次云端 iOS 模拟测试。为什么要在 CI 里用 EAS 跑 iOS 模拟测试在传统方案里CI 跑 iOS 模拟测试意味着申请 macOS Runner、装 Xcode、下载模拟器运行时、自己xcrun simctl boot启动设备、再想办法把构建产物装进去——每一步都可能卡住维护成本极高。使用 EAS Simulators 后这套流程被压缩成一句话每个 worker 自动租一台云端 iOS 模拟器用完即释放。具体来说见 docs/integrations/eas.mdx运行开始时EAS 自动启动会话运行结束时自动关停无需手动清理模拟器由 e2e 的 agent-device 守护进程驱动测试代码、配置、CI 脚本完全不变会话约 3 分钟从请求到就绪排队、开机、安装应用全程并行就绪后才开始计时支持视频录制失败后可在产物目录查看video/video.mp4。 官方强调的核心卖点跑 e2e 的机器上不需要 Mac、Xcode也不需要 Android SDK。第 1 步安装 e2e-dev/eas 设备提供器在你的测试项目根目录e2e.config.ts所在处执行npm install --save-dev e2e-dev/eas该包通过fetch直接调用 Expo 的 API不需要额外安装任何 SDK。设备提供器的核心实现可以在 packages/eas/src/provider.ts 中查看认证逻辑在 packages/eas/src/credentials.ts。⚠️ EAS Simulators 目前是限量开放limited access服务先在本地确认你的账号已开通npx eas-clilatest simulator:availability第 2 步配置 e2e.config.ts在 e2e 配置中把 iOS target 的device指向easSimulators()// e2e.config.ts import type { E2EConfig } from e2e; import { mobile } from e2e-dev/mobile; import { easSimulators } from e2e-dev/eas; export default { targets: [ { name: ios, engine: mobile({ platform: ios, device: easSimulators({ buildId: process.env.EAS_BUILD_ID }), videoTouches: false, // 重要关闭触摸指示器避免录制卡顿 }), app: { bundleId: com.example.app }, }, ], workers: 2, } satisfies E2EConfig;三个关键细节buildId指向一个 EAS Build 构建产物构建时需声明ios: { simulator: true }EAS 会先把应用装进每台模拟器再就绪app.bundleId保留、app.appPath留空让 EAS 负责安装app.open()靠 bundleId 启动应用videoTouches: falseagent-device 的触摸指示器在 EAS 的 iOS 模拟器上收尾需要数分钟关掉后停止录制只需约 2 秒。项目自带的eas.json就演示了 simulator 构建配置可参考 apps/mobile-benchmark/eas.json{ build: { benchmark: { ios: { simulator: true } } } }会话归属哪个 Expo 项目提供器会自动读取与e2e.config.ts同目录的app.json或app.config.*中extra.eas.projectId由eas init写入。如果配置不在同一目录或想显式指定直接传projectId参数即可是项目 id不是 slug。第 3 步CI 中的认证——EXPO_TOKEN认证方式与 eas-cli 完全一致CI 场景推荐用访问令牌优先级方式说明高EXPO_TOKEN环境变量账号/机器人访问令牌CI 中必须用它配置为 secret低eas-cli 本地登录态读取~/.expo/state.json适合本地开发机⚠️ 安全提醒在 CI Runner 或共享机器上务必设置EXPO_TOKEN。否则 Runner 上残留的他人登录态会以那个账号的身份启动按量计费的会话——账单就记到别人头上了。第 4 步在 CI 里跑起来一个最简的 CI 任务长这样GitHub Actions 风格jobs: ios: runs-on: ubuntu-latest # 注意不需要 macOS timeout-minutes: 60 steps: - uses: actions/checkoutv4 - uses: actions/setup-nodev4 with: node-version: 24 - run: npm ci - run: npx eas build --profile benchmark --platform ios --non-interactive env: EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} - run: npx e2e run --target ios --reporter list,junit env: EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} EAS_BUILD_ID: ${{ steps.build.outputs.build_id }} - uses: actions/upload-artifactv4 if: ${{ !cancelled() }} with: name: e2e-ios path: .e2e要点Runner 用普通 Linux 机器即可因为模拟器在云端--reporter list,junit让 CI 拿到junit.xmlreport.json与.e2e/results/里的轨迹页、截图说明为什么失败模型类判断agent.assert等需要模型密钥建议只对可信分支的构建暴露详见 docs/ci.mdx。会话时长一次运行必须装得下EAS 会话有生命周期上限配置时心里要有数完整选项表见 docs/integrations/eas.mdx选项默认值含义maxDurationMinutes账号上限普通 40 分钟 / 高优先级 115 分钟会话就绪后最多运行时长maxIdleTimeMinutes10 分钟无指令多久后 EAS 自动停会话deviceEAS 自选指定 iOS 机型如iPhone 17 Pro或 Android 硬件配置如pixel_9workers—每个 target 起workers个并行会话实操建议套件总时长要控制在单个会话的maxDurationMinutes内超长了就加workers或拆成多个 CI job让workers × EAS target 数不超过账号的并发会话数超出的会话会排队且排队超过空闲阈值会直接判失败运行日志会打印每个会话的 expo.dev 页面需要时可打开观察模拟器实况。常见问题速查报EXPO_TOKEN is not set and eas-cli is not logged inCI 中没配 secret本地则先跑eas loginINVALID_CONFIGbuildId和applicationArchiveUrl只能二选一maxIdleTimeMinutes必须小于maxDurationMinutes配置加载失败提示升级 e2e-dev/mobile旧版 mobile 包不向设备提供器传递projectRoot升级或显式传projectId应用装不上确认 EAS Build 用了simulator: true的 iOS 构建或改用app.appPathdevice.installApp()本地上传方案。延伸阅读EAS 集成完整文档docs/integrations/eas.mdx移动端 CI 全平台指南GitHub Actions / EAS Workflows / Bitrise / Codemagicdocs/mobile-ci.mdx设备提供器源码packages/eas/src/provider.ts移动端基准测试配置示例apps/mobile-benchmark/e2e.config.ts跟着以上四步你就可以完全脱离 Mac 环境让 e2e 在任意 CI 平台上租用 EAS 的云端 iOS 模拟器跑移动端 e2e 测试了 【免费下载链接】e2eNext generation e2e testing framework for web and mobile apps.项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

私有部署文档怎么选:从部署、集成、安全到信创适配的避坑指南

私有部署文档怎么选:从部署、集成、安全到信创适配的避坑指南

私有部署文档的采购,表面上是在选一套在线编辑工具,实际要评估的是企业内部的协同方式、权限治理、业务集成和后续运维。安装速度、Office 组件、接口开放程度、数据安全能力与国产化适配,需要放在同一套判断标准中。对企业项目负责人而言&am…

2026/10/11 6:08:56 阅读更多 →
家居ERP怎么选?定制与量产场景核心指标横评与选型指南

家居ERP怎么选?定制与量产场景核心指标横评与选型指南

痛点导入:通用逻辑为何在家居现场频频“卡壳”?在家居制造车间,传统通用型管理软件往往难以应对复杂的行业特有工艺。“一单一设计”、“非标尺寸多变”、“板材余料计算繁琐”以及“前后端图纸脱节”,常常让标准化系统陷入水土不…

2026/10/10 2:16:24 阅读更多 →
MI50上FlashAttention内存带宽优化实战指南

MI50上FlashAttention内存带宽优化实战指南

1. 这不是算法优化,是内存带宽的生死线争夺战我第一次在MI50上跑原始Attention时,显存带宽利用率卡在38%,GPU计算单元却空转62%——看着nvtop里那条“吃不饱”的绿色曲线,心里清楚:这不是模型没训好,是数据…

2026/10/10 2:35:49 阅读更多 →

最新新闻

硬件入门学习3-时序逻辑电路

硬件入门学习3-时序逻辑电路

一、触发器 时序逻辑电路与组合逻辑电路不同,其输出取决于当前的输入,也取决于电路的历史状态。时序电路的核心是存储元件:触发器。 时钟是时序电路的心跳,控制电路的状态变化时刻 关键参数: - 频率(Fre…

2026/10/11 7:55:05 阅读更多 →
医院挂号系统毕业设计:需求分析、数据库设计与并发防超卖实践

医院挂号系统毕业设计:需求分析、数据库设计与并发防超卖实践

最近有个学弟抱着电脑来找我,说他抽到的毕设题目是《医院挂号系统的设计与实现》,项目包里还附带了一套源码和代码编号。他以为拿源码就能直接交差,结果打开工程一看,数据库脚本几十张表,前端页面密密麻麻,…

2026/10/11 7:55:05 阅读更多 →
Embedding模型怎么选——BGE、GTE、Jina我跑了中文检索实测,差距比想象大

Embedding模型怎么选——BGE、GTE、Jina我跑了中文检索实测,差距比想象大

做RAG的兄弟应该都有这个痛苦:明明文档里就有答案,就是召回不来。 用户问"这个API的rate limit是多少",检索系统给你翻出几十条无关紧要的配置说明,就是没有那条关键的限制说明。 问题出在哪?90%是embeddi…

2026/10/11 7:55:05 阅读更多 →
SWAT模型参数率定必知:PAWN与Sobol全局敏感性分析方法对比实战

SWAT模型参数率定必知:PAWN与Sobol全局敏感性分析方法对比实战

全局敏感性分析入门:SWAT高参数化模型上PAWN与Sobol方法对比实战做水文模型的人,十有八九都被“参数敏感性分析”这件事折磨过。尤其是跑SWAT(Soil and Water Assessment Tool,水土评估工具)这类高参数化模型时&#x…

2026/10/11 7:55:05 阅读更多 →
无铅低温焊锡丝Sn42Bi58合金相图与焊接工艺参数研究

无铅低温焊锡丝Sn42Bi58合金相图与焊接工艺参数研究

摘要:本文深入研究了Sn42Bi58无铅低温焊锡丝的合金相图、显微组织、力学性能和焊接工艺参数,为电子制造行业选择和使用低温焊锡丝提供技术参考。 关键词:无铅低温焊锡丝;Sn42Bi58;合金相图;焊接工艺&#x…

2026/10/11 7:55:05 阅读更多 →
DeepSeek-V3 部署与微调实战:MoE 显存账、vLLM 与 LoRA 避坑指南

DeepSeek-V3 部署与微调实战:MoE 显存账、vLLM 与 LoRA 避坑指南

简介:面向深度学习开发者的DeepSeek-V3配套资源包,聚焦模型推理、权重转换与部署场景,也适合关注深度搜索、数据分析与机器学习方向的进阶学习者。压缩包共17个文件,包含Python脚本(模型定义、fp8精度转换、文本生成&a…

2026/10/11 7:54:04 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →