MAC下搭建appium UI自动化环境详细步骤

目前所负责的产品已经正式上线,功能也越来越多,为提高后续测试的效率,提前准备起ios ui自动化的框架,待产品UI稳定后,可以直接进行用例的填充。在网上查看资料,越来越多的人使用appium做移动端的UI自动化,同时组内已经使用appium搭建了Android端的自动化,因此也采用此工具搭建iOS的UI自动化框架。
        但在搭建过程中遇到了各种各样的问题,搜索网上资料几乎前篇一律,按照提供的步骤,环境几乎是搭建不起来的。所以记录我的搭建经历,分享给同样会遇到相同问题的同学们。
一、系统要求:
  • Mac OS X 10.7 或者更高,推荐最新系统
  • XCode >= 4.6.3,推荐最新系统
  • Apple Developer Tools (iPhone simulator SDK, command line tools)
---插曲:
   我的MAC系统版本为10.10.3,按照以往的使用习惯,安装软件都是安装最新的,于是我就下载了最新版本的XCode7,话费了将近半小时下载安装好XCode7后,打开的时候傻眼了,提示我当前系统版本过低,如下图:
   因此,提醒大家在安装XCode7的时候,一定要注意当前OS X的版本是否>=10.10.5。由于受限与系统版本,我安装的是XCode6. (XCode下载地址: http://pan.baidu.com/s/1gdtw44z

二、搭建Appium环境:
在mac下搭建Appium环境有两种方式:
1.  使用terminal命令行的方式安装;
2. 使用Appium gui,直接下载appium.dmg运行即可;

下面详细介绍两种方式:
使用terminal命令行的方式安装:
1. 使用该方式安装的前提先安装brew和node,检查是否安装的方法:

 
   

$ brew -v
Homebrew 0.9.5 (git revision cd4952; last commit 2015-11-12)

 
   

$ node -v
v5.0.0

如果输入上述命令后,如果没有出现版本信息,说明机器上未安装brew或node。
安装brew的方法:
 
   

ruby -"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装node的方法:
方式一:
 
   

brew install node

方式二:
 
   

git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install

2. 安装appium
需要使用非root账号安装appium:
 
   

npm install -g appium

如果使用了root安装了appium,需要先卸载再使用非root账号重装:
 
   

$ sudo npm uninstall appium -g  //卸载appium
$ sudo chmod -R 777 /usr/local   //给予非root用户权限
$ npm install -g appium  //重新安装

3. 安装appium client
两种方式安装:
a. npm install wd:较老的安装方式
b. 到git里面下载client,比如安装python-client:
 
   

git clone git@github.com:appium/python-client.git
cd python-client
python setup.py install

4. 检查appium的依赖是否全部安装
 
我们当前是在mac上安装,最后一个错误不用管。
5. 启动appium
a. 启动模拟器测试:
 
   

$ appium
info : Welcome to Appium v1 . 4.13 ( REV c75d8adcb66a75818a542fe1891a34260c21f76a )
info : Appium REST http interface listener started on 0.0 . 0.0 : 4723
info : Console LogLevel : debug

b. 连接真机测试:
连接真机,启动是需要带参数-U 为真机的UDID,--app为需要运行的app的boundleID
 
   

$ appium - U xxxxxxxxxxxxxxxxxxx -- app xxxxxxxxxxxx
info : Welcome to Appium v1 . 4.13 ( REV c75d8adcb66a75818a542fe1891a34260c21f76a )
info : Appium REST http interface listener started on 0.0 . 0.0 : 4723
info : [ debug ] Non - default server args : { "app" : "com.netease.erciyuan" , "udid" : "49455326c3b73198d3091b11227d8a333ed9ce31" }
info : Console LogLevel : debug

使用Appium gui,直接下载appium.dmg运行即可
(appium.dmg下载地址: http://pan.baidu.com/s/1mgCjojI );
下载好.dmg文件,双击该文件进行安装。
a.  配置service ip和port:
 
 
b. 启动模拟器测试,需要配置如下几项:
其中App Path为build以后的.app文件路径。
配置完成后点击Launch,即可启动appium服务。
--注意:
1. 此处选择的Force Device和Platform Version要与.app在XCode中编译时使用的一致;
2. .app要从该位置取../Build/Products/Debug-iPhonessimulator,如果从Debug-iPhones取,在inspector中启动应用会不停的闪退。
c. 启动连真机的测试,需要配置如下几项:
BundleID:手机连接到MAC上,到Xcode里面的Window->Devices->Installed Apps的Identifier中查看;
UDID:手机连接到MAC上, 到Xcode里面的Window->Devices->Devices Information的Identifier中查看;
   
三、运行Appium自带的测试app:
下载appium的测试例子:
 
   

git clone https://github.com/appium/sample-code

1. 使用terminal命令行形式运行例子
a. 按照第二步中的方式启动appium;
b. 输入下面的命令编译生成示例程序:
 
   

cd  sample-code/sample-code/apps/TestApp
xcodebuild -sdk iphonesimulator

目录下通过如下命令编译生成示例程序:xcodebuild -sdk iphonesimulator 当看到**BUILD SUCCEEDED**则说明编译成功。 这行命令在TestApp项目底下创建了一个build/Release-iphonesimulator目录,并且声称一个可以透过Appium服务器交流的.app封装包,该包为appium gui中App Path的路径。
c. 运行例子:

cd sample-code/sample-code/examples/python
python  ios_simple.py

运行以上命令,出现下图说明正常。
 
2. 使用Appium Inspector运行用例
按照第二步中的方式配置appium,点击Launch,等待启动完成:
点击左侧的inspector图标“放大镜”,运行启动后,出现下图说明正常。
左下角的界面可以寻找当前界面的元素位置。

四、如何在Eclipse+TestNG框架下编写并运行脚本:
该部分介绍如何在Eclipse工具搭配TestNG框架下如何编写并运行测试脚本。
1. 在Eclipse中创建工程: ' File'->'New'->'Java Project,输入工程名字,点击next,点击“Finish”。
2. 在工程的src上右键->'New'->'Class',输入Package和Name,点击“Finish”。
创建后的工程如下图:
3. 添加必要的jar包
下载Selenium Standalone Server/Selenium Client &WebDriver Language Bindings http://docs.seleniumhq.org/download/

安装TestNG:
在线安装方式:
 
    

Help -> install new software -> 输入 http://beust.com/eclipse/ 

离线安装方式:
 
    

资源分享链接:http://pan.baidu.com/s/1bnsb3aB

(1)解压eclipse-testng离线包.zip


2)将【eclipse-testng离线包/feature】中的文件夹org.testng.eclipse_6.8.6.20130607_0745复制到【MyEclipse安装目录/features】目录下


3)将【eclipse-testng离线包/org.testng.eclipse_6.8.6.20130607_0745】文件夹复制到【MyEclipse安装目录/plugins】目录下


