原文:Run Xcode 7 UI Tests from the command line

苹果在Xcode 7中引入了一项新技术UI Tests,允许开发者使用Swift或Objective C代码来进行UI测试。直到现在一个可行的方法是使用UI Automation。通过UI Tests,可使用Xcode适当调试问题以及使用Swift或Objective C而无需处理JavaScript代码。
首先为UI Tests创建一个新的target

在测试分区下,选中Cocoa Touch UI Testing Bundle:

现在打开Project UI Tests文件夹中最新创建的Project_UI_Tests.swift文件。在底部你会有一个名为testExample的空方法。注意看图中的光标,并点击底部红色的记录按钮。

这样就会打开你的app。现在你可以四处点击下,并与你的应用程序进行交互。完成后,再次点击红色录制按钮。

生成的代码类似下边的记录。我已经在生成的代码行之间添加了几个示例XCTAsserts。在Xcode中使用CMD + U即可运行你的应用程序,并且是同时运行单元测试和UI Tests。
现在你已经可以使用CLI运行测试了,无需进一步的调整,不过我们想让UI Tests在一个单独的scheme中,点击scheme并选中New Scheme:

选中最新创建的UI Test target并确认。

如果你计划在CI-server上运行测试,请确保最新创建的scheme已经启用了Shared选项。点击scheme并选择Manage Schemes来打开会话。

从CLI打开测

1
2
3
4
5
xcodebuild -workspace App.xcworkspace \
   -scheme "SchemeName" \
           -sdk iphonesimulator \
           -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.0'
           test

明确所用Xcode的版本非常重要,我们使用的是最新的测试版本:

1
export DEVELOPER_DIR="/Applications/Xcode-beta.app"

你甚至可以将测试版作为你新的默认运行版本:

1
sudo xcode-select --switch "/Applications/Xcode-beta.app"

UI测试运行时终端输出示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Test Suite 'All tests' started at 2015-06-18 14:48:42.601
Test Suite 'TempCam UI Tests.xctest' started at 2015-06-18 14:48:42.602
Test Suite 'TempCam_UI_Tests' started at 2015-06-18 14:48:42.602
Test Case '-[TempCam_UI_Tests.TempCam_UI_Tests testExample]' started.
2015-06-18 14:48:43.676 XCTRunner[39404:602329] Continuing to run tests in the background with task ID 1
    t =     1.99s     Wait for app to idle
    t =     2.63s     Find the "toggleButton" Switch
    t =     2.65s     Tap the "toggleButton" Switch
    t =     2.65s         Wait for app to idle
    t =     2.66s         Find the "toggleButton" Switch
    t =     2.66s         Dispatch the event
    t =     2.90s         Wait for app to idle
    t =     3.10s     Find the "toggleButton" Switch
    t =     3.10s     Tap the "toggleButton" Switch
    t =     3.10s         Wait for app to idle
    t =     3.11s         Find the "toggleButton" Switch
    t =     3.11s         Dispatch the event
    t =     3.34s         Wait for app to idle
    t =     3.54s     Find the "toggleButton" Switch
    t =     3.54s     Tap the "MyButton" Button
    t =     3.54s         Wait for app to idle
    t =     3.54s         Find the "MyButton" Button
    t =     3.55s         Dispatch the event
    t =     3.77s         Wait for app to idle
    t =     4.25s     Tap the "Okay" Button
    t =     4.25s         Wait for app to idle
    t =     4.26s         Find the "Okay" Button
    t =     4.28s         Dispatch the event
    t =     4.51s         Wait for app to idle
    t =     4.51s     Find the "toggleButton" Switch
Test Case '-[TempCam_UI_Tests.TempCam_UI_Tests testExample]' passed (4.526 seconds).
Test Suite 'TempCam_UI_Tests' passed at 2015-06-18 14:48:47.129.
 Executed 1 test, with 0 failures (0 unexpected) in 4.526 (4.527) seconds
Test Suite 'TempCam UI Tests.xctest' passed at 2015-06-18 14:48:47.129.
 Executed 1 test, with 0 failures (0 unexpected) in 4.526 (4.528) seconds
Test Suite 'All tests' passed at 2015-06-18 14:48:47.130.
 Executed 1 test, with 0 failures (0 unexpected) in 4.526 (4.529) seconds
** TEST SUCCEEDED **

生成截图

无需额外的工作,可轻轻松得到截图。可为命令添加derivedDataPath选项,你可以告诉Xcode在什么地方储存测试结果,包括生成的截图。

