Calabash-android

一、Calabash介绍

Calabash是一个开源的移动端UI自动化测试框架,支持android和IOS。

存在calabash-android和calabash-ios

二、Calabash-android介绍

Calabash-android是支持android的UI自动化测试框架,PC端使用了cucumber框架,通过http和json与模拟器和真机上安装的测试apk通信,测试apk调用robotium的方法来进行UI自动化测试,支持webview操作。

架构图详解:

1、 Features文件

feature文件是cucumber框架(http://cukes.info/)自带的通过描述性的语言来编写测试用例文件,也就是最终的测试用例代码文件。

类似的格式如下:

Feature: WebView feature

Scenario: Test WebView

1

2

3

4

5

Then I wait for 5 seconds

Then I take a picture

Then I press image button number 1

2、 测试步骤定义,Ruby类库

步骤定义也是cucumber框架中的一部分,比如

Then I press image button number 1 这句话表示测试的步骤是’点击当前页面的第一个image button 按钮’,

每一个feature文件中编写的步骤,都需要通过ruby编写方法进行定义

下面的ruby方法就是对于上面步骤操作的定义,calabash-android自带了一些定义,如果需要自己扩展功能的话,也需要相应的扩展定义文件。

Then /^I press image button number (d+)$/ do |buttonNumber|

performAction('press_image_button_number', buttonNumber)

end

performAction是calabash-android的ruby类库中的方法,最终会通过http+json的形式,把press_image_button_number和buttonNumber这两个参数,传入到calabash http server。

3、 测试APK

在calabash-android的源代码中会存在一个android测试程序,接收PC端发送过来的消息,

对于第二步中发送的步骤,在源代码中存在以下的代码

Execute方法接收传入的参数,并且调用robotium的API

Key方法是需要和ruby代码中的performAction第一个参数对应

public class PressImageButtonNumber implements Action {

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@Override

public Result execute(String... args) {

InstrumentationBackend.solo.clickOnImageButton(Integer.parseInt(args[0]) - 1);

return Result.successResult();

}

@Override

public String key() {

return "press_image_button_number";

}

}

4、 被测试APK

测试apk通过android自带的instrumentation和测试APK进行交互

三、calabash-android环境搭建

1、 安装Ruby

在这里下载Ruby1.8.7安装

2、 下载devkit文件

解压出来后进入解压文件,执行下面命令

ruby dk.rb init

ruby dk.rb review

ruby dk.rb install

不安装devkit的话可能会出现下面的错误信息

ERROR: Error installing cucumber:

The 'json' native gem requires installed build tools.

Please update your PATH to include build tools or download the DevKit

from 'http://rubyinstaller.org/downloads' and follow the instructions

3、 安装cucumber

gem install cucumber

4、 安装calabash-android

gem install calabash-android

如果再次安装还是出现类似下面的错误

1

2

3

ERROR: Error installing cucumber:

ERROR: Failed to build gem native extension.

是因为之前安装的一些软件修改了cmd.exe的配置,在注册表该了一些内容,导致出现问题,解决方案参考

四、calabash-android对于webview的支持

1、编写android被测应用

编写一个简单的webview控件的android应用程序webview.apk,里面有一个webview控件,加载的是http://m.youdao.com 有道搜索首页的内容 2、被测应用apk使用系统自带的key文件重签名 3、calabash-android gen 命令生成目录结构

里面会自动生成运行测试程序需要的文件 生成的文件结构如下

features

|_support

| |_app_installation_hooks.rb

| |_app_life_cycle_hooks.rb

| |_env.rb

| |_hooks.rb

|_step_definitions

| |_calabash_steps.rb

|_my_first.feature

calabash_steps.rb是cucumber可以使用的一些步骤语句,默认的语句见这里https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/canned_steps.md ,但是里面没有增加webview的,需要自己扩展,直接在calabash_steps.rb文件中加入下面的代码,添加对webview的支持,这里只是加入了几个,其它的有用到的后续再添加。 关于calabash_steps.rb文件中Then等语句的意思,可以学习cucumber框架http://cukes.info/

生成本来就存在的,用于加载默认的步骤

require 'calabash-android/calabash_steps'

用于在webview控件找到一个field,同时往里面输入内容

Then /^I enter "([^"]*)" into input field with id "([^"]*)"$/ do |text, css|

performAction('set_text','css',css,text)

end

Then /^I press the button with id "([^"]*)"$/ do | css|

