Universe Of Esnake0

thoughts and inspirations


  • 首页

  • 归档

  • 标签

Test With Xcode Part-1:UI Test First Sight

发表于 2016-04-26   |  

测试让你能够定位并和应用的用户界面交互,以验证UI元素的属性和状态。

UI测试包括UI录制,能够生成代码,像实际操作的那样去操作应用的界面元素,这些代码也可以扩展实现成为真正的UI测试.

UI测试基于两项核心技术: XCTest框架和Accessibility

  • XCTest 提供了一个集成在XCode内的UI测试框架, 创建和使用UI测试与使用XCTest进行单元测试的流程类似。创建一个UI test target, 创建一个UI test classes和UI test methods作为项目的一部分。使用XCTest断言来验证期望的输出是否正确。也可通过Xcode server和xocdebuild来实现持续集成。XCTest同时兼容Obe-c和Swift.

  • Accessibility作为一项核心技术,可以让残疾用户在iOS和OS X系统上得到和其他用户同样丰富的体验。它包括一套关于UI的丰富的语义数据集(rich sef of semantic data),可用于在应用中引导用户。Accessibility在UIKit 和AppKit中都集成了,并且包含了供外部调用的API. UI test使用这些数据来实现功能。

UI测试通过查询找到应用的UI对象,生成事件并将事件发送给UI对象,并且提供了一套丰富的API用于检查UI对象属性和状态。

Requirements

  • Xcode 7
  • OS X 10.11 EI Capitan or later
  • iOS 设备的开发者功能已启用并连接到一个可信任的主机
  • OS X 需要授权一个特别的 Xcode Helper app, 这会在你首次使用UI test的时候自动弹出

APIs

  • XCUIApplication
  • XCUIElement
  • XCUIElementQuery

UI测试包括几个基本步骤:

  1. 查询找到UI元素
  2. 了解这个元素的期望行为
  3. 对元素进行操作以获取响应
  4. 判断响应是否符合期望结果, 测试pass/fail

以上是Apple官方文档中关于使用XCT进行UI测试的所有内容了(截止本文发布时,官方文档最近更新时间为2016-03-21, Updated for Xcode 7.3.)

尝试查找API手册,结果是这样的发现相关类的说明文档缺失,链接为灰色

没办法,那就直接从Xcode中去实际用用看.

在Xcode里面新建一个工程ButtonTest,选择Single View Application, 创建的同时勾选上Include UI Test
完成创建后,在Project Navigator里面是这样的:

然后我们在Main.storyboard里面添加一个button, 并不用实现任何代码,可直接编译通过。
为了避免自动布局带来的问题,直接把storyboard中设置为使用4.7寸屏,模拟器也使用iPhone5s。
然后在Test Navigator中,直接运行ButtonTestUITest, 测试结果为PASS(因为还未实现任何测试)

来仔细看看示例测试代码

按照官方文档所推荐的那样,我们来试试点击开始使用录制功能。
点击录制后,模拟器启动,进入应用主界面,对这个测试应用来说,仅仅显示了一个button.
点击button, 在ButtonTestUITest.m文件中当前光标定位处,出现了点击操作的录制代码

1
[[[XCUIApplication alloc] init].buttons[@"Button"] tap];

看来录制功能用起来没什么问题,利用这个功能大大加快测试脚本的编写效率。
下次我们再来仔细看看 XCUIApplication,XCUIElement, XCUIElementQuery这几个类,以及XCTest中Assertion的部分。

Test With Xcode Part-0

发表于 2016-04-19   |  

前言

从事iOS App测试工作已经快两年了,一直想要总结下工作过程和技术。
趁最近手头项目不紧,学习梳理下在Xcode中进行iOS自动化测试的知识。

作者保留所有权利,转载请先联系获取授权,邮件esnake0@163.com

为什么用Xcode?

1.由于iOS平台特殊的生态环境,Apple公司对于iOS开发系统采取了非常封闭的策略,因此在开发和测试过程中,使用官方开发工具和组件可以避免折腾,将注意力集中到开发测试过程本身。

2.目前流行的第三方自动化测试框架,要么是对Apple官方提供的UI automator进行扩展,如TuneupJs, 要么是直接使用UI Automation作为底层驱动, 如Appium, 淘宝的athrun等。当然像KIF这种直接使用私有API的框架也是存在的,但是资源和文档很少,在国内使用它的团队就更少了。
我们来看看UI Automation的官方文档Instruments User Guide中Automate UI Testing in iOS:

Important
Xcode 7 provides support for user interface testing and recording. Investigate this functionality and see if it will work for your needs before conducting UI testing in Instruments. For information about user interface testing in Xcode, see Testing with Xcode.

在Xcode7推出后Apple官方是推荐使用XCTest代替UI Automation来进行UI自动化测试的。
3.对于iOS App测试工程师来说,在实现了UI自动化测试后,下一个目标就是集成测试和单元测试。因此对于项目源码的阅读能力,和对于App结构的理解是必要的。XCTest框架内置于Xcode,采用Obj-c和Swift这两种与测试目标相同的开发语言,对于单元测试和性能测试已经具有很好的支持,值得深入学习研究。

关于XCTest和Xcode

