用于React Native应用的不同的自动化测试框架

发表于:2016-9-19 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:众成翻译    来源:51Testing软件测试网采编

  下边的例子说明了我们的应用和UI组件(如单选按钮,文本框和按钮等)是如何在Calabash中实现的:
  Feature: Answer the question feature
  Scenario: As a valid user, I want to answer app question,
  I wait for text "What is the best way to test application on a hundred devices?"
  Then I press radio button 0
  Then I press radio button 1
  Then I press radio button 2
  Then I enter text "Simple Test" into field with id "editText1"
  Then I press view with id "Button1"
  所有的步骤通常下是以如下关键字(如 given , then , when , and 或者 but )之一开始的,但是,这并不是必须的,它们可以用 * 来替代。
  Calabash同时也广泛被非开发者使用,由于它容易理解的语言和逻辑使得它可以被用于产品规格和文档。最终,功能和场景都被包裹在Ruby代码中。
  安装Calabash 并开始使用它是很容易的。如果你已经安装了 Bundler 和Ruby,仅仅需要在控制台中输入下边几行代码Calabash就可以很快被安装。
  $ gem install calabash-android
  $ gem install calabash-cucumber
  这段代码负责安装Calabash-Android和Calabash-iOS,然后你的自动化测试之旅就可以开始啦。
  特定平台框架
  当提到Android和iOS应用的自动化测试时,使用特定平台框架比跨平台框架有一些优势,比如,一些 框架被构建的非常贴近于SDKs和IDEs ,它们在应用程序被开发的时候就可以使用。接下来看一下这类型框架用于Android和ios中的例子。
  Robotium和ExtSolo(Android)
  Robotium 是用于原生和混合Android应用开发的第一批测试框架之一。使用Robotium创建的UI测试可以对Android应用进行跨越和操作多个Android活动的功能、系统和用户接收测试。实际上,Robotium从早期的API 8版本就开始支持了。
  最近,Robotium被提供更多有用功能测试的 ExtSolo库 扩展。
  任何显示分辨率下的x和y的点击自动缩放;
  多路径拖拽;
  在测试失败的时候自动屏幕截图;
  模拟定位(GPS坐标);
  Android设备语言的更改;
  Wi-Fi连接的控制;
  由于使用Java,所以测试可以很容易的使用Java SDK和IDE进行构建。在这个例子中最基本的函数就是 findViewById ,这个函数查找使用 id 属性来标识的视图。UI元素可以使用 name 、 class 或者其他属性来进行标识。使用 id 属性来标识的代码示例如下:
  solo.clickOnView(solo.findViewById("com.example.app:id/radio0"));
  solo.clickOnView(solo.findViewById("com.example.app:id/radio1"));
  solo.clickOnView(solo.findViewById("com.example.app:id/radio2"));
  solo.enterText((EditText) solo.findViewById("com.example.app:id/editText1"), "Simple Test");
  solo.clickOnView(solo.findViewById("com.example.app:id/button1"));
  这里的Robotium基于 id 、描述和其他特征去尝试定位UI元素。不幸的是,这并不总是最好的方式而且在webview组件中也未必可以使用。但是,借助于ExtSolo库,用户可以在随分辨率缩放的UI元素上定义点击和其他交互。而且,硬编码坐标也是可能的,它们可以在显示分辨率更改的时候进行缩放。
  如果你正在使用Robotium,那么开始使用Robotium ExtSolo是容易且不费力的,仅仅需要将仓库复制为你自己的然后构建库:
  $ git clone https://github.com/bitbar/robotium-extensions
  $ ant clean instrument
  然后将最近构建的 .jar 文件放在你安卓工作目录的 libs 文件夹下同时确保你的工程是和它链在一起的。此时,所有的额外功能和服务都已经存在于你的工作空间了。
  Espresso (Android)
  Espresso 测试框架提供API,这些API在安卓应用中用于模拟用户接口的UI测试。 Espresso API 是轻量的,提供三个主要的组件 viewMatchers , viewActions 和 viewAssertions 。
  Espresso的美丽之处在于它提供了测试方法和正在测试的UI元素的自动化同步。例如,当测试脚本需要按下一个按钮但是这个按钮在屏幕上还不可见的时候,它会一直等待直到按钮被按下,这就使得测试执行非常快,因为没有测试脚本需要包含睡眠或者等待指令。同时,开发组也不需要额外的逻辑去操作时间相关的问题。
  // R class ID identifier for radio buttons
  onView(withId(R.id.radio0)).perform(click());
  onView(withId(R.id.radio1)).perform(click());
  onView(withId(R.id.radio2)).perform(click());
  onView(withId(R.id.EditText1)).perform(click());
  // Instead of R, we use getIdentifier
  onView(withId(getInstrumentation().getTargetContext().getResources()
  .getIdentifier("com.example.app:id/EditText1", null, null))).perform((typeText("Simple Test")));
  onView(withId(getInstrumentation().getTargetContext().getResources()
  .getIdentifier("com.example.app:id/Button1", null, null))).perform(click());
  Espresso有着它自身的利弊,由于轻量化的API,对于开发者来说没有太多的额外的服务和功能、例如,你不得不使用替代的方式去截图、操作测试、输出测试结果等。
  在Google IO 2016 Google把Espresso当作Android Studio中一个集成的部分来介绍。尽管很多功能还不可用,但是它也值得无限期待。
  XCTest 和 KIF (iOS)
  XCTest 紧耦合于Xcode,但是它在真实的iOS设备或者模拟器上边都是可用的。XCTest允许开发者编写任何级别的组件测试,同时也提供了一个具有UI测试能力的框架。XCTest测试类属于 XCTestCase 的子类。对于iOS开发者来说,使用XCTest编写任何测试都是很容易的,因为XCTest对于Objective-C和Swift都是完全兼容的。
  KIF (“keep it functional”的简称)是一个iOS集成测试框架,该框架和XCTest紧密相关同时也与XCTest测试目标相同。KIF测试能够直接在XCTestCase或者其任何子类中直接执行。KIF允许通过可访问的属性(操作系统提供给有视觉障碍的人)来进行iOS应用的简易自动化,
  下面可以看到UI元素是如何看起来像Objective-C:
  - (void)testClicksOnRadioButtons {
  [tester tapViewWithAccessibilityLabel:@”Radio1”];
  [tester tapViewWithAccessibilityLabel:@”Radio2”];
  [tester tapViewWithAccessibilityLabel:@”Radio3”];
  [tester enterText:@”Simple Test”
  intoViewWithAccessibilityLabel:@”editText1”];
  [tester tapViewWithAccessibilityLabel:@”Answer”];
  }
  同样的,使用Swift时测试也是如下般简单:
  testClicksOnRadioButtons() {
  let app = XCUIApplication()
  app.radiobutton[0].tap()
  app.radiobutton[1].tap()
  app.radiobutton[2].tap()
  app.staticTexts[“Simple Test”]
  app.button[0].tap()
  }
  注意:为了全部的功能,这段高级的伪代码还需要额外的代码。如果你正在查找关于XCTest和使用XCode测试能力的更多信息, Apple有你想要的 .
  EarlGrey (iOS)
  就在今年的早些时候, 谷歌开源了 它的功能性iOS应用测试框架,命名为EarlGrey。在谷歌内部使用中,它已经在原生iOS应用(YouTube, Google Calendar, Google Photos, Google Play Music等)上已经运行的相对良好同时也引发了很大的兴趣。为了 开始使用EarlGrey ,你需要安装Xcode环境和具备iOS开发知识。
  EarlGrey和Espresso(没错,都是由谷歌开发)有很多相似之处,它们的特性使得两个框架都快速的运行和执行测试。与Espresso相似,EarlGrey在尝试与UI进行交互之前会自动的等待事件(动画、网络请求等),这就使得开发者不比担心睡眠或者等待指令而很容易的编写测试。另外,由于代码中提供了测试步骤的过程描述所以其本身也是非常容易维护的。
  EarlGrey也包含着可以从 GREYMatchers 类中获得的匹配器。文档推荐使用具有可访问参数的UI元素。为了识别UI元素,开发者可以使用 grey_accessibilityID() 或者 grey_accessibilityLabel() 。
