zoukankan      html  css  js  c++  java
  • Appium原理

    appium运行时安装的2个应用:Appium Settings和Unlock。

    一、appium加载的过程图解:

    appium的加载过程

    • 1.调用Android adb完成基本的系统操作
    • 2.向Android上部署bootstrap.jar
    • 3.bootstrap.jar Forward Android的端口到PC机器上
    • 4.PC上监听端口接收请求,使用webdriver协议
    • 5.分析命令并通过forward 端口发给bootstrap.jar
    • 6.bootstrap.jar接收请求并把命令发给uiautomator
    • 7.ui automator执行命令

    二、初步认识appium工作过程

    • 1.appium有C/S模式
    • 2.appium是基于webdriver协议对移动设备自动化api扩展而成的,所有具有和webdriver一样的特性,比如多语言支持。
    • 3.webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息。
    • 4.对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务。
    • 5.客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的。
    • 6.appium服务端是node.js写的,所以安装那个平台都是先安装node,然后npm install -g appium(需要FQ)。

    三、bootstrap

    1.bootstrap的作用

    bootstrap是Appium运行在安卓测试机傻姑娘的一个UIAutomator测试脚本,该脚本的唯一功能就是在目标机器开启一个socket服务器来把一个session中Appium从PC端过来的命令发送给UiAutoamtor来执行处理。
    它会监听4724端口获得命令,然后交给UiAutomator来处理。

    2.bootstrap

    首先,bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase,所以Uiautomator可以正常运行它,它也可以正常使用uiautomator的方法,这是就是appium的命令可以转换成uiautomator的关键;
    其次,,bootstrap是一个socket服务器,专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;
    最后,bootstrap处理的是从PC端传过来的命令,而非一个文件。

    四、所使用的技术

    Android上使用了instrumentation和uiautomator两套技术
    ios使用uiautomation
    同时支持Firefox,并可扩展其他平台。
    默认开启4723端口接收webdriver请求可,4723是appium服务,专门和脚本打交道;
    默认开启4724,用于和Android设备通讯
    新版本的appium Android增加了UIautoamator2的支持,iOS换成了XCUItest

    五、capabilities

    capabilities是一些键值对的集合。客户端将键值对发送给appium服务端,用来告诉服务端怎样开始测试。

    六、工作原理

    1.Appium启动时会创建一个http://127.0.0.1:4723/wd/hub服务端(相当于一个中转站)。通过4723和AppiumClient通信,4724和设备通信。
    2.AppiumClient发送请求到AppiumServer,建立连接
    4.AppiumServer找到设备并初始化(bootstrap.jar被发送到设备中,并执行测试)。
    4.bootstrap.jar被执行,变成了Socket服务器,暴露4724接口,和PC端的4724端口进行通信。
    5.AppiumServer作为Socket的客户端,将用例解析为一个个http请求,由boostrap转发给uiautomator执行。

    参考:
    https://www.jianshu.com/p/30b3b2d6b901
    https://blog.csdn.net/jffhy2017/article/details/69220719

  • 相关阅读:
    路由器设置无线网的方法
    numpy, pandas, matplotlib等常用库的学习手册
    文本乱码的解决办法
    漫画:SOA中怎样确定服务的粒度?
    漫画:大公司都在重复造轮子吗?
    演讲稿:新人培养之道
    漫画:全面理解java.lang.IllegalArgumentException及其可用性设计
    漫画:性能、可用性和锁
    漫画:Linux中/etc/resolv.conf文件和puppet工具解析
    《两地书》--Kubernetes(K8s)基础知识(docker容器技术)
  • 原文地址:https://www.cnblogs.com/csj2018/p/9937511.html
Copyright © 2011-2022 走看看