前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Functional Testing in iOS

Functional Testing in iOS

作者头像
100000798482
发布于 2018-08-20 09:06:42
发布于 2018-08-20 09:06:42
1K00
代码可运行
举报
文章被收录于专栏:一个番茄说一个番茄说
运行总次数:0
代码可运行
什么是Function Testing(摘自wikipedia

Functional testing is a quality assurance (QA) process and a type of black-box testing that bases its test cases on the specifications of the software component under test. Functions are tested by feeding them input and examining the output, and internal program structure is rarely considered (not like in white-box testing). Functional testing usually describes what the system does.

为什么需要Functional Testing

在讨论这个问题前先来一些对比:

  1. Functional Tesing vs Unit Testing Unit Testing关注点在于单独的代码片段,可信度较高且易扩展,是从开发者的视角来编写的。相对Functional Testing来说更快,你可以很快地为某段代码编写测试,执行速度快,能够更快的定位bug。但是它并不关心产品的业务逻辑,所以当单元测试通过并不能保证你的产品能够满足业务需求。
  2. Functional Testing vs Integration Testing Integration Testing主要用于不同module、system等之间的集成测试。Unit Testing用于保证每个代码片段能够独立地正确工作,但是并不能保证他们集成在一起能够正确工作。你需要集成测试将不同的功能模块集成在一起来进行测试。但是相对Functional Testing来说它还是不能保证某个feature能够得到预期的结果。

下面的Test Pyramid摘自Martin Fowler的 文章,越高层次产生的用户价值会更高且更慢,越低层次的产生的价值更低且更快,你所写的任何一行单元测试代码对于你的用户来说都是不可见的,他能感知到的只能通过UI来体现。可以看出我们需要很多的单元测试来保证我们的代码质量,这对开发人员来说是有巨大价值的,它能够帮开发人员快速发现且定位问题。

Test Pyramid

Funtional testing 属于UI测试,UI测试包含行为和外观。Functional testing从用户行为这个维度来保证了代码的质量。比如我需要对用户登录进行测试,我需要测试的点就可能涵盖用户点击了登录,需要看到界面上有相应的提示,成功之后需要到达主界面等。

BDD 与 Functional Testing

在敏捷实践中我们通过BDD(Behavior-driven development)来帮助我们完成Functional testing。BDD鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作,让其能够在一个共同的基础上达成共识。

BDD的框架很多,下面简单的罗列了一下:

框架

语言

Cucumber

Ruby

JBehave

Java

RBehave

Ruby

Specflow

C#

它们基本上都是基于Gherkin作为DSL在不同语言上的实现,让我们可以用自然语言去书写我们的代码。

用BDD来为某个feature书写测试通常包含以下几个部分:

  • 一个简单的Title
  • 对测试场景进行简单描述
  • 验收步骤以及预期行为的描述

在对验收步骤进行描述的时候通常会用到这样的格式"Given ... When ... Then ",各自的含义如下

  1. Given: 测试的前置条件
  2. When: 指定用户的行为
  3. Then: 验证结果

因此,如果用这样的格式去描述用户登录的场景就大概应该是:

  1. Given 用户打开登录界面
  2. When 用户填写账号和密码后点击登录按钮
  3. Then 用户登录成功来到主界面。

当然除了这几个关键字,可能你还会接触到And、But、Or等,使用它们可以增加代码的可读性。 通过自然语言的描述,业务专家、QA或者其他没有技术背景的人也可以很明确地明白这个测试是在干什么。

针对于iOS开发,苹果本身的XCTest不能很好的支持我们写Functional testing。它基于assert来完成测试,而很多时候assert所表达的含义也很难理解,同时它相对来说也比较难mock。所以我们可能还需要一些工具来方便我们写Functional Testing。

下面简单的列了一些iOS开发中能够用来UI Testing的框架:

框架

语言

支持平台

Calabash

Gherkin \ Ruby

iOS \ Android

EarlGrey

OC \ Swift

iOS

Frank

Gherkin \ Ruby

iOS \ MAC

KIF

OC \ Swift

iOS

UI Test

OC \ Swift

iOS

Calabash和Frank都是基于Cucumber,但是Calabash有着更丰富的特性,比如更丰富的内建步骤、更多的手势支持等,支持的平台也更加丰富,使用范围更广。

EarlyGrey是google推出的,内建同步机制,测试会在与UI进行交互前自动等待动画、网络请求等事件,当然它还是允许你手动处理同步。它会确保执行动作前,UI处于稳定的状态。EarlGrey基于XCTest,因此在Xcode中你可以很容易的建立一个测试用例类。当然在我写下这篇文章的时候它还存在一些问题,比如不支持3D Touch,不能和Address Sanitizer一起工作等,完整的列表在这里

具体使用哪种工具大家可以根据自己项目的实际情况来考虑,我目前的项目中使用的是Calabash。

使用Calabash-iOS写Functional Testing

要想在你的iOS工程中使用Calabash你需要一定的步骤安装依赖包以及配置工程,可以移步到Calabash查看具体的步骤。

一切都设置好了之后,工程目录下会多一个叫features的目录,顾名思义里面会包含你需要测试的feature。 比如我需要对登录进行测试。我在目录下新建一个叫做login.feature的文件,然后开始描述测试的用户场景:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Feature: User login flow

  Scenario: User can login with correct account number and password
    Given I can open the login page
    When I type "myname" into the account number input field
    And I type "mypassword" into the password input field
    And I click then login button
    Then I can login successful and see home page

另外,Calabash内建了很多的steps,但是不一定额能够完全满足你的需求,你可能还需要一些自定义的步骤,自定义的步骤都放在step_definitions里面。 比如我需要定义输入账号这个步骤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
When(/^I type "(.*?)" i into the account number input field$/) do |value|
  @login_page.touch_account_field
  keyboard_enter_text value
end

当描述好feature,并且定义好了步骤之后,这样一个用例测试就完成了,接下来你可以通过cucumber命令来执行它。

为了方便调试,Calabash还提供一个的命令行工具,通过命令calabash-ios console来使用。 比如你要查找出当前成为焦点的输入框,然后让它停止输入状态,你可以像下面这个样子

query "textField isFirstResponder:1", :resignFirstResponder

在这里支持的命令和在step定义里支持的命令是一样的,所以在你不确定的时候,可以通过命令行工具快速的检验一下。

最后

在CI中加入UI的自动化测试,可以的降低时间成本提升生产力。但是这并不是银弹,还得结合自身项目,用多少,怎么用都得仔细去考虑。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.08.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
译文: iOS Unit Testing and UI Testing Tutorial
原文: iOS Unit Testing and UI Testing Tutorial,作者:Audrey Tam。更新于2017年3月13日。以下为正文:
iOS Development
2019/02/14
1.4K0
LLT工作总结与Gherkin语法解析器简单应用
这几天产品线这里要搞LLT(Low level Test)重点工作,保障版本的高质量发布。工作当然包括一系列的规范、培训、编码、检视,不过具体看下来主要还是提取了下面的一些度量要点:
mythsman
2022/11/14
9370
LLT工作总结与Gherkin语法解析器简单应用
【腾讯 TMQ 】移动 APP 自动化测试框架对比
作者:赵丽娜 简介 移动 APP 的 UI 自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。 从分层测试的角度,自动化测试应该逐层进行。 最大量实现自动化测试的
腾讯移动品质中心TMQ
2017/03/06
6.6K0
使用Calabash进行Android和iOS UI测试
因为各种事,这篇本来属于上周的拖到了就今天,一篇关于移动端测试工具Calabash的文章,看着篇幅比较小,就接受了。本身精力不在Android和iOS开发,所以也就没按部就班的复原教程中的实例,仅当开阔视野了。
WindCoder
2018/09/19
2.1K0
使用Calabash进行Android和iOS UI测试
分层测试
自动化测试一直是测试领域桂冠上的明珠,几乎所有的测试团队都有建立团队的自动化。测试团队的自动化建设也被认为是团队提效的必经之路,但搭建和使用自动化路但路却并非一帆风顺。搭建自动化但时候有很多框架可以选用,合理但选择适合该团队的框架可以事半功倍,同时选择了框架之后就要受制于框架。使用自动化很多时候因为学习以及维护成本高,让初衷是提效为目的的自动化,成为了加重测试工作量之殇。
luxididi
2020/06/14
5.8K1
史上最全的 iOS 各种测试工具集锦!
随着移动互联网的兴起,APP 测试的越来越被重视!Android 系统因为自己的开源性,测试工具和测试方法比较广为流传,但是 iOS 系统的私密性,导致很多测试的执行都有点麻烦。
测试开发技术
2024/03/22
6900
史上最全的 iOS 各种测试工具集锦!
Cucumber测试实践
来源:https://cucumber.io/docs/guides/overview/
ThoughtWorks
2022/02/16
9550
Cucumber测试实践
两款iOS和Android都通用的开源自动化测试工具
自动化测试在产品测试上有着非常重要的作用。实现测试自动化有多种积极的方式,包括最大限度地减少测试执行时间;在关键的发布阶段,用更少的时间确保更大的覆盖范围;在产品开发阶段,可靠又重复性地运行以确保没有
非著名程序员
2018/02/02
2.9K0
两款iOS和Android都通用的开源自动化测试工具
Android 平台实现 CI
在TW技术雷达上,有一个很重要的趋势,就是把在传统技术领域已经成熟的技术实践,比如持续集成,推广到新兴技术领域,比如移动开发和前端开发。 北京办公室的朱傲这次用自己的实践告诉我们如何在Android这
ThoughtWorks
2018/04/18
1.8K0
Android 平台实现 CI
客户端自动化测试研究
背景 测试作为质量保证极其重要的一环,在移动App开发流程中起到非常关键的作用。从开发工程师到测试工程师,人人都应具备良好的测试意识,将隐患和风险在上线之前找出并解决,可以有效的减少线上事故。 美团和大众点评App作为美团点评平台的主要入口,支持承载着美团点评各大业务。其中美团点评境外度假业务主要包括了出境游相关业务以及所有的境外城市站,也是美团点评非常看重和大力发展的业务线。为了保证质量,需要进行各项测试:冒烟测试[1]、功能测试、集成测试、专项性能测试,回归测试[2]。其中冒烟测试和回归测试大多由开发自
美团技术团队
2018/03/13
3.3K0
客户端自动化测试研究
软件测试|iOS 自动化测试——技术方案、环境配置
移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实践。
霍格沃兹测试开发Muller老师
2022/12/29
1.5K0
你不知道的Cypress系列(1) --鸡肋的BDD
Behavioural Driven Development (BDD)是从TDD发展来的(什么,TDD你都不知道?!),它通过自然语言定义系统行为,以功能使用者的角度,编写需求场景,且这些行为描述可以直接形成需求文档,同时也是测试标准。
iTesting
2020/12/15
1.6K0
你不知道的Cypress系列(1) --鸡肋的BDD
QA应该更新的测试工具
视觉感知测试,对于很多 QA,包括我在 2013 以前对于它的认知都是手动测试领域的一个成员。在这个 Web 系统爆炸的年代,Web UI 界面布局测试,多浏览器测试,CSS 的 refactor 等都成为了 Web UI 测试的痛中之痛,特别是大型 Web 应用的功能回归测试量太大,从而导致很多时候根本无法完成,所以很少会有团队去做全方位的 UI 界面布局回归测试,特别是对于使用 Agile 流程开发的团队就更加困难。
Criss@陈磊
2020/04/26
1.7K0
移动开发流水线建立以及自动化测试
工业时代流水线的发明将生产任务的效率大大提升。同样,在软件开发过程中流水线的建立也能帮助我们更好的产出、提升效率。
100000798482
2018/08/20
1.3K0
移动开发流水线建立以及自动化测试
iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践
移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实践。
霍格沃兹测试开发
2022/05/06
1.4K0
如何高效使用Gherkin
时间回到2022年,我参与了一个使用了Flutter技术构建的Web前端项目。在这个项目上,我们小组的目标是实施Flutter前端自动化测试。
ThoughtWorks
2023/09/18
3370
如何高效使用Gherkin
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本。它使用一种名为Gherkin的特定语言来描述应用程序的行为,这种语言非常接近自然语言,使得非技术人员也能够理解和参与测试。
测试开发技术
2024/06/25
3670
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
行为驱动开发:一篇文章带你用 Python 玩转 BDD
相信大部分的人都听说过 BDD,即:行为驱动开发,但并未涉及到它的使用方和项目实战。
AirPython
2020/06/08
3.1K1
如何在python下建立cucumber项目
Gherkin语言使用的是主要英文关键词Scenario、Given、when 、And、Then和But等,这些关键词可以转换成中文关键词,场景、假如、当、那么等。根据用户故事,需求人员或测试人员使用Gherkin语言编写好测试场景的每个步骤
顾翔
2024/09/10
1040
如何在python下建立cucumber项目
干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
Leo Li,携程高级软件工程师,负责度假 BDD-Test UI 自动化测试框架的研发、维护和迭代等工作。
携程技术
2020/06/24
2.7K0
干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
相关推荐
译文: iOS Unit Testing and UI Testing Tutorial
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文