appium主线分析

android自动化框架对比

目前较热门的开源框架有:android APIs提供的Instrumentation类、MonkeyRunner、Robotium、Appium、UIAutomator等

1.Instrumentation
优点:

  • Android APIs提供

缺点:

  • 跨进程受到android进程安全限制

2.Robotium
优点:

  • 基于instrumentation实现,提供的接口可以满足大部分自动化需求,使用方法简单
  • 支持手势、webview、截图等操作,支持Remote Control方式,支持ant、maven打包,与jenkins结合较好

缺点:

  • 跨进程受到android进程安全限制,
  • 待测App和测试App必须使用相同签名

3.Monkeyrunner
优点:

  • Android SDK提供

缺点:

  • python脚本,使用monkeyrunner test.py来执行、结果的验证是通过截屏比对图片来实现,验证方式不够灵活
appium主线分析_第1张图片

4.UIAutomator
优点:

  • Android提供的框架,支持SDK level 16及以上
  • 支持跨进程测试!!!这一点比起Robotium来说非常赞

缺点:

  • 打包成jar(如果是u2则是打包测试apk)后push到模拟器中运行,调试相对Robotium不便(其实自己稍微封装下也还OK)
  • 不支持WebView、没有测试结果报告文件

位置:/system/framework/uiautomator.jar

5.Appium
优点:

  • 使用WebDriver JSON wire protocol支持iOS和Android的UI测试、
  • 支持非常多种语言编写测试脚本

缺点:

  • Android SDK Level在16及以上时,底层使用的UIAutomator,低于16使用Selendroid

对比图:


appium主线分析_第2张图片

Appium原理简述

Google为Android开发了自己的自动化测试框架 - UIAutomator,只支持Java语言。

Apple为iOS开发了自己的自动化测试框架,在Xcode里,叫做UIAutomation,只支持JavaScript语言。

如果你只做Android的自动化测试,那么UIAutomator也可以。

如果你只做iOS的自动化测试,那么UIAutomation也足够了。

如果你想既做Android的自动化测试,又做iOS的自动化测试,那么Appium就显得难能可贵了。

Appium的开发者认为,自动化测试,不应该限定特定的语言,也不应该限定特定的框架。

Appium几乎支持任何语言 - Java,Python,Ruby,PHP,C#,JavaScript等等。

使用Appium可以测试Android,也可以测试iOS,而且大部分代码都可以公用。

IOS 原理图

appium主线分析_第3张图片

Android原理图

appium主线分析_第4张图片

Appium官网


appium主线分析:

appium主线分析_第5张图片

创建driver 并启动服务端:


appium主线分析_第6张图片

创建一个session


appium主线分析_第7张图片

处理一个request
appium主线分析_第8张图片

java-client如何发送一套请求:

创建一个session

new AndroidDriver(url, capabilities);

public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) {
    this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress),
        desiredCapabilities);
}

RemoteWebDriver 中 startSession

protected void startSession(Capabilities desiredCapabilities,
  Capabilities requiredCapabilities) {
....
Response response = execute(DriverCommand.NEW_SESSION, parameters);

....

sessionId = new SessionId(response.getSessionId());

}

appium主线分析_第9张图片

与客户端建立连接

appium主线分析_第10张图片

启动客户端

appium主线分析_第11张图片

手机端的server

    public class Bootstrap extends UiAutomatorTestCase {
 
  public void testRunServer() {
    Find.params = getParams();
    boolean disableAndroidWatchers = Boolean.parseBoolean(getParams().getString("disableAndroidWatchers"));
    boolean acceptSSLCerts = Boolean.parseBoolean(getParams().getString("acceptSslCerts"));
 
    SocketServer server;
    try {
      server = new SocketServer(4724);
      server.listenForever(disableAndroidWatchers, acceptSSLCerts);
    } catch (final SocketServerException e) {
      Logger.error(e.getError());
      System.exit(1);
    }
 
  }
}
appium主线分析_第12张图片
QQ图片20180129192831.jpg

你可能感兴趣的:(appium主线分析)