Calabash 中文 Win7 下成功安装 calabash-android 步骤

超爱fitnesse · 2014年08月21日 · 1994 次阅读
本帖已被设为精华帖!

Calabash-android 是支持 android 的 UI 自动化测试框架,网上看见很多同学说,安装 calabash 比较费劲,特别是 Windows 下安装,也没有一个详细的安装手册可供参考。正好,今天在 Windows 7 上安装 calabash-android 成功,忍不住要分享一下。

我为什么要特别在标题中指出中文 Win7?

因为我第一次在英文 Win7 下没碰到任何问题,第二次在中文 Win7 下安装碰到两个大问题,但都被我求助百度解决了。

第一个问题:中文 Win7 下不认识手机设备,第一台英文 Win7 下已经有人安装了豌豆荚。

第二个问题:中文 Win7 下运行 calabash-android,报 GBK 错误。

calabash 简介:

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

安装 ruby1.9.3

calabash-android 的 git 网址: https://github.com/calabash/calabash-android

进入 Installation: https://github.com/calabash/calabash-android/blob/master/documentation/installation.md

因为要在 Windows 下安装,所以按照指示进入: http://rubyinstaller.org/
点击红色的 Download 图标,进入: http://rubyinstaller.org/downloads/

下载ruby

Ruby2.0 据说不兼容旧版本,所以下载稳定版 Ruby 1.9.3-p545.7z 解压到 D:\下

把 ruby 的执行目录 D:\ruby-1.9.3-p545-i386-mingw32\bin,加入到环境变量 Path

运行命令 ruby -v,看到如下结果,表示 ruby 安装成功

C:\Users\asus>ruby -v
ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

安装 JDK 7u65

安装 JDK 网上有很多教程,以下简略介绍。

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

jdk-7u65-windows-x64.exe

安装,并设置环境变量:

JAVA_HOME=C:\Program Files\Java\jdk1.7.0_65
Path 添加内容: ";%JAVA_HOME%\bin;%JAVA_HOME%..\jre\bin"

启动命令行工具 cmd.exe,输入:

C:\Users\asus>javac -version
javac 1.7.0_65

看到上述结果,说明 jdk 已正确安装。

安装 Android SDK

http://developer.android.com/sdk/index.html 下载适用于 Windows 的 SDK

google 的网站,国内正常访问不了了。

幸好有个中国好码农整理了一个最新版 Android SDK 下载网站:

http://www.androiddevtools.cn/

我现在的是 ADT Bundle > 23.0.2 > Windows > 64 位

因为我的 Windows7 已经安装了 64 位的 JDK,所以必须安装 64 位的 Android SDK(主要是 64 位的 Eclipse)

在目录 D:\adt-bundle-windows-x86_64-20140702\eclipse 下双击文件 eclipse.exe

看到 Android Develop Kit 启动页:

adt启动页

设置workspace

设置环境变量:
ANDROID_HOME=D:\adt-bundle-windows-x86_64-20140702\sdk

安装 Ant-1.9.4

网址:http://ant.apache.org/bindownload.cgi

下载 apache-ant-1.9.4-bin.zip

解压到 D:\下,

设置环境变量:

ANT_HOME=D:\apache-ant-1.9.4
Path 添加内容: ";%ANT_HOME%\bin"

启动命令行工具 cmd.exe,输入:

C:\Users\asus>ant
Buildfile: build.xml does not exist!
Build failed

看到上述结果,说明 ant 已正确安装。

gem 命令安装 calabash-android

设置 gem 的仓库为 taobao

C:\Users\asus>gem sources -l
*** CURRENT SOURCES ***

http://rubygems.org/

C:\Users\asus>gem sources --remove http://rubygems.org/
source https://rubygems.org/ not present in cache

C:\Users\asus>gem sources -a http://ruby.taobao.org/
http://ruby.taobao.org/ added to sources

C:\Users\asus>gem sources -l
*** CURRENT SOURCES ***

http://ruby.taobao.org/

用 gem 命令安装 calabash-android

C:\Users\asus>gem install calabash-android
...
Installing RDoc documentation for escape-0.0.4...
Installing RDoc documentation for calabash-android-0.5.1...

C:\Users\asus>calabash-android version
0.5.1