在Xcode中,XCTest会自动链接所有新的测试目标(test target)

  • 快速开始, 从XCTest在Xcode5中被引入之初,为测试而配置工程的整个流程已经被简化和自动化了,在test navigator中可以很容易的启用和运行测试
  • 性能测试,Xcode6和其后的版本, 添加了能评估实际性能和基线(baseline)的测试
  • UI测试, Xcode 7 中添加了驱动应用UI的功能,包括录制UI交互到源文件然后转移到测试中.
  • 持续集成和Xcode Server. Xcode test可以直接使用命令行脚本执行,或者被配置为自动被运行着Xcode Server的Mac执行
  • Xcode包含了一个将具有OCUnit tests的工程迁移到XCTest tests的迁移器

Markdown Basics

发表于 2016-04-18   |  

Markdown语言的基础学习笔记。

原文链接

Markdown这个词有两个概念:
1.一种格式化纯文本的语言.
2.一个软件工具,由Perl实现,将纯文本转化为HTML.
//Dingus 这个web 应用可以让你键入自己的Markdown格式文本,将其翻译为XHTML

段落,标题,引用

段落只是简单的由1行或多行连贯文本组成,被一个或多个空行分隔。空行可包含空格和tabs, 通常段落不应被空格或tabs缩进.

Markdown 提供两种风格的标题:Setext和atx.

Setext风格的标题<h1>和<<h2>分别由=和短横线-在文本下划实现。

例如

A First Level Header
====================
A Seconde Level Header
----------------------

效果为:

A First Level Header

A Seconde Level Header

atx风格的标题由在行前添加1-6个#来实现,#的个数代表了HTML结果中标题的层级

### Header 3

显示效果为

Header 3

斜体和加粗

Markdown使用星号和下划线来标注强调
Markdown:

Some of these words *are emphasized*.
Some of these words _are emphasized also_.

Use two asterisks for **strong emphasis**.
Or, if you prefer, __use two underscores instead__.

Output:

<p>Some of these words <em>are emphasized</em>.
Some of these words <em>are emphasized also</em>.</p>

<p>Use two asterisks for <strong>strong emphasis</strong>.
Or, if you prefer, <strong>use two underscores instead</strong>.</p>

列表

无序列表使用* + -来标注

*Candy.
*Gum.
*Booze.

和

+Candy.
+Gum.
+Booze.

和

-Candy.
-Gum.
-Booze.

输出一样的结果:

Candy.
Gum.
Booze.

有序列表使用数字和.作为标识

1.Red
2.Green
3.Blue

输出:

  1. Red
  2. Green
  3. Blue

链接

Markdown支持两种创建链接的方式:inline和reference
Inline

This is an [example link](http://example.com/).
Output:

<p>This is an <a href="http://example.com/">
example link</a>.</p>

可选的,你也可以在括号内加入标题属性

This is an [example link](http://example.com/ "With a Title").

输出:

<p>This is an <a href="http://example.com/" title="With a Title">
example link</a>.</p>

Reference风格的链接允许你通过名称来引用你的链接,只要在文档的其他地方定义就行。

I get 10 times more traffic from [Google][1] than from
[Yahoo][2] or [MSN][3].

[1]: http://google.com/        "Google"
[2]: http://search.yahoo.com/  "Yahoo Search"
[3]: http://search.msn.com/    "MSN Search"

输出:

<p>I get 10 times more traffic from <a href="http://google.com/"
title="Google">Google</a> than from <a href="http://search.yahoo.com/"
title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
title="MSN Search">MSN</a>.</p>

标题属性是可选的,链接可包含字母,数字和空格,大小写不敏感

I start my morning with a cup of coffee and
[The New York Times][NY Times].
[ny times]: http://www.nytimes.com/

Output:

<p>I start my morning with a cup of coffee and
<a href="http://www.nytimes.com/">The New York Times</a>.</p>

图片

图片语法类似于链接
Inline-style(title可选):

![alt text](/path/to/img.jpg "Title")

Reference-style:

![alt text][id]
[id]: /path/to/img.jpg "Title"

以上两个例子生成同样的输出:

<img src="/path/to/img.jpg" alt="alt text" title="Title" />

代码
在普通段落中,可用反引号包裹住代码引用。&, <和>会自动转义成HTML实体。

I strongly recommend against using any `<blink>` tags.
I wish SmartyPants used named entities like `&mdash;`
instead of decimal-encoded entites like `&#8212;`.

Output:

<p>I strongly recommend against using any

<code>&lt;blink&gt;</code> tags.</p>

<p>I wish SmartyPants used named entities like
<code>&amp;mdash;</code> instead of decimal-encoded
entites like <code>&amp;#8212;</code>.</p>

如果需要列举一整块预格式过的代码,将每行进行4个空格的缩进(一个tab)

Markdown:

If you want your page to validate under XHTML 1.0 Strict,
you've got to put paragraph tags in your blockquotes:
    <blockquote>
    <p>For example.</p>
    </blockquote>

Output:

<p>If you want your page to validate under XHTML 1.0 Strict,
you've got to put paragraph tags in your blockquotes:</p>

<pre><code>&lt;blockquote&gt;
    &lt;p&gt;For example.&lt;/p&gt;
&lt;/blockquote&gt;
</code></pre>
esnake0

esnake0

3 日志
6 标签
知乎
Links
  • 失护委
  • 建均笔记
  • 庹加林的个人博客
© 2016 esnake0
由 Hexo 强力驱动
主题 - NexT.Muse