performAction('click_by_selector',css)

end

Then /^I touch the button with id "([^"]*)"$/ do | css|

performAction('touch','css',css)

end

Then /^show the html source code$/ do

performAction('dump_body_html')

end

4、修改my_first.feature文件 自动生成的features目录下的.feature就是一些编写测试脚本的执行文件,我们需要修改默认的.feature文件 下面代码中测试的app中的webview是访问的http://m.youdao.com/

Feature: WebView feature

Scenario: Test WebView

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Then I wait for 10 seconds

Then I take a picture

#找到input控件名称为q的,输入值为test

Then I enter "test" into input field with id "input[name='q']"

Then I wait for 10 seconds

Then I take a picture

#找到input控件name为searchtype的click一下,这里就是点击搜索按钮

Then I press the button with id "input[name='searchtype']"

Then I wait for 10 seconds

Then I take a picture

5、运行测试

进入到calabash-android gen 命令生成的文件的跟目录下,运行calabash-android run webview.apk 则会自动执行my_first.feature文件,安装被测应用然后操作webview控件进行搜索

五、扩展calabash-android

Robotium中存在clickLongOnText方法,但是calabash-android中没有,这里我们自己扩展一下,扩展calabash-android的步骤如下

1、 从git下载源代码

首先下载安装git的客户端软件,然后执行下面命令获取源代码

2、 修改instrumentation-backend源代码

从git下载源代码后,在ruby-gemtest-server目录下存在instrumentation-backend目录,这个是一个android工程,也就是calabash-android的测试程序,导入到eclipse中。

我这边在sh.calaba.instrumentationbackend.actions.text包中新增了一个类clickLongOnText.java,代码如下

public class ClickLongOnText implements Action {

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@Override

public Result execute(String... args) {

InstrumentationBackend.solo.clickLongOnText(args[0]);

return Result.successResult();

}

@Override

public String key() {

return "click_long_on_text";

}

}

3、 编译修改后的源代码

编译之前需要把新增的代码添加到git库中才可以

Git add ***

Git commit –m “dddd”

Git push

然后进入到ruby-gem目录

Cd ruby-gem

Rake install

会自动把修改后的源代码安装到ruby库中,再次执行calabash-android命令会调用最新的代码。

4、 PC端的calabash_steps.rb文件中,添加扩展的步骤定义

Calabash_steps.rb文件,在之前calabash-android gen生成的目录文件的featuresstep_definitions目录下

这里是新增clickLongOnText操作的定义

Then /^I long press the text "([^"]*)"$/ do | css|

performAction('click_long_on_text',css)

end

5、编写features文件

Feature: WebView feature

Scenario: Test WebView

1

2

3

Then I wait for 20 seconds

Then I take a picture

Then I long press the text "CocoaChina"

5、 运行features文件

Calabash-android run ***.apk

运行之前最好把test_servers目录下的apk文件删除,保证会使用最新的测试代码,重新编译生成新的测试apk文件。

6、 其它

如果在编译最新的instrumentation-backend工程出现问题的话,有一个简单的方式验证你扩展的功能。

直接进入到你的ruby安装目录,我这里是ruby1.8.7

Ruby187librubygems1.8gems下面会有相应的calabash-android-***文件夹,直接把你修改或者新增的代码放入下面的test-serverinstrumentation-backend相应的目录下,再次运行calabash-android run ***.apk时也会加载最新新增的代码。

六、总结

本次在windows上针对calabash-android的调研,尝试了针对webview的支持,能够实现基本的webview操作,当前还存在的问题是

1、 features文件不支持中文,需要自己去扩展

2、 Drag操作直接通过robotium扩展过来在calabash上不能使用