下载 calabash-android-demoapp

https://github.com/calabash/calabash-android-demoapp

点击 Download ZIP 下载 calabash-android-demoapp-master.zip,并解压到 D:\

ADT 中导入并运行 calabash-android-demoapp

导入demoapp

导入android code
选择: D:\calabash-android-demoapp-master

导入完成

安装手机驱动

把手机通过 USB 线接到电脑上,手机上确保打开 “USB 调试”
如果电脑屏幕右下角提示,设备驱动已正确安装,请看下一步。

如果电脑屏幕右下角提示,设备驱动安装失败:
手机不认识

需要到网站 http://www.drivergenius.com/ 下载并安装驱动精灵标准版,只要打开驱动精灵,就会引导你安装手机驱动。

安装驱动

驱动安装成功后:

手机认识

接下去在 ADT 中运行 Run > Run As > Android Application:
选择目标手机

点击"OK"按钮,ADT 就会上传 AndroidDemoProject.apk 到手机,并启动应用,看到 “Hello World, AndroidDemoProject!”

apk截图

使用 calabash-android 运行 AndroidDemoProject.apk

打开 cmd,进入 D:\calabash-android-demoapp-master\calabash 目录,运行:

calabash-android run D:\calabash-android-demoapp-master\bin\AndroidDemoProject.apk

运行失败

主要错误信息:helpers.rb:105:in `scan': invalid byte sequence in GBK

可是我在英文 Windows 上运行正确啊,一定是英文系统和中文系统的缺省编码问题:

cmd > 属性 > 选项 > 当前代码页:936 简体中文 GBK
gbk

照着 http://blog.sina.com.cn/s/blog_628e2ab30101ajcg.html 的解决方案,把 cmd 的中文编码设置成 UTF-8

cmd 中输入:chcp 65001

after 65001

cmd > 属性 > 选项 > 当前代码页:65001 UTF-8

UTF-8

再次运行 calabash-android:

运行正确

calabash-android 打印彩色结果

上面的测试结果提醒:WARNING: You must use ANSICON 1.31 or higher

https://github.com/adoxa/ansicon/ 下载 ansicon 并启动,
同样要输入 chcp 65001
再次运行 calabash-android:

彩色测试结果

大功告成!

建立 ansicon 快捷链接

接下去好人做到底,在桌面上建一个 cmd 快捷链接,点击后直接进入 UTF-8 编码的 ansicon 控制台

确保 ansicon.exe 放置在 Path 能找到的目录下,比如,我放在 ruby 的 bin 目录下:

ansicon位置

桌面上建一个 cmd 快捷链接:

ansicon图标

ansicon快捷

注意,快捷链接的目标:

%windir%\system32\cmd.exe /k chcp 65001&&ansicon

打开该快捷链接后:

ansicon启动后

calabash-android 输出 html 报告文件

calabash-android run ../bin/AndroidDemoProject.apk --format html --out=report.html

在此输入图片描述

在此输入图片描述

关于 GBK 编码问题的后续补充

  1. 我回去看了英文 Win7 和的 cmd.exe 的编码,也是 GBK,但是没有出现过 “invalid byte sequence in GBK ” 的问题
  2. 我在中文 Win7 上用 chcp 65001 设置成 UTF-8,并测试成功后,再尝试直接 cmd.exe/ansicon.exe/powershell.exe 保持 GBK 编码的情况下,直接运行 calabash,再也没有报过 “invalid byte sequence in GBK ” 的问题,难道第一次正确运行后,自动修改了什么配置吗?
  3. 在中文 Win7 上用 chcp 65001 设置成 UTF-8 后,如果 calabash 的脚本中包含中文,运行 calabash 时不能打印出中文内容。
  4. 在中文 Win7 的 GBK 编码的命令行下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。
  5. 在英文 Win7 的 GBK 编码的命令行下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。
  6. 在 Ubuntu Linux 的控制台下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。

算了,不去找原因了,记住就是了。

所以,建立 calabash 测试环境的容易程度:

Linux > 英文 Windows > 中文 Windows

共收到 17 条回复 时间 点赞

详细,精品~

看见楼主写的这篇文章我有准备在 windows 下试试了,可是换源之后一直报错,不知楼主有没有遇到:
D:/ruby-1.9.3-p545-i386-mingw32/lib/ruby/site_ruby/1.9.1/rubygems/custom_require
.rb:36:in `require': 126: 找不到指定的模块。 - D:/ruby-1.9.3-p545-i386-mingw32
/lib/ruby/1.9.1/i386-mingw32/zlib.so (LoadError)
我就是按照楼主的方法一步一步来的,但是。。。。

