(一)App自动化测试背景

随着移动终端的普及,手机应用越来越多,也越来越重要。App的回归测试用例数量越来越多,全量回归也越来越消耗时间。另外移动端碎片化严重(碎片化:兼容性测试,手机品牌多样、Android版本很多、CPU价格不一样、屏幕分辨率不同),尤其是Android端碎片化严重性更为突出,市面上Android机型甚至有几万,几十万款,所以我们也需要通过这种自动化测试帮助我们减少兼容性的测试工作。总而言之,为了减少这种重复的、大量回归的测试任务,我们迫切需要引进一些自动化测试来协助。

(二)Appium自动化测试简介

Appium是一个开源的,适用于原生(native)或混合移动应用(hybrid mobile apps)的自动化测试框架。Appium应用WebDriver:JSON wire protocol驱动安卓和ios移动应用。(在WebDriver基础下封装和扩展。JSON:一种文本格式)

  • 原生:完全用安卓框架提供的一些组件去开发。
  • 混合移动应用:比如在native中嵌入H5页面(H5:相当于手机中的web页面)
    • 为什么要嵌入H5?

      • 因为最早的android开发机制是开发一个界面以后需要打成一个app,上传到各大应用市场,用户才能够下载应用,这种方式需要各大应用市场的审核时间,是比较耗时的,可能会导致应用失去时效性。H5页面就像web页面,只需要后台启动就能生效。
    • 所有的页面都搞成H5?
      • 不可以,因为H5的性能比较差,体验性会差一点。

