Fastlane:移动应用CICD最优解之iOS项目测试和截图
测试
在项目中的Fastfile
中添加如下代码来运行单元测试和UI测试
lane :tests do run_tests(scheme: "MyAppTests") end 复制代码
还可以设置更多参数,例如
lane :tests do run_tests(workspace: "Example.xcworkspace", devices: ["iPhone 6s", "iPad Air"], scheme: "MyAppTests") end 复制代码
查看更多 可用参数列表
使用如下命令即可执行我们定义的这个测试甬道
fastlane tests 复制代码
在CI中设置并运行fastlane
要在持续集成服务上使用fastlane运行iOS测试,查看 fastlane持续集成相关文档.
由于fastlane将所有配置存储在简单的配置文件中,并通过命令行运行,因此它支持各种类型的CI系统。
下面这些文档可以帮助我们开始使用一些流行的CI系统。
Self-Hosted CIs
Jenkins
Bamboo
GitLab
Hosted CIs
Circle
Travis
Visual Studio
如果这里没有列出您的CI系统,没问题,fastlane运行在任何CI上。要触发fastlane,只需在终端运行的命令:
fastlane tests 复制代码
设置环境
下面是官网的练习,同文章前文提到的Auth和环境变量的设置。
支持两步或双因素验证
要设置的环境变量
发布构建结果
如果你想在钉钉、企业微信或其他团队聊天客户端上发布测试结果,请查看fastlane 钉钉或企业微信。
截图
Fastlane 为iOS 和 tvOS自动截图
在说服潜在用户下载或购买你的应用时,你的App Store截图可能是最重要的东西。不幸的是,许多应用的截图做得并不好。这通常是因为获取应用的截屏并将其准备用于显示非常耗时,并且很难确保所有内容都是正确且一致的!例如:
App Store中的截图是否与您最新的应用设计不一致?
你的应用程序是否本地化为多种语言,需要不同的截图?
你确定没有显示装载指示器吗?
是相同的内容显示为每个你的大小变化?
fastlane工具可以自动化这一过程,使它快速,一致,同时给你漂亮的结果!
另外
要了解开发人员捕捉和美化截图的多种方法,请阅读这篇文章.
自动截图
snapshot配合fastlane自动捕捉应用程序的截图过程。它允许你:
在所有模拟器上以多种语言捕捉数百个屏幕截图
同时在多个设备模拟器中截屏,以减少执行时间
在电脑截屏的同时做点别的事情
配置一次,并存储配置,以便团队中的任何人都可以运行它
生成一个美丽的网页显示所有的屏幕截图在所有设备。这是完美的发送到Q&A,营销,或翻译验证
通过智能等待网络请求完成,避免在你的App Store截图中出现加载指示
获得一个总结如何你的应用程序在所有支持的设备和语言
在snapshot成功捕获所有屏幕截图后,它将显示一个漂亮的HTML页面来汇总所有被捕获的屏幕:
开始:使用我们项目中的UI Tests
snapshot使用苹果UI测试的功能来驱动与应用的交互。要熟悉编写UI测试,请查看以下介绍:
WWDC 2015 Introduction to UI Tests
A first look into UI Tests
UI Testing in Xcode 7
HSTestingBackchannel : ‘Cheat’ by communicating directly with your app
Automating App Store screenshots using fastlane snapshot and frameit
要快速启动UI测试,可以使用UI Test记录器,通过单击窗口底部的红色记录按钮可以启动该记录器。通过使用模拟器与你的应用交互,Xcode会为你生成UI测试代码。要了解更多,请查看 这篇国外的博客或者 国内的文章
设置 snapshot
在Xcode项目中创建一个新的 UI Test target
在项目目录下运行命令
fastlane snapshot init
给UI Test target添加
./SnapshotHelper.swift
文件为新建的UI Test target添加一个新的 Xcode scheme
编辑 scheme
在左侧列表中选中 "Build", 并启用目标的“Run”列下的复选框。
在新建的scheme中启用
Shared
选项(如果是Obejctive-C项目的话) 为测试类添加桥接头文件
#import "MYUITests-Swift.h"
桥接文件的名称是test target的名称后添加-Swift.h 后缀
在UI Test类中,单击左下角的“Record”按钮并记录您的交互
要截屏,请在交互之间调用以下代码
Swift:
snapshot("01LoginScreen")
Objective C:
[Snapshot snapshot:@"01LoginScreen" timeWaitingForIdle:10];
在
setUp()
函数中添加如下代码:
Swift:
let app = XCUIApplication() setupSnapshot(app) app.launch() 复制代码
Objective C:
XCUIApplication *app = [[XCUIApplication alloc] init]; [Snapshot setupSnapshot:app waitForAnimations:NO]; [app launch]; 复制代码
12. 在终端中运行 fastlane snapshot
.
警告:在Xcode中运行测试不会创建快照,也不会生成正确的结果——尽管没有测试会失败。命令行程序创建必要的子目录,适当地重命名文件,并生成概述html页面。
设置过程也会生成一个Snapfile
,看起来类似于
# A list of devices you want to take the screenshots from # devices([ # "iPad (7th generation)", # "iPad Air (3rd generation)", # "iPad Pro (11-inch)", # "iPad Pro (12.9-inch) (3rd generation)", # "iPad Pro (9.7-inch)", # "iPhone 11", # "iPhone 11 Pro", # "iPhone 11 Pro Max", # "iPhone 8", # "iPhone 8 Plus" # ]) languages([ "en-US", "de-DE" ]) # The name of the scheme which contains the UI Tests # scheme "SchemeName" # Where should the resulting screenshots be stored? # output_directory "./screenshots" # clear_previous_screenshots true # remove the '#' to clear all previously generated screenshots before creating new ones # Choose which project/workspace to use # project "./Project.xcodeproj" # workspace "./Project.xcworkspace" # For more information about all available options run # fastlane action snapshot 复制代码
我们可以调整该文件以适应您的项目。每次运行“ fastlane snapshot
文件将自动加载。 查看可用于Snapfile的参数运行 fastlane action snapshot
.
如果想直接尝试截屏功能。首先克隆fastlane repo,转到快照示例项目,然后运行fastlane snapshot
git clone https://github.com/fastlane/fastlane # Clone the fastlane repo cd fastlane/snapshot/example # Navigate to the example project fastlane snapshot # Generate screenshots for the sample app 复制代码
上传截图到App Store
在使用“fastlane snapshot”生成截图后,你通常会想要将其上传到App Store Connect。 如果你遵循安装指南,你之前已经运行过'fastlane init',所以项目中的截图和元数据会存在' fastlane/screenshots '和' fastlane/metadata '目录中。 运行“fastlane snapshot”默认会将截图存储在“fastlane/screenshots”目录中。
fastlane deliver 复制代码
在上传截图之前,这还会显示一个元数据摘要,因为这将覆盖你在App Store Connect上已经有的元数据和截图。
作者:浩哥有码
链接:https://juejin.cn/post/7043049080209014820