#4 楼 @doufuli010
没碰到过,D:/ruby-1.9.3-p545-i386-mingw32
/lib/ruby/1.9.1/i386-mingw32/zlib.so 在不在?

@htmlbiji 嗯 那个文件是在的,但是我刚才又试了下,又成功了,我在想是不是源的问题或者是我这边网络的问题~现在环境已经搭建好了~可以运行了~非常感谢楼主~

#6 楼 @doufuli010
在 win 下测试,可以:

  1. 在家接私活
  2. 边测试边写博 哈哈!

补充两点待测 apk 的要求:
1.未签名的
2.有访问网络的权限,这是 AndroidDemoApk 的唯一权限设置,可以去 xml 文件中确认一下

@htmlbiji 恩恩 不错啊 自己受益 还给大家解决的问题 大爱~

关于 GBK 编码问题的后续补充

  1. 我回去看了英文 Win7 和的 cmd.exe 的编码,也是 GBK,但是没有出现过 “invalid byte sequence in GBK ” 的问题
  2. 我在中文 Win7 上用 chcp 65001 设置成 UTF-8,并测试成功后,再尝试直接 cmd.exe/ansicon.exe/powershell.exe 保持 GBK 编码的情况下,直接运行 calabash,再也没有报过 “invalid byte sequence in GBK ” 的问题,难道第一次正确运行后,自动修改了什么配置吗?
  3. 在中文 Win7 上用 chcp 65001 设置成 UTF-8 后,如果 calabash 的脚本中包含中文,运行 calabash 时不能打印出中文内容。
  4. 在中文 Win7 的 GBK 编码的命令行下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。
  5. 在英文 Win7 的 GBK 编码的命令行下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。
  6. 在 Ubuntu Linux 的控制台下,如果 calabash 的脚本中包含中文,运行 calabash 时能打印出中文内容。

算了,不去找原因了,记住就是了。

所以,建立 calabash 测试环境的容易程度:

Linux > 英文 Windows > 中文 Windows

你下载的 Ruby 1.9.3-p545.7z 是 64 位的还是 32 位的? 感觉下面描述的 jdk 是 64 位的

文档中的安装过程中是不是需要安装 devkit,因为我今天执行了一下,发现没有安装 devkit 的时候总是报错:
Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads' and follow the instructions
at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
所以我在想是不是文档中缺少一步

#11 楼 @doufuli010
ruby 1.9.3 只有 32 位的,而且不依赖 jre 或 jdk

#12 楼 @doufuli010
我没有安装 devkit,只安装了 7z。并且没碰到你说的问题。

calabash 除了输出 html 的 report 以外,还有其他格式的报告么

cucumber --help
输出的-f 有所有格式,包括 json, junit

匿名 #17 · 2017年12月07日
超爱fitnesse 回复

请问下,我执行的过程中,报出:
Feature: No space left on device @ io_write - (Errno::ENOSPC)
E:/Program Files/Ruby22-x64/lib/ruby/gems/2.2.0/gems/cucumber-3.1.0/lib/cucumber
/formatter/pretty.rb:72:in write'
E:/Program Files/Ruby22-x64/lib/ruby/gems/2.2.0/gems/cucumber-3.1.0/lib/cucumber
/formatter/pretty.rb:72:in
puts'
E:/Program Files/Ruby22-x64/lib/ruby/gems/2.2.0/gems/cucumber-3.1.0/lib/cucumber
/formatter/pretty.rb:72:in feature_name'
E:/Program Files/Ruby22-x64/lib/ruby/gems/2.2.0/gems/cucumber-3.1.0/lib/cucumber
/formatter/ignore_missing_messages.rb:11:in
method_missing'
E:/Program Files/Ruby22-x64/lib/ruby/gems/2.2.0/gems/cucumber-3.1.0/lib/cucumber
这样的异常,楼主遇到过吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册