使用 Calabash 进行 Android 和 iOS UI 测试
已发表: 2022-03-11测试是任何移动应用程序开发过程的重要组成部分。 无论您是否使此类测试自动化,没有一个理智的开发人员认为他们的工作已经完成,除非他们已经测试了他们的应用程序。
一个经过良好测试的应用程序通常会经历多个测试步骤:单元测试、集成测试、验收测试等。 随着您的应用程序的增长,测试的重要性增加,测试中的自动化成为必要。
虽然其他平台(例如 Web)在测试机制和框架方面取得了显着进步,但移动领域并没有落后。 在本文中,您将了解如何使用 Calabash 使用简单的英语说明来自动化您的 Android 和 iOS 应用程序的 UI,并使验收测试尽可能轻松。
什么是 UI 测试?
如果您一直在手动测试您的应用程序,那么您可能会浪费大量时间一遍又一遍地执行相同的任务。 您对代码进行一些更改,构建应用程序,在设备或模拟器中运行它,然后调整应用程序以确定它是否按预期工作。
通过自动化 UI 测试,您可以自动执行相同的手动步骤。 如果您的应用程序大小合适,这可以节省您的大量时间,并且还可以使您的应用程序免于被令人尴尬的错误所困扰,尤其是回归错误。
“这听起来很棒,”你说,但你如何为你的 Android 或 iOS 应用程序做到这一点?
适用于 Android 和 iOS 的 UI 测试框架
如果您阅读 Android 和 iOS 的官方文档,他们建议您在其官方 IDE 中编写和运行 UI 测试。 对于 Android,它是 Android Studio,对于 iOS,它是 Xcode。
官方文档甚至推荐了特定的测试框架。 官方 Android 文档涵盖了有关 Espresso(Android UI 测试框架)的一些主题。 同样,Apple 建议使用 XCTest 框架。
如果你打算认真地进行 UI 测试,你可能会遵循这些建议,这是有道理的,因为 Espresso 由 Google 维护并且是 Android 支持存储库的一部分。 Espresso 很可能会支持 Google 未来为 Android 推出的所有新功能。 你可以对 iOS 的 XCTest 框架说同样的话。
然而,值得记住的是,尽管自动化测试有很多好处,但许多开发人员根本不编写它们。
每个深入了解测试自动化的开发人员都知道这是一个好主意。 但是,在坐下来编写这些测试时,许多开发人员开始质疑是否值得他们花时间,因为事实证明,手动“触摸按钮”比编写“触摸这个按钮”的代码要快得多自动地。 有时,急切等待试用该应用程序的客户和经理也无济于事。
许多开发人员此时决定继续开发应用程序的新功能,而不是为现有功能编写自动化 UI 测试。
随着应用程序的增长,每次更新应用程序时手动“触摸这些按钮”变得越来越耗时。
但是,如果有一个框架可以让 UI 测试更容易,并且没有给你任何借口不为你的应用程序编写 UI 测试呢?
遇见葫芦。
Calabash:移动应用程序的自动验收测试
大约一年前,我开始寻找一个对非软件开发人员来说易于使用的测试框架。 而且,那是我找到葫芦的时候。
这个由 Xamarin 团队开发和维护的开源测试框架适用于 Android 和 iOS。 它允许您为移动应用程序编写和执行自动化验收测试。
验收测试通常是在确定您的应用程序是否满足业务要求的系统测试之后进行的。 鉴于它在 UI 级别上运行,这很适合我们选择的 UI 测试自动化框架。
Calabash 可以像 Espresso 或 XCTest 一样与您的应用程序进行交互。 然而,Calabash 之所以成为这里的绝佳选择,是因为它支持 Cucumber。
Cucumber 是一个可以运行用简单英语编写的自动化测试的工具(如果你愿意,你可以调整它以使用任何其他简单的语言)。 因此,要在 Cucumber 上编写自动化测试,测试人员不需要了解 Java、Objective-C 或任何其他编程语言。
是什么让葫芦滴答作响?
Calabash 框架由可以与 Android 和 iOS 应用程序交互的库组成。 它可以在真实设备上运行。 所以它可以做测试人员手动做的事情。
GitHub 上有两个不同的项目使 Calabash 成为可能:
葫芦-android - 适用于 Android
葫芦-ios - 适用于 iOS
Calabash 可以使用任何基于 Ruby 的测试框架。 在本文中,我们将介绍 Cucumber - 为 Calabash 编写测试的最流行和最方便的方法。
在继续之前,如果您想按照本文其余部分的操作尝试 Calabash,请确保您的计算机上安装了 Ruby。 您可以在此处找到详细的安装说明。
接下来,按照上面的 GitHub 链接为您喜欢的平台安装 Calabash。
在 Calabash 上编写你的第一个测试
在 Calabash 上编写测试非常容易。 让我们看看一个简单的 iOS 应用测试是什么样子的:
Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"
在这里,一个应用程序正在使用不正确的用户名和密码进行测试,然后正在使用正确的用户名和密码进行测试。 测试预计应用程序在第一种情况下登录失败,但在第二种情况下成功。

您可以根据需要创建任意数量的场景,您只需将步骤/说明分解为简单的英文句子即可。 就像你会写一个故事一样!
任何了解行为驱动开发 (BDD) 的人都会发现自己对此很熟悉。
葫芦如何工作?
要查看测试人员使用的步骤背后发生了什么,您可以在 GitHub 上打开项目并检查以下文件:
calabash-cucumber/features/step_definitions/calabash_steps.rb
让我们看一下以下步骤的定义:
When I enter "testeruser" into the "Username" field
Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
这段 Ruby 代码小片段查找特定字段,触摸它,等待键盘出现,从text_to_type
变量中键入文本,并在切换到下一步之前稍等片刻。
该步骤的第一个词可以是“Given”、“When”、“Then”、“And”或“But”。 您将使用什么关键字并不重要。 您可以使用它们中的任何一个来使故事更清晰。
如何添加自定义步骤
如果您需要一个尚未在 Calabash 中实现的步骤,您可以自己编写。 语法与已经预定义的步骤中的语法完全相同。
例如,如果测试人员需要通过占位符而不是字段名来访问输入字段:
Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
此步骤定义与前一个步骤定义大致相同,但您通过占位符而不是字段名称访问字段。 鉴于您的应用程序的外观,这可能会使测试人员的工作变得更加容易。
这对开发人员来说也很容易。 开发人员执行该步骤一次,然后测试人员在需要时使用它。 此外,您不需要了解很多 Ruby 来实现您自己的自定义步骤。
您可以在此处找到可以使用的 Ruby 函数:
http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber
Xamarin 测试云
测试移动应用程序时还有一个挑战。 您应该在尽可能多的设备上测试它们,因为有太多的设备和太多的操作系统版本。
这是 Xamarin 测试云有很大帮助的地方。 云中大约有 2,000 台真实设备,好消息是它支持 Calabash 测试。
相同的 Calabash 测试通过使您免于重复工作来帮助您节省时间,现在可以用于在许多真实设备上测试您的应用程序。
开始编写 UI 测试
无论 Calabash 是否是您的应用程序所需的测试解决方案,以及它带来的优势,在为您的移动应用程序编写自动化 UI 测试时,它都没有任何借口。 如果您的应用程序严重依赖某些设备功能(例如,相机),Calabash 可能会失败,但它仍然使大多数应用程序的编写测试变得更容易。