美文网首页
appium主线分析

appium主线分析

作者: yangzai | 来源:发表于2017-07-07 18:37 被阅读166次

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来执行、结果的验证是通过截屏比对图片来实现,验证方式不够灵活

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原理简述

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 原理图

Android原理图

Appium官网


appium主线分析:

创建driver 并启动服务端:



创建一个session



处理一个request

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());

}

与客户端建立连接

启动客户端

手机端的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);
    }
 
  }
}
QQ图片20180129192831.jpg

相关文章

网友评论

      本文标题:appium主线分析

      本文链接:https://www.haomeiwen.com/subject/cujrhxtx.html