4)重启MyEclipseWindows - show view - TestNG

 
在工程上右键->Properties->Java Build Path->Libraries->Add External JARs,将下载的selenium jar导入进来, Add Library,将TestNG添加进来,如下图:

运行的脚本内容如下,在运行脚本上右键->run as->TestNG test,就会出现步骤三中的运行界面。
 
   

package com.test.firstest;




import java.io.File;


import java.net.URL;


import java.util.List;


import java.util.concurrent.TimeUnit;




import junit.*;


import junit.framework.TestCase;




import org.openqa.selenium.By;


import org.openqa.selenium.WebDriver;


import org.openqa.selenium.WebElement;


import org.openqa.selenium.remote.CapabilityType;


import org.openqa.selenium.remote.DesiredCapabilities;


import org.openqa.selenium.remote.RemoteWebDriver;


import org.testng.Assert;


import org.testng.annotations.AfterMethod;


import org.testng.annotations.BeforeMethod;


import org.testng.annotations.Test;


public class FirstTestCases {


  public WebDriver wd = null;


  @BeforeMethod


  public void setUp() throws Exception {


    // set up appium


    File appDir = new File("/Users/netease/gacha/ios_automation/sample-code/sample-code/sample-code/apps/TestApp/build/release-iphonesimulator");


    File app = new File(appDir, "TestApp.app");


    DesiredCapabilities capabilities = new DesiredCapabilities();


    capabilities.setCapability("deviceName", "iPhone 5s");


    capabilities.setCapability("platformName", "iOS");


    capabilities.setCapability("platformVersion", "8.4"); 


    capabilities.setCapability("bundleid", "xxxx");//run on real device 


    capabilities.setCapability("app", app.getAbsolutePath());




    wd = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),


        capabilities);


    wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);


    System.out.println("App launched");


  }


  @AfterMethod


  public void tearDown() throws Exception {


    wd.quit();


  }


  @Test


  public void testCases() throws InterruptedException {


    String myname = "Smriti";


    wd.findElement(By.name("Add")).click();


    wd.findElement(By.xpath("//textfield[1]")).sendKeys(myname);


    wd.findElement(By.name("Save")).click();


    Thread.sleep(5000);


    // write all your tests here




wd.close();


  }


}

你可能感兴趣的:(MAC下搭建appium UI自动化环境详细步骤)