Windows下部署Appium教程(Android App自动化测试框架搭建)

原创
2015/08/12 18:15
阅读数 2.1W

----------------------------------------------appium的一些基本概念----------------------------------------------

        appium的核心其实是一个暴露了一系列REST API的server。

这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。

在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。

如何部署和使用Appium,一起来看看吧!

---------------------------------------------------安装各种组件----------------------------------------------------

一、安装nodejs0.8版本及以上

        地址:https://nodejs.org/download/

        下载合适自己机型的版本,Windows下安装很简单,一直下一步;

        验证安装是否成功,Win+R>>cmd->>node - v,如出现类似以下提示,证明安装成功!

        

二、安装配置Java的JDK(Java软件开发工具包

        地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

        下载合适自己机型的版本,Windows下安装很简单,一直下一步;

        

        安装完成后,在安装目录下可以看到两个文件夹,一个是jdk,一个是jre;

        

        打开jdk的安装目录下的bin目录,里面有许多后缀名为exe的可执行程序,这些都是JDK包含的工具。通过配置JDK的环境变量,我们可以方便地调用这些工具及它们的命令:

        javac:Java编译器,将源代码转成字节码。

        jar:打包工具,将相关的类文件打包成一个文件。

        javadoc:文档生成器,从源码注释中提取文档。

        jdb:debugger,调试查错工具。

        java:运行编译后的java程序。

        

        1、JAVA_HOME

        新建一个名叫“JAVA_HOME”的用户变量,如不会请参考:http://my.oschina.net/u/563250/blog/490614

        变量值为JDK的安装目录,笔者为    C:\Program Files\Java\jdk1.8.0_51

        创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径;

        2、PATH

        在已有的环境变量PATH变量值的最后追加     ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

        3、CLASSPATH

         新建一个名叫“CLASSPATH”的用户变量, 变量值为    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

        注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包;

        验证安装是否成功,Win+R>>cmd->>java -version,如出现类似以下提示,证明安装成功!

        

三、安装配置Android的SDK(Android软件开发工具包

        地址:http://developer.android.com/sdk/installing/index.html

        仅下载SDK TOOLS安装工具即可,不必安装ANDROID STUDIO,我们的测试代码写在Eclipse里;

        

        安装完成后,配置环境变量:

        1、ANDROID_HOME

        新建一个名叫“ANDROID_HOME”的用户变量

        变量值为Android SDK的安装目录,笔者为    C:\Program Files (x86)\Android\android-sdk

        2、PATH

         在已有的环境变量PATH变量值的最后追加     ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

         在安装目录或开始菜单中找到SDK Manager.exe并打开,工具会自动检测系统当前安了哪些SDK工具,并获取各个版本可安装的SDK,默认情况下只安装了Tools下的Android SDK Tools;

        

        获取可安装的SDK版本时,国内有墙,有时候会出现获取失败的情况,如下图:

        

        可以通过如下设置解决问题,选择Tools->>Options打开Android SDK Manager - Settings

        将HTTP Proxy Server和HTTP Proxy Port,连接服务器使用的代理地址和端口分别修改为“mirrors.opencas.cn”“80”;

        若该地址仍然无法解决问题不正确,请参考该网站获得更多代理地址,或从该网站上直接手动下载:http://www.androiddevtools.cn/

        

        修改代理地址和端口后,选择Packages->>Reload,重新获取,等待Android SDK Tools下方提示Done loading packages,即加载完成。选择需要安装的SDK,Appium官方推荐API 17及以上的版本都支持,可以任意安装一个API 17及以上的版本,选择右侧的Install xx packages;

        

        验证安装是否成功,Win+R>>cmd->>android -h,如出现类似以下提示,证明安装成功!(当然,已经可以正常运行Android SDK Tools,肯定是安装成功了,不妨再检查一下

        

三、安装Appium

        地址:http://appium.io/

        点击Download Appium,默认就下载的是AppiumForWindows安装包,下载完成后,解压安装包,运行appium-installer.exe进行安装

        

        注:还可以使用node.js的模块管理工具npm,输入命令在线安装(Win+R->>cmd->>npm install -g appium),但在线安装失败的几率比较大,貌似是因为网络不稳或权限问题无法解压,还是推荐直接下载Windows安装包;

        安装完成后,配置环境变量:

        1、PATH

        在已有的环境变量PATH变量值的最后追加Appium的安装bin目录,笔者为    C:\Program Files (x86)\Appium\node_modules\.bin

        验证安装是否成功,Win+R>>cmd->>appium,如出现类似以下提示,证明安装成功!

        

四、安装Eclipse

        地址:http://www.eclipse.org/downloads/

        选择Eclipse IDE for Java EE Developers,下载合适自己机型的IDE,Eclipse不需要安装,直接将下载的安装包解压,并打开eclipse.exe,选择一个工作目录即可;

        

---------------------------------------------------测试前的准备----------------------------------------------------

一、启动一个Android模拟器或者连接上一个API 17以上的android真机

        (1)打开Android SDK Tools中的AVD Manager,点击右侧的create,新建一个新的AVD(Android Virtual Device),设置AVD的各个属性,点击OK;

        注:若SDK下载安装完整,但CPU/ABI一栏无法选择,被灰掉或禁用,则可能是SDK安装目录太长,将SDK拷贝到别的目录,再次打开AVD Manager.exe,新建一个AVD,CPU/ABI一栏就可以选择了;

        

        (2)点击右侧的start,选择Launch,启动模拟器;

        

        (3)默认为锁定状态,一定要滑动屏幕解锁,否则Appium无法启动被测试应用程序;

            

二、打开Appium

    双击桌面上Appium图标,点击右上角的Launch the Appium Node Server按钮;

    

    或:Win+R->>cmd->>appium,启动Appium Server服务(和上诉方法二选一即可);

三、在Eclipse中配置Selenium、Appium类库

(1)下载Selenium类库

    client地址:http://selenium-release.storage.googleapis.com/2.44/selenium-java-2.44.0.zip 

    server地址:http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar

    (确认2014.11.14有效,如无效请访问http://docs.seleniumhq.org/download/ 进行下载)

(2)下载Appium java版类库

    地址:http://appium.io/downloads.html

    选择java,下载jar包;

    

    

(3)在Eclipse中导入

        打开Eclipse,新建一个java Project

        

   在新项目上,新建一个Folder,命名为“lib”,将下载的三个类库“selenium-java-2.44.0.jar”、“selenium-server-standalone-2.44.0.jar”、“java-client-3.1.0.jar”,从文件夹中直接拖放到“lib”下;

    

    在项目上右键->>Build Path->>Configure Build Path->>Libraries->>Add JARs(添加Java包),将刚刚拖进项目的3个jar包,选择进来;

    

-------------------------------------------------------开始测试--------------------------------------------------------

    (1)在项目的src下,新建一个package,在package下新建一个class(笔者的命名分别为“appiumtest”和“demo2”);

    

    在类中输入以下代码,代码内容为,启动Android模拟器上自带的Calculator计算器,并分别点击“1+2=”;

package appiumtest;//package名

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class demo2 {

private AndroidDriver driver;

@Before
public void calc() throws Exception {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");// 这句不是必须的
    capabilities.setCapability("deviceName", "Android Emulator");
    capabilities.setCapability("platformVersion", "4.2.2");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("appPackage", "com.android.calculator2");
    capabilities.setCapability("appActivity", ".Calculator");
    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
}

@After
public void tearDown() throws Exception {
    driver.quit();
}

@Test
public void add() {
    driver.findElementByName("1").click();
    driver.findElementByName("+").click();
    driver.findElementByName("2").click();
    driver.findElementByName("=").click();
    driver.quit();
    }
}

    (2)在项目上右键->>Run As->>JUnit Test;

    

(3)测试用例正在运行,查看Appium,输出了很多运行的日志,查看模拟器,Appium控制模拟器打开了自带的计算器,并分别点击“1+2=”,至此部署Appium测试环境已完成并测试成功!接下来就可以开发真正的自动化测试用例啦!


--------------------------------------分割线(Desired Capabilities详解)-------------------------------------

        Desired Capabilities在启动session的时候是必须提供的,它本质上是key value的对象,它告诉appium server这样一些事情:

    1、本次测试是启动浏览器还是启动移动设备?

    2、是启动andorid还是启动ios?

    3、启动android时,app的package是什么?

    4、启动android时,app的activity是什么?

    Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:

Capability名称 描述 可能的值举例
automationName 使用哪种自动化引擎(默认:Appium) Appium   ,Selendroid
platformName 使用哪种移动平台 iOS,Android,FirefoxOS
platformVersion 移动平台版本 7.1,4.4
deviceName 启动哪种设备?真机还是模拟器 iPhone   Simulator, iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy   S4,etc…. On iOS,this should be one of the valid devices returned by   instruments with instruments -s devices. On Android this capability is   currently ignored.
app 应用(.ipa   .apk .zip)的绝对路径或远程的Http URL /abs/path/to/my.apk   , http://myapp.com/app.ipa
browserName 移动浏览器的名称(如果被测应用程序已安装到移动设备,则可设置为空字符串) ‘Safari’   for iOS and ‘Chrome’, ‘Chromium’, or ‘Browser’ for Android
newCommandTimeout 客户端退出和结束会话之前,Appium等待从客户端发来一个新命令的时间,即超时时间(秒) 60
autoLaunch 是否自动安装和启动被测app(默认:true) true,   false
language (Sim/Emu-only)   Language to set for the simulator / emulator fr
locale (Sim/Emu-only)   Locale to set for the simulator / emulator fr_CA
udid 物理机的id 1ae203187fc012g
orientation (Sim/Emu-only)   start in a certain orientation LANDSCAPE,PORTRAIT
autoWebview Move   directly into Webview context(默认:false) true,   false
noReset 在测试前不重置app的状态(默认:false) true,   false
fullReset IOS:删除整个模拟器目录;Android:通过卸载app的方式重置app的状态,而不是仅清除app的数据,在Android设备上,当测试结束后,也会彻底移除app(默认:false) true, false

下面这些属性是android平台特定的(还有很多没有列出来的可以查看:http://appium.io/documentation.html):

Capability名称 描述 可能的值举例
appActivity 待测试的app的Activity名字,原生app的话要在activity前加个"." MainActivity,   .Settings
appPackage 待测试的app的java   package com.example.android.myApp,   com.android.settings


--------------------------------------分割线(工具的使用)-------------------------------------

通过上一节我们发现,要获取app的package和activity名字,要用什么工具呢?

一、monitor.bat

        该文件位于SDK安装目录tools下,如笔者在“C:\Program Files (x86)\Android\android-sdk\tools”下,双击运行monitor.bat即可运行,该工具可以帮我们找到android控件的content-description,为以后的find_element_by_accessibility_id 定位方法做参数使用,也可查看被测app的appPackage,如下图。

    

二、uiautomatorviewer.bat

        该文件位于SDK安装目录tools下,如笔者在“C:\Program Files (x86)\Android\android-sdk\tools”下,双击uiautomatorviewer.bat即可运行,该工具主要用来查看控件的属性,比如resource id,class name等,也可查看被测app的appPackage(Desired Capabilities中使用)。

        使用方法(以计算器为例):将模拟器的打开,点击左上角绿色的Android小图标(Device ScreenShot),可以为当前界面UI创建一个带有控件信息的截图,将鼠标放在想要的地方,即可看到控件的相关属性:

   



展开阅读全文
打赏
1
20 收藏
分享
加载中
请问:capabilities.setCapability("appActivity", ".Calculator");这句中的.Calculator表示的是什么意思?
2016/06/21 18:27
回复
举报

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效

引用来自“xhgd”的评论

重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?

引用来自“outcat”的评论

不需要换,127.0.0.1就是指你的计算机
你可以关掉图形界面的Appium,在cmd中输入appium,回车
然后运行代码,看看cmd里面有没有日志

引用来自“xhgd”的评论

我在cmd里面看有日志的。

引用来自“outcat”的评论

那你就在cmd里看日志就行了,两边日志是一样的
具体为什么appium不显示日志,也许是appium for windows本身就有BUG
好的,谢谢。
2016/06/21 17:52
回复
举报
outcat博主

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效

引用来自“xhgd”的评论

重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?

引用来自“outcat”的评论

不需要换,127.0.0.1就是指你的计算机
你可以关掉图形界面的Appium,在cmd中输入appium,回车
然后运行代码,看看cmd里面有没有日志

引用来自“xhgd”的评论

我在cmd里面看有日志的。
那你就在cmd里看日志就行了,两边日志是一样的
具体为什么appium不显示日志,也许是appium for windows本身就有BUG
2016/06/21 17:51
回复
举报

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效

引用来自“xhgd”的评论

重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?

引用来自“outcat”的评论

不需要换,127.0.0.1就是指你的计算机
你可以关掉图形界面的Appium,在cmd中输入appium,回车
然后运行代码,看看cmd里面有没有日志
我在cmd里面看有日志的。
2016/06/21 17:49
回复
举报
outcat博主

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效

引用来自“xhgd”的评论

重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?
如果你环境变量配置正确的话,cmd中输入appium,会出现“Welcome to Appium v1.4.0”等提示
2016/06/21 17:41
回复
举报
outcat博主

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效

引用来自“xhgd”的评论

重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?
不需要换,127.0.0.1就是指你的计算机
你可以关掉图形界面的Appium,在cmd中输入appium,回车
然后运行代码,看看cmd里面有没有日志
2016/06/21 17:40
回复
举报

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了

引用来自“outcat”的评论

我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效
重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?
2016/06/21 17:36
回复
举报
重启过了,还是不行。我想问一下driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);这个里面的地址要换成我的IP地址么?
2016/06/21 17:35
回复
举报
outcat博主

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?

引用来自“xhgd”的评论

package名和class名改了,模拟器上也跟着动了
我的日志设置是,所有的logging选项,都没有打钩,这样是有日志的
实在不行,你可以重启一下Appium。或者重启下电脑,可能是什么配置没生效
2016/06/21 17:13
回复
举报

引用来自“xhgd”的评论

我想请教一下,为什么我的appium下面没有显示日志呢?

引用来自“outcat”的评论

可能是你的日志没有开启。Appium左上角有个设置按钮,点卡,里面有logging选项,设置成开启
另外,只有运行测试代码的时候,Appium工作时,才会输出日志

引用来自“xhgd”的评论

我是直接复制你的代码的,要改什么东西吗?

引用来自“outcat”的评论

package名,class名要和你自己定义的改成一致的
你运行了代码,模拟器上有没有跟着动?
package名和class名改了,模拟器上也跟着动了
2016/06/21 17:10
回复
举报
更多评论
打赏
26 评论
20 收藏
1
分享
返回顶部
顶部