Appium的特点:

  • 支持多平台(Android、iOS等)

    • 可以使用一套代码既来跑android又跑ios吗?

      • 不能。因为控件属性是不一样的。
      • 整体框架可以用一套,但是控件定位、元素定位、一些操作之类的不能用一套。
  • 多语言支持(Python、Java、ruby、js、C#)等。
  • Appium是跨平台的,可以在OSX,Windows以及Linux桌面系统上运行(对于安卓来说,即可以在windows上搭建Appium,又可以在mac上搭建Appium,也可以在Linux上。但是,对于ios来说,只能用mac)
  • Appium选择了Client/Server的设计模式。只要Client能够发送http请求给Server,那么的话Client用什么语言来实现都是可以的,这就是如何做到支持多语言的原因。
  • Appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过程,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量。

Appium工具的原理:

Appium的哲学:

  • 开源免费。
  • 不需要重新编译或修改应用。(直接拿到apk或者已经下载到手机上的App就可以直接做自动化测试,不需要改任何代码,也不需要管App的源程序是如何实现的)
  • 不被一种语言或者框架约束。
  • 不重复造轮子。(继承WebDriver)

其他移动端自动化工具介绍

  1. monkeyrunner (Java语言;通过坐标实现定位;可能因为屏幕分辨率不一样导致定位不准确;或者说坐标点是肯定存在,但是控件可能还未加载出来)
  2. monkeytalk(只支持JS代码;控件定位;要在app的源码里面插入代理,可能会导致源程序出现问题)
  3. robotium(只支持Java语言;控件定位;支持混合移动应用;但是需要重签名)
(三)Appium自动化环境搭建
  1. 安装Python:

    python官网:https://www.python.org/

    百度网盘:

    链接:https://pan.baidu.com/s/18UXr2KsZK5UaUy1p-VfMGw

    提取码:4w7r

    下载对应机器的安装包:

​ 双击打开下载好的Python安装包并安装:

如果未勾选Add Python 3.7 to PATH,就需要手动配置环境变量

  • 计算机->属性->高级系统设置

  • 环境变量->系统变量->Path:

  • 将python.exe和pip命令所在的路径配置到Path中:

    D:\Python3

    D:\Python3\Scripts

  • 打开cmd,输入python,验证Python环境是否正常:

  1. JDK环境

    • 验证jdk环境:打开cmd界面输入java/javac


  2. SDK环境变量配置

    • 下载SDK

      百度网盘:

      链接:https://pan.baidu.com/s/1mZJ_o2ymlSdYyZO0_Bj2Fw

      提取码:7jm7

    • 配置环境变量

      新建系统变量 ---> 变量名: ANDROID_HOME ---> 变量值:E:\Android\sdk(根据自己电脑sdk实际的位置确定) --->

      在系统变量Path中加入入%ANDROID_HOME%\platformtools;%ANDROID_HOME%\tools

    • 验证SDK环境是否正常:打开cmd,输入adb。

  3. 下载安装Appium

    地址:appium.io

    网盘地址:

    链接:https://pan.baidu.com/s/1ii5h9Hr2IVSPgcJuaq82jA

    提取码:f229

    下载并安装。

  4. 安装Python第三方库

    >>>pip install selenium
    >>>pip install --index-url https://pypi.douban.com/simple appium-python-client
  5. 安装模拟器或者用真机

    验证设备是否连接?

    连接不上设备可能原因?

    • 未进入开发者模式
    • USB调试没有打开
    • 管理员模式打开模拟器
    • 真机offline,重插数据线
    • 真机可能需要安装手机助手(如:华为手机助手)
    • sdk的adb命令与模拟器adb版本不一致,替换模拟器中的adb

Appium Server日志分析

  1. 请求发送到Appium Server,Appium REST http interface listener started on 0.0.0.0:4723,监听4723

  2. 设置的请求参数传过来

  3. 检查设备连接

  4. 给手机装两个App

    • 一个是settings:用于设置网络状态

    • 另一个是unlock:用于自动解锁(若手机是滑动锁屏的情况,则会自动解锁并启动apk,若是图案锁屏或数字锁屏则不可以)

  5. Appium Server会push一个bootstrap.jar到手机

  6. 底层调用uiautomator去实现一些操作

Appium App UI 自动化测试理论知识的更多相关文章

  1. APP UI自动化测试思路总结

    python+appium自动化测试系列就要告一段落了,本篇博客咱们做个小结. 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所 ...

  2. Python+appium+unittest UI自动化测试

    什么是UI自动化 自动化分层 单元自动化测试,指对软件中最小可测试单元进行检查和验证,一般需要借助单元测试框架,如java的JUnit,python的unittest等 接口自动化测试,主要检查验证模 ...

  3. 基于Appium的UI自动化测试

    为什么需要UI自动化测试 移动端APP是一个复杂的系统,不同功能之间耦合性很强,很难仅通过单元测试保障整体功能.UI测试是移动应用开发中重要的一环,但是执行速度较慢,有很多重复工作量,为了减少这些工作 ...

  4. django+appium实现UI自动化测试平台---构思版

             背景 UI自动化,在进行的过程中,难免会遇到平台化, 在实际的工作中,有的领导也会想要实现自动化测试的平台化.自动化平台化后,有了更为实际的成果, 在做UI自动化,很想吧现在的自动化 ...

  5. BeautifulReport 实现app UI自动化测试

    修改了 BeautifulReport源码中的一些内容<附:BeautifulReport--适用于unittest自动化测试的可视化报告>; 1.生成截图时,原来的img文件夹必须在项目 ...

  6. 基于Python3 + appium的Ui自动化测试框架

    UiAutoTest 一.概要 数据驱动的Ui自动化框架 二.环境要求 框架基于Python3 + unittest + appium 运行电脑需配置adb.aapt的环境变量,build_tools ...

  7. python appium app ui 自动化

    1.下载Android-SDK.夜神安卓模拟器.Appium.adb命令执行包并配置环境变量 2.打开夜神 3.打开Appium进行配置,配置如下 4.启动命令,到夜神bin目录下执行 adb con ...

  8. 手机APP UI设计尺寸基础知识

    从原理开始介绍一下移动端设计尺寸规范 初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪.我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家.从原理说起,理 ...

  9. ios app UI自动化测试用到的命令

    ios测试的app测试包,真机设备需要开发者证书并且将测试机的udid加入到pp文件文件,configruation 要求为debug模式的ipa包, 1.苹果手机的UDID, a.通过 xcode- ...

随机推荐

  1. ESP8266 ESP-01制作B站粉丝计数器 | Arduino IDE开发ESP8266 | ESP8266存储读取用户数据

    1.实物图 2.原理图 3.Arduino程序 在程序中修改自己的B站UID和自己家的WiFi名称及密码即可. /*B站粉丝计数器*/ /******************************* ...

  2. 生僻的mysql

    1.show table status like 'user' 2.alter table mytableEngine=InnoDB 需要执行很长时间,mysql会按行将数据从原表复制到一张新的表中, ...

  3. Debian10快速部署DHCP服务

    前言 DHCP(动态主机配置协议)是一个局域网的网络协议.指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码. 进日,想提升一下自己的技术水平,于是就做 ...

  4. Android开发环境及Hello World程序

    Android的开发需要以下四个工具: 1. JDK 2. Eclipse 3. Android SDK 4. ADT 具体功能: 1. JDK.JDK即Java Development Kit(Ja ...

  5. Java进阶专题(十八) 系统缓存架构设计 (下)

    前言 上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因.很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等.这 ...

  6. 使用PyQt开发图形界面Python应用专栏目录

    ☞ ░ 前往老猿Python博文目录 ░ 本专栏为收费专栏的文章目录,对应的免费专栏为<PyQt入门知识目录>,两个专栏都为基于PyQt的Python图形界面开发基础教程,只是收费专栏中的 ...

  7. moviepy音视频剪辑:moviepy中的剪辑相关类及关系

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 y在 ...

  8. 第8.33节 Python中__getattr__以及__getattr__与__ getattribute__的关系深入剖析

    一. 引言 前面几节分别介绍了Python中属性操作捕获的三剑客:__ getattribute__方法.__setattr__方法.__delattr__方法,为什么__ getattribute_ ...

  9. 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...

  10. 第二十四章、containers容器类部件QScrollArea滚动区域详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...