- (void)testBasicSelectionAndAction {
[[EarlGrey selectElementWithMatcher::grey_accessibilityID(@"ClickHere")]
performAction:grey_tap()];
// Example of long press with EarlGrey matchers
- (void)testLongPress {
[[EarlGrey selectElementWithMatcher::grey_accessibilityLabel(@"Box")]
performAction:grey_longPressWithDuration(0.5f)];
[[EarlGrey selectElementWithMatcher::grey_accessibilityLabel(@"One Long Press")]
assertWithMatcher:grey_sufficientlyVisible()];
// Example of multi-select, visible click on items
- (void)testCollectionMatchers {
id visibleSendButtonMatcher =
grey_allOf(grey_accessibilityID(@"Box"), grey_sufficientlyVisible(), nil);
[[EarlGrey selectElementWithMatcher:visibleSendButtonMatcher]
performAction:grey_tap()];
}
  和XCTest相似,这里单选按钮的实现不是简单的,为了能够点击和用户交互,用于XCTest的按钮都是被定义为一个ios支持的UI元素。
  结论
  我们已经覆盖到了React Native应用的基础,同时展示了它们是如何采用不同的方法和框架进行测试的。所有的都会变化的很快,但是在功能性UI级别的移动自动化测试的行业标准将会在React Native上起作用,就像它们在其他原生应用上的作用一样。我们所覆盖到的自动化测试框架已经广泛应用于原生移动应用、混合应用、移动web和React Native应用中。
  总之,决定构建移动应用的编程语言是没什么的,因为它们对自动化测试框架是没有任何影响的(译者注:编程语言的选择不会对测试造成任何影响)。正如上述讨论的,很多功能强大的自动化测试框架如今都是可用的了,打包为一个APK或者IPA时React Native应用将和它们一起运行。
  你正在使用什么工具来进行React Native的测试呢?在下边提出评论吧。
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号