Appium的使用

1. Intro

本周业余时间,主要在研究如何使用Appium,内容包括Appium是什么,架构,安装,使用以及测试用例的写法。

2. Appium简介

Appium的Introduction页面介绍了Appium,采用经典的CS架构,利用 WebDriver 封装调用各平台的测试框架(现在支持iOS,Android,FirefoxOS),因此在使用的时候需要先启动服务器再在客户端进行测试。
对技术细节及背后的实现感兴趣的,可以深入看源码。现在,我们的目标是运行Appium并成功进行测试。

3. Tutorial

为了上手,可以看GetStarted或者iOS Tutorial。因为我只侧重iOS,因此下面把tutorial中涉及到的内容摘录出来。

3.1 Environment(环境配置)

Install the latest stable release of Ruby.

\curl -sSL https://get.rvm.io | bash -s stable

source /Users/xxxx/.rvm/scripts/rvm
rvm install ruby

Make sure RVM is using the correct Ruby by default

rvm list
rvm install ruby-2.1.1
rvm --default use 2.1.1

If you have an old ruby/rvm, you can upgrade with

rvm get head
rvm autolibs homebrew
rvm install ruby

Update RubyGems and Bundler.

gem update --system
gem install --no-rdoc --no-ri bundler
gem update
gem cleanup

Install appium_console gem.

gem uninstall -aIx appium_lib
gem uninstall -aIx appium_console
gem install --no-rdoc --no-ri appium_console

Install flaky gem.

gem uninstall -aIx flaky
gem install --no-rdoc --no-ri flaky

Install brew(if installed, ignore) ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Install nodejs using brew.(if installed, ignore)

brew update
brew upgrade node
brew install node

此处注意:如果以前已经安装过node的,可能使用了sudo权限,这里会对Appium的启用有影响,需要安装Appium的方式安装node。 check versions:

node --version
npm --version

Install grunt.

npm install -g grunt grunt-cli

Run the version command from the appium folder. If you’re not in that folder, the grunt version will not display.

grunt --version
grunt-cli v0.1.13
grunt v0.4.2

install ant && maven

brew install ant

brew install maven

3.2 Appium&&Authorize (安装与授权)

此处操作是在源码中进行的 get appium

git clone git://github.com/appium/appium.git
cd appium; ./reset.sh --ios//只做iOS测试

Authorize:

sudo node bin/authorize-ios.js

Start

node .

除了命令行启动的方式,Appium也提供了App启动方式,官网下载后直接安装。打开后,可以根据点击需要的测试平台填入相应App的信息,启动即可。Appium的app还内置了inspector,可以连接app的时候查看各个页面元素,也提供了多种语言获取元素,方便测试用例的撰写。

3.3 Install client library

https://github.com/appium/sample-code/tree/master/sample-code/examples/python 因为用python写用例,需要安装:

pip install Appium-Python-Client
pip install pytest

使用方法:

py.test ios_simple.py
py.test -n2 --boxed ios_simple.py

其中的python文件需要遵循一定的写法。
使用其他语言的可以在这里查看,目前支持的语言还是挺多的。

4. sample(demo实战)

进入源码的sample-code文件夹,其中apps中是待测程序,examples中是不同语言版本的测试用例。其中/example/python/ios_simple.py是征对/apps/TestApp的测试用例,我们如下进行测试:

//启动Appium
//启动方式1
appium
//启动方式2
cd /Appium/source/path
node .
//运行测试用例,需要新开terminal
py.test ios_simple.py

稍等一会,会启动iOS模拟器,然后运行用例,测试结果会在terminal中显示。
在运行过程中,该用例可能需要修改32和49行的部分代码:将elements()替换成.elements()
ios_simple.py中大致可以明白测试用例的写法,比如setUp负责建立测试环境如:app路径,测试平台等,tearDown是告诉appium退出。
另外,详细的测试语法还要继续学习。

4.1 真机测试

首先安装:

brew install --HEAD ideviceinstaller

详见这里

然后就可以启动appium:

appium -U "udid" --app "bundle-id"

启动成功后,新开terminal,启动测试脚本:

py.test ios_test.py

其中,测试脚本中desired_capabilities需要更新:

desired_capabilities={
            'app': app,
            'platformName': 'iOS',
            'platformVersion': '8.1',
            'deviceName': 'iPhone 6',
            'udid':'df41e04b1ea7dbfa0a7df54d49fc9f8c228ab20b',
            'bundleid':'io.appium.TestApp',
        }

官方也有Deploying an iOS app to a real device的教程,步骤包括生产签过名的app,使用fruitstrap部署app到真机,然后再启动appium。
使用py.test客户端启动测试的过程中,就包含了部署的部分,当然待测试的app需要先安装到真机。

5 展望

这个自动化测试的平台搭建成功后,还是很兴奋的。下一步就是学习case怎么写,虽然一开始会感觉负担比较重,但是会节省以后的空间。 另外,还发现一个论坛testerhome--测试员的家,看英文累的可以参考这里。