1
2
3
4
5
6
xcodebuild -workspace App.xcworkspace \
   -scheme "SchemeName" \
           -sdk iphonesimulator \
           -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.0'
           -derivedDataPath './output'
           test

Xcode会自动为每个测试操作生成截图,关于生成数据的更多信息,可查看Michele写的Test Logs in Xcode.

下一步

想要为多种语言和多种设备类型创建截图,你可能会需要像snapshot这样的工具,snapshot使用UI Automation, 不过现在已经弃用了。我目前用的是最新版的snapshot,可充分利用新UI Tests的功能,这样如果程序出错,那snapshot能展示更多细节结果和错误信息。

使用命令行工具运行Xcode 7 UI Tests的更多相关文章

  1. dedecms:织梦文章如何添加“自定义属性”标签(sql命令行工具)

    dede织梦如何添加“自定义属性”标签“症状” 1.进入后台——系统——SQL命令行工具——运行SQL命令行,添加arcatt表字段: insert into`dede_arcatt`(sortid, ...

  2. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  3. Xcode 命令行工具 Command Line Tools

    xcode命令行工具包是一个小型独立包,可供下载独立于Xcode的和允许您执行命令行开发OS X. 在OS X10.9,就以及没有clt的下载安装包了,需要使用命令在线安装. xcode-select ...

  4. 从命令行模式运行Windows管理工具。

    从命令行模式运行Windows管理工具. 分类: Play Windows 2004-08-06 16:39 6076人阅读 评论(3) 收藏 举报 1.可以直接在开始-〉运行里面输入的管理工具: 文 ...

  5. 您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具

    Windows 上的安装为了在 Windows 上安装 GCC,您需要安装 MinGW.为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinGW 下载页面,下载最 ...

  6. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  7. [原创]使用命令行工具提升cocos2d-x开发效率(一)之TexturePacker篇

    TexturePacker是一个常用的制作sprite sheet的工具,它提供了很多实用的功能. 一般我们制作sprite sheet都是使用他的gui版本,纯手工操作,就像下面这张图示的一样. 刚 ...

  8. [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇

    如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:)   你是否已经厌倦了无聊的手工publish操作? ...

  9. Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...

随机推荐

  1. 展讯camera去除尺寸相关缓存

    amera应用的缓存在/data/data/com.android.camera2/shared_prefs目录下

  2. position之fixed固定定位、absolute绝对定位和relative相对定位

    什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧.但是在网 ...

  3. JQuery_元素样式操作

    元素样式操作包括了直接设置CSS 样式.增加CSS 类别.类别切换.删除类别这几种操作方法.而在整个jQuery 使用频率上来看,CSS 样式的操作也是极高的,所以需要重点掌握.  一.css()方法 ...

  4. 阿里云docker

    https://cr.console.aliyun.com docker 安装mysql image sudo docker pull  mysql docker  运行 mysql docker r ...

  5. RDLC隔行变色的实现

    在RDLC设计页面设置行属性中的Background为: =IIF((RowNumber(Nothing)) Mod 2 =1,"Transparent","#F6FAF ...

  6. Jekyll x Liquid 控制文章列表只显示特定类别的Post

    使用Liquid按照Category或者Tag过滤Post List 文章首发于szhshp的第三边境研究所(szhshp.org), 转载请注明 前段时间画了一些漫画,考虑把漫画相关的Post放到另 ...

  7. JS与树本(复杂)

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>树形 ...

  8. mina-http之坑

    TCP是流式协议,不保证一次通信传输完整的包,当这种情况发生在mina-http时会产生严重的bug,图中红框部分只是将前后收到的数据拼在一起,但下面处理的还是最近收到的不完整的msg:此为大坑! 轻 ...

  9. 将1~n个整数按字典顺序进行排序,返回排序后第m个元素

    给定一个整数n,给定一个整数m,将1~n个整数按字典顺序进行排序,返回排序后第m个元素.n最大可为5000000.字典排序的含义为:从最高位开始比较.1开头的数字排在最前面,然后是2开头的数字,然后是 ...

  10. visual studio错误解决 [error LNK1104: 无法打开文件“gdi32.lib”]

    哔了狗.我是win7装的vs2013,本着体验一下"新"玩意的心情.(然而2017都快出来了),没想到竟遇到如此粗鄙的问题. 从错误信息上明显可以了解是缺少一个静态库.(当然错误信 ...