• Appium的使用笔记(自动化测试前的分析)


    自动化测试流程

    一.需求分析

    确定需求,看系统哪些模块适合做自动化,分析利弊

    二.方案选择

    选择常见的自动化测试框架,robotium,appium,monkeyrunner,UIautomator等

    三.环境准备

    搭建环境,要考虑所选择的框架及版本,持续集成,代码环境管理等问题

    四.系统设计

    主要是针对整个系统框架做合理设计,如各个公共模块的封装,文件管理,配置数据和日志管理

    五.编码

    根据事先设计好的用例来编写代码

    自动化测试分类

    分层测试

    测试金字塔有3层:底层单元测试,中间接口测试,顶层UI测试,测试人员一般是在UI层测试

    APP测试的难点在于UI常变,导致自动化用例需要大量维护

    从分层测试的角度,自动化测试应该逐层进行

    最大量实现自动化测试的应该是单元测试,最容易实现也最容易在早期发现问题

    其次是接口测试以验证逻辑为目的进行自动化,由于接口相对稳定,自动化测试成本相对可接受

    自动化成本最大的就是UI自动化测试,然而UI界面是直接反馈给用户的效果展示,适度的尤其是冒烟测试级的自动化测试是必要的

    被测操作系统的选择

    可以参考:https://mta.qq.com/mta/data/device

    https://tongji.baidu.com/research/app

    可以参考上方的网站提供数据查看某时期的设备,品牌,操作系统,等的活跃情况。便于设置一个覆盖率较高的用例设备

    app的三种类型与区别

    原生应用程序:(Native App)

    原生APP就是利用Android,IOS平台官方的开发语言、开发类库、工具进行开发。比如安卓的java语言,IOS的object-c语言,在应用性能上和交互体验上效果最好

    优点:

    1.可访问手机所有功能,可实现功能最齐全;

    2.运行速度快,性能高,绝佳的用户体验;

    3.支持大量图形和动画,不卡,反应快;

    4.比较快捷的使用设备提供的端口,处理速度上有优势

    缺点:

    1.在过去主要是成本高、周期长,安卓和ios都需要单独开发

    2.更新版本需要重新下载安装包

    混合应用程序(Hybrid App)

    利用了原生APP的开发技术还应用了HTML5开发技术(混合的比例不限)

    优点:

    1.开发周期短

    2.功能更新发布快

    缺点:

    1.用户体验不如本地应用;

    2.性能稍慢(需要连接网络);

    web版app

    本质就是浏览器功能的叠加,用普通web语言开发的,通过浏览器运行

    优势:

    1.支持范围广

    2.开发成本低

    缺点:

    1.对联网要求高,离线不能做任何操作;

    2.功能有限;

    3.运行速度慢,页面不能承载太多东西;

    4.图片和动画支持性不高;

    5.如果用户使用更多的新型浏览器,那么就会出现运行问题

    三种技术特性的对比:

    还有一类比较特殊的就是手游APP

    一般使用引擎开发,现在著名的有cocos2d和unity3d,两者都是使用引擎自带的语言进行开发,主流的分别是C++和C#,虽然在开发过程中也有按钮等控件的概念,但当运行时由引擎渲染后就变成了一幅简单的图片,不能使用appium定位

    UI元素获取工具:

    UIautomator和appium自带的appium inspect

    UIautomator:

    简介:

    用来做UI测试,就是普通的手工测试,点击每个控件元素,看输出的结果是否符合预期(安卓官方文档有提示说它能使用的版本为Android 4.3就是API level18以上的版本)

    相关工具:

    UIautomationviewer  -  一个图形界面工具来扫描和分析应用的UI控件,存放在tools目录

    UIautomator  -  一个测试的JAVA库,包含了创建UI测试的各种API和执行自动化测试的引擎

    使用条件是SDK Tools版本>21,SDK Platform API > 18

    注意事项:

    1.版本要符合要求

    2.设备保持亮屏状态,息屏可能获取不到元素信息

    3.如果提示Remote object doesn’t exit,说明没获取到页面的xml信息,有两种解决方案

    一是重启设备或重新连接,二是在获取到页面信息之后把信息保存到本地,下次再打不开的时候可查看本地保存下来的xml文件

    Android模拟器

    Android SDK自带的AVD

    启动速度慢,响应速度慢

    夜神模拟器

    基于vitualbox,可一键多开,但目前只能支持安卓5和安卓7

    逍遥模拟器

    与夜神模拟器差不多,但支持的安卓版本有待确认

    安装配置注意:

    需要把bin目录添加到环境变量path中

    需要开启VT

    ADB 准备

    常用的adb指令:

    adb version      -----     查看adb版本

    adb devices      -----     查看adb设备连接情况(若使用了模拟器,则打开模拟器就能使用该命令查到设备的连接情况)(夜神模拟器的端口号是有规律的,第一个模拟器端口是62001,第二个是62025,第三个是62025+1,以此类推)

    adb tcpip 5555     -----     开启5555端口用来无线连接

    adb connect xxx.xxx.x.x 或者 adb connect xxx.xxx.x.x:5555      -----      一般连接真机时用,IP地址是通过查看手机wifi配置信息可以查到的

    adb shell     -----     进入手机的内部系统(Android设备的底层是linux系统,shell是linux的字符交互界面)

    adb -s 127.0.0.1:62001 shell      -----     进入到指定设备的内部系统 (通过exit退出)(进入后#代表有root权限,$代表没有root权限)

    adb install | -r <apkname>     -----     -r 说明覆盖原安装文件

    adb uninstall | -k <apkname>     -----     卸载软件(要先shell然后进入/data/app,找到APP的包名)-k参数表示卸载软件但是保留配置和缓存文件

    adb shell   之后  pm list package     -----     查看设备上安装的应用包名

    adb push <pcpath> <devicepath>     -----     把文件从PC写入设备

    adb pull <devicepath> <pcpath>    -----     把文件从设备导进电脑中(由于权限原因,不能直接pull到电脑磁盘根目录,否则会报错)

    adb shell screencap <devicepath>      -----      截图保存到设备的某个路径下,最好用png后缀的

    adb start-server    和   adb kill-server     -----     开启和关闭adb服务

    adb shell dumpsys window | findstr mCurrent     -----     获取刚刚启动的app的包名和activity名

    netstat -ano | findstr 5037      -----     查看端口占用情况(最后一列就是端口占用进程的PID)

    tasklist /fi "PID eq 端口号"     -----     可以查看具体是哪个进程

    taskkill /pid 端口号     -----     可以杀掉进程

    报错:

    如果安装apk失败,可以shell进入后,cd到data文件夹下,chmod 777 local  然后再重新安装就可以了

    如果卸载失败,要检查一下,因为安装后的包名系统会在末尾加上-1或-2之类的数字,要去掉才能成功卸载,且包名不要包含.apk

    APP的Package和Activity

    package是唯一的,可视为app的身份证号(xxx.apk是文件名,包名一般是以com开头的)

    Activity是程序的根本,所有程序的流程都运行在activity之中,activity一般代表手机屏幕的一屏(手机类比浏览器的话,activity就相当于一个网页)acitivity中可添加button、checkbox等控件。activity之间可以相互跳转,例如按下一个button按钮,可能会跳转到其他activity,且activity之间的跳转可能有返回值【activity的生命周期:产生,运行,销毁。其中会调用很多方法,如创建onCreate,激活onStart,停止onStop等】

    activity页面布局元素

    FrameLayout

    最简单的布局。所有放在布局里的控件,都按照层次堆叠在屏幕的左上角,后加的控件覆盖前面的控件。

    LinearLayout

    按照垂直或水平的顺序依次排列子元素,每一个子元素都在前一个元素之后。

    如果垂直排列,那么将是一个N行单列的结构,每一行只有一个元素,而不论这个元素的宽度有多宽;

    如果水平排列,那么将是一个单行N列的结构。

    如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列

    RelativeLayout

    相对布局允许子元素指定他们相对于其父元素或兄弟元素的位置,实际布局常用这种方式

    AbsoluteLayout

    绝对位置布局,通常不采用

    TableLayout

    表格布局,试用N行N列的布局格式

    TextView

    显示文字

    Appium相关

    运行原理

    在电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator在设备上执行自动化

    appium的架构在博客中相关文章有介绍,由客户端和服务器组成,他们之间通过JSON Wire Protocol进行通信

    appium服务器

    是基于Node.js实现的HTTP服务器,用于接收客户端发起的连接,监听客户端发送来的命令,把命令发送给bootstrap.jar(ios是.js)执行,再将结果通过http应答反馈给Appium客户端

    Bootstrap.jar

    是在安卓手机上运行的一个程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,appium服务器会与bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar ; Bootstrap.jar负责运行测试命令

    Appium客户端

    主要是实现了Appium功能的WebDriver协议的客户端Library,它负责与appium服务器建立连接,将测试脚本的指令发送到appium服务器。

    组件:

    Appium-server

    appium的服务端,一个web接口服务,使用Node.js实现

    $  npm install -g appium

    $  appium

    Appium Desktop

    适用于Mac,Windows和Linux的开源应用程序,是个有界面的Appium-server,结合了appium-server和相关工具的集合

    其中就有inspector,可以用来查看app的元素,获取基本信息,并与他们进行基本的交互

  • 相关阅读:
    python常用库
    python多线程
    python内存泄漏
    用python实现js语言里的特性
    nginx + uwsgi
    mysql语句
    urllib模块
    提取数据xpath,re,css
    selenium模块
    脱壳
  • 原文地址:https://www.cnblogs.com/RuiRuia/p/13529031.html
Copyright © 2020-2023  润新知