您的位置:首页 > 移动开发

一、Mac下Appium环境搭建

2017-06-12 20:11 344 查看
目前所负责的产品已经正式上线,功能也越来越多,为提高后续测试的效率,提前准备起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 -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装node的方法:
方式一:

brew install node

方式二:

git clone git://github.com/ry/node.gitcd node./configuremakesudo make install

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

npm install -g appium

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

$ sudo npm uninstall appium -g  //卸载appiumunbuild appium@1.3.4$ 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.gitcd python-clientpython setup.py install

4. 检查appium的依赖是否全部安装



 
我们当前是在mac上安装,最后一个错误不用管。
5. 启动appium
a. 启动模拟器测试:

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

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

$ appium -U xxxxxxxxxxxxxxxxxxx --app xxxxxxxxxxxxinfo: Welcome to Appium v1.4.13 (REV c75d8adcb66a75818a542fe1891a34260c21f76a)info: Appium REST http interface listener started on 0.0.0.0:4723info: [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/TestAppxcodebuild -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 Bindingshttp://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)重启MyEclipse,Windows - 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();
  }
}
参考:http://qa.blog.163.com/blog/static/190147002201510161119832/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: