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的元素,获取基本信息,并与他们进行基本的交互

原文地址:https://www.cnblogs.com/RuiRuia/p/13529031.html