美文网首页
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