3、 在windows上运行的时候好多次出现了连接断开的问题等不稳定情况

calabash-android教程,自动化测试工具_Calabash-android调研相关推荐

  1. Android 手机自动化测试工具有哪几种?

    Android 手机自动化测试工具有哪几种? 3 条评论 分享 按投票排序按时间排序 28 个回答 78赞同 反对,不会显示你的姓名 知乎用户,https://github.com/truebit 孙 ...

  2. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

  3. android 打开系统相册_这5款常用Android手机自动化测试工具你要收藏

    1.Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出.实际上该工 ...

  4. Android手机自动化测试工具介绍

    1. Monkey Runner 1.1 什么是Monkey Runner? Monkey Runner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和 ...

  5. Android手机自动化测试工具有哪些?

    1.Espresso是Google的开源自动化测试框架.相对于Robotium和UIAutomator,它的特点是规模更小.更简洁,API更加精确,编写测试代码简单,容易快速上手.因为是基于Instr ...

  6. android 手机自动化测试,Appium进行Android手机真机自动化测试

    前置条件: 安装JDK jdk 9使用appium还有点问题,最好使用jdk 8.我使用的是jdk 8u161. 下载前需要先同意协议 下载后双击安装,安装完成后需要手工设置环境变量: 右键单击&qu ...

  7. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  8. android m权限工具类,android M权限适配,简单工具类

    很简单没什么说的, 因为项目大了,不能轻易引入第三方库,同时确实也没必要为了适配下权限就引入一个库. 这里写了个处理权限的工具类(部分借鉴的,勿喷),不嫌弃的话拿去! 用法: 1.申请权限: Perm ...

  9. 拼写检查工具是android,拼写检查工具框架  |  Android 开发者  |  Android Developers...

    Android 平台提供了拼写检查工具框架,可让您在应用中实现和使用拼写检查功能.该框架是 Android 平台提供的文本服务 API 之一. 如需在您的应用中使用该框架,您需要创建一个特殊类型的 A ...

  10. android gps定位工具类,Android原生GPS和网络定位工具类

    在应用开发中我们常常需要网络获取位置的方法,这里做一个工具类的封装,使用的是Android原生定位,包含两种方式,一种是原生GPS一种是网络定位的封装实现: 工具类代码如下所示: package co ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装lua5.2
  2. [bat批处理文件] 压缩备份
  3. Linux 打通ssh无密码登录
  4. python 测试multiprocessing多进程
  5. 2018.07.30 巴别时代
  6. 你在直播上看不到的 Google IO
  7. [导入]代理猎手找大学代理
  8. Android 身份证号码校验
  9. 徐小湛概率论与数理统计课件_考研数学 徐小湛教授线性代数90讲
  10. 《持续集成实践指南》第3章 Gitlab基本配置与使用
  11. service mysql启动失败 提示unit not found 解决办法
  12. 博弈论中的MinMax搜索算法
  13. 鼎信通达MTG3000/MTG2000中继网关双重应用组网
  14. postman调试http接口挑战鉴权Authorization
  15. 如何备份思科cisco路由器配置
  16. python将输入的n个数进行大小排序:小到大和大到小
  17. win7上安装MySQL没提示密码_win7下安装mysql后修改密码
  18. 钙锌复合稳定剂-市场现状及未来发展趋势
  19. 大数据Spark入门案例5–统计广告点击数量排行Top3(scala版本)
  20. [Unity][2D][物理碰撞]同一层级碰撞体忽略碰撞

热门文章

  1. pandas使用select_dtypes函数移除dataframe中指定数据类型的数据列(exclude columns based on the data type in dataframe)
  2. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)
  3. plotly可视化绘制多图(multiplot)
  4. cufflinks基于dataframe数据绘制股票数据:直方图、时序图
  5. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表
  6. R使用Iris数据集构建SVM分类器
  7. 随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据、随机森林分类聚类(Kmeans)降维后的合成(append)数据
  8. 集成学习+ensemble learning
  9. FASTQ! BAM! VCF
  10. R中的概率分布函数及可视化