01. 移动自动化测试 之 工具环境
01. 移动自动化测试 之 工具环境
1. 移动自动化测试工具介绍
1. 主流的移动自动化测试工具
- Robotium
- 是一款国外开源的Android自动化测试框架
- 适用平台:Android
- 支持语言:Java不支持跨应用
- macaca
- 是由阿里巴巴公司开源的一套自动化解决方案
- 适用平台:PC端、Android、iOS
- 支持语言:Java、Python、Node.js支持跨应用
- Appium [æpi:m]
- 是一款国外开源的自动化测试工具
- 适用平台:Android、iOS
- 支持语言:Java、Javascript、PHP、Python、C#、Ruby等主流语言
- 支持跨应用
- 社区活跃、资料丰富
2. Appium的特点介绍
开源;
支持Native APP/Web App/Hybird App
支持Android、iOS;
Server也是跨平台的,你可以使用Mac OS X、Windows或者Linux;
用Appium自动化测试不需要重新编译App;
支持很多语言来编写测试脚本,Java、Javascript、PHP、Python、C#、Ruby等主流语言;
Native App
- 原生应用,使用Android或iOS的标准SDK编写的应用。
Web App
- 移动浏览器应用,使用移动平台的浏览器访问的应用。
Hybird App
- 混合应用,把一个基于webview实现的功能进行包装的应用。
3. Appium基本原理
C/S架构,appium的核心是一个web服务器,提供了一套接口。他会接收客户端发送过来的命 令,然后在移动设备上运行命令,最后把运行结果通过HTTP响应包返回给客户端。
session,每个client连接到server以后都会创建一个session,自动化始终围绕一个session进 行。
下面罗列的App属于哪种类型?
selenium 与 appium的关系
- selenium是web端的自动化,appium是app端的自动化,它继承了webdriver(也就是selenium 2)
2. 移动自动化测试环境搭建
移动自动化测试环境步骤和核心组件介绍
1. 安装JDK
Java解释器-安卓应用或开发工具是使用java语言开发,必须使用jdk。
SDK环境依赖于JDK
- 版本:JDK1.8 - 地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html - 安装步骤 1、下载JDK1.8安装包,区分操作系统和系统位数; 2、根据指引安装JDK,尽量选择非中文目录; 3、配置环境变量: JAVA_HOME=C:\Program Files\Java\jdk1.8.0_151 (这里为JDK安装目录) 在Path中添加:%JAVA_HOME%\bin; 4、验证安装结果 打开命令行窗口,输入java -version,校验命令能否正常执行以及版本信息是否一致
2. 安装Android SDK
需要使用SDK中ADB 工具连接手机
使用ADB工具进行部 分手机测试工作
需要使用SDK中UIAutomatorViewer工具来查看APP元素 信息
地址:https://android-sdk.en.softonic.com/ 介绍:手机应用开发通用软件 安装步骤 1、下载安装包,并解压,尽量不要放置到中文目录; 2、解压之后的安装包只包含基本的SDK工具,它不包含Android平台或任何第三方库。需要使用SDK Manager安装所需要的工具; 3、配置环境变量: ANDROID_HOME=D:\Android\sdk (这里为JDK安装目录) 在Path中添加:%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools; 4、验证安装结果 打开命令行窗口,输入adb -version,校验命令能否正常执行以及版本信息是否一致
3. 安装Appium
需要安装appium服务端程序和python中调用的api库
Appium是识别脚本 并转发到手机去执行脚本指令(web服务) 中间桥梁
版本:1.20.2 地址:https://github.com/appium/appium-desktop/releases 安装步骤: 下载安装包后直接以管理员方式安装,下一步到最后即可 配置到系统环境变量
4. 安装Appium-python库
需要安装appium服务端程序和python中调用的api库
说明:编写测试脚本时所需要的api包
安装步骤
直接打开CMD,通过PIP命令在线下载 pip install Appium-Python-Client
验证安装结果
输入pip list,在列表清单中如果可以找到安装Appium-Python-Client则表示成功 - eg: pip install Appium-Python-Client==2.7.1
5. 安装模拟器
实际测试APP所在的容器,可以是真机也可以是模拟器
版本:3.0未定版本 安装步骤: 下载安装包后直接以管理员方式安装,下一步到最后即可 - 解决夜神模拟器adb connect 127.0.0.1:62001提示 cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061) https://blog.csdn.net/DaisyCold/article/details/111477842 问题描述: Nox夜神模拟器开启后执行adb devices提示如下: C:\Users\Administrator>adb devices * daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached 执行adb connect 127.0.0.1:62001,执行结果如下: C:\Users\Administrator>adb connect 127.0.0.1:62001 cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061) adb sever version (36) doesn't match this client(41);killing... 原因解析: adb版本不对,Android SDK的版本和模拟器的adb版本不一致,使用命令adb version查看Android SDK的adb版本,再使用Nox_adb version查看夜神模拟器的adb版本。若版本不一致,则采用下述解决方案。 解决方案: 将Android SDK的adb替换掉模拟器的adb即可。模拟器adb路径:{安装Path}\Nox\bin 步骤一: 找到Android SDK的adb文件路径:{安装Path}\android-sdk\platform-tools 步骤二: 将上面三个adb文件复制到模拟器的adb文件路径下,替换掉模拟器adb路径下的文件。如下 步骤三: 再将模拟器adb路径下的nox_adb.exe文件重命名为nox_adb_bat.exe,再复制一份Android SDK的adb.exe文件到模拟器adb路径下并重命名为Nox_adb.exe 步骤四: 替换完成后,使用命令adb version和Nox_adb version 查看SDK和模拟器的adb版本是否一致。若一致,重新打开模拟器使用命令 adb connect 127.0.0.1:62001 连接模拟器即可。
3. ADB调试工具介绍
- 说明:ADB 全名 Android Debug Bridge,是一个手机调试工具
1. adb工作原理
- Client端:运行在开发机器中,即你的开发电脑,用来发送 adb 命令;
- Server端:同样运行在开发机器中,用来管理 Client 端和手机的 Daemon 之间的通信。
- Daemon守护进程:运行在调试设备中,手机或模拟器,用来接收并执行 adb 命令;
4. adb常用命令
1. adb常用命令 - 获取包名和界面名
包名(package):决定程序的唯一性(不是应用的名字)
界面名(activity):目前可以理解,一个界面名,对应着一个界面
命令
- Mac/Linux
- adb shell dumpsys window windows | grep mFocusedApp
- adb shell dumpsys window | grep usedApp
- Window
- adb shell dumpsys window windows | findstr mFocusedApp
- adb shell dumpsys window |findstr usedApp
- Mac/Linux
获取右侧《设置》应用的包名和界面名信息:
注意
在获取之前必须先手工进入所要获取的信息的界面
报错问题描述
- android代码配置了不允许外部程序启动
方式一:找到启动页面,从启动页面启动,跳转指定页面。
- adb shell dumpsys package 包名
方式二:修改源代码,直接启动指定页面
2. adb常用命令 - 文件传输
上传文件
- 上传文件adb push 电脑的文件路径 手机的文件夹路径
- 将桌面的 a.txt 发送到手机的 sd 卡
- adb push 路径/a.txt /sdcard/
下载文件
- adb pull 手机的文件路径 电脑的文件夹路径
- 将手机的 sd 卡的 a.txt 拉取到桌面
- adb pull /sdcard/a.txt 本地文件夹路径
3. adb常用命令 - app启动时间
测试人员对于APP的启动速度必须进行测试!
- 启动app
- adb shell am start -W 包名/启动名
- 启动app
结果说明
- ThisTime :该界面 ( activity ) 启动耗时(毫秒)
- TotalTime:应用自身启动耗时 = ThisTime + 应用 application 等资源启动时间(毫秒)
- WaitTime :系统启动应用耗时 = TotalTime + 系统资源启动时间(毫秒)
测试通过标准
- 需求有明确的启动时间指标
- 参考同类软件,启动时间不能大于竞争对手的启动时间
4. adb常用命令 - 获取手机日志
测试过程中发现bug,获取日志信息
获取错误日志步骤
- 打开被测应用程序,进入到触发缺陷的位置
- 使用查看日志命令: adb logcat
- 触发缺陷
- 获取日志信息 adb logcat > d:\xx.log
注意:
- 一般的情况下留意Error错误级别的日志。另外类似
- 如上图中的一些异常错误日志信息。在触发错误日志时及时ctrl+c掐断日志刷新。
5. adb常用命令 - 其它指令
序号 | 命令 | 说明 |
---|---|---|
1 | adb install 路径/xx.apk | 安装 app 到手机 |
2 | adb uninstall 包名 | 卸载手机上的 app,需要指定包名 |
3 | adb devices | 获取当前电脑已经连接设备和对应的设备号 |
4 | adb shell | 进入到安卓手机内部的linux系统命令行中 |
5 | adb start-server | 启动 adb 服务端,出 bug 时使用可以重启服务器,先关闭再启动 |
6 | adb kill-server | 停止 adb 服务端,出 bug 时使用可以重启服务器,先关闭再启动 |
7 | adb --help | 查看 adb 帮助,命令记不清楚时有用 |
8 | adb connect ip:端口 | 连接手机/模拟器 |
5. UIAutomatorViewer
1. UIAutomatorViewer查看元素信息
UIAutomatorViewer:定位元素的时候必须根据元素的相关特征来进行定位,而 UIAutomatorViewer 就是用来获取元素特征的。
工作栏区(上)共有4个按钮 【打开已保存的布局】,【获取详细布局】,【获取简洁布局】,【保存布局】
查看APP元素信息步骤
进入SDK目录下的目录:
- mac 在 tools/bin 目录下,打开 uiautomatorviewer
- windows 在 tools 目录下,打uiautomatorviewer.bat
电脑连接真机或打开android模拟器
启动待测试app
点击 uiautomatorviewer 的左上角 Device Screenshot (从 左数第二个按钮)
点击希望查看的控件
查看右下角 Node Detail 相关信息
在打开工具后会有一个黑屏窗口,不能关闭!!
演练
查看《设置》应用设置面板界面【提示音和通知】的元素信息。
2. UIAutomatorViewer使用常见问题
问题一:UiAutomatorViewer闪退
- 通常是由于jdk版本不兼容导致,一般情况下使用jdk1.8
问题二:点击捕获界面元素信息报错
- 通常是因为UiAutomatorViewer连接不到模拟器/手机导致,只需要重置adb服务即可
- 打开手机开发者调试
- adb kill-server # 关闭adb服务
- adb start-server # 启动adb服务
- 通常是因为UiAutomatorViewer连接不到模拟器/手机导致,只需要重置adb服务即可
一定要养成独立解决问题的能力!!!
3. 演练
使用adb命令测试出淘宝App的启动时间的是否满足需求?启动时间必须 ≤ 1s
使用UiAutoMatorViewer获取的淘宝App搜索输入框下面列元素信息?
- class属性值
- ID属性值
- text属性值
- content desc属性值
使用adb获取淘宝搜索商品产生日志信息?
6. 移动自动化测试入门示例
1. 移动自动化启动app基础脚本
- 测试环境准备
- 打开模拟器
- 启动Appium服务器
- 获取要测试APP的包名/界面名
2. 初始化配置项介绍
platformName:需要连接的手机的平台(不限制大小写)
platformVersion:需要连接的手机的版本号(比如 5.2.1 的版本可以填写 5.2.1 或 5.2 或 5 ,以此类推)
devicesName:需要连接的手机的设备号(andoird平台下,可以随便写,但是不能不写)
appPackage:需要启动的程序的包名
appActivity:需要启动的程序的界面名
Remote:
- Remote第一个参数:连接到appium的接口地址,appium服务器部署在本机,4723为应用端口,wd/hub为接口地址
from appium import webdriver """ 打开模拟器 启动Appium服务器 获取要测试APP的包名/界面名 """ # 定义字典变量 desired_caps = {} # 字典追加启动参数 # 平台名 android / ios 不限制大小写 desired_caps["platformName"] = "Android" # 系统版本号 desired_caps["platformVersion"] = "7.1.2" # adb链接 ios不需要,android 不检测内容但不能为空 desired_caps["deviceName"] = "127.0.0.1:62001" # 要启动应用的包名: adb shell dumpsys window windows | grep mFocusedApp desired_caps["appPackage"] = "com.android.settings" # 要启动应用的界面名 desired_caps["appActivity"] = ".Settings" # 输入内容设置中文 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver # /wd/hub # wd 可以理解是WebDriver的缩写 # hub 是指主(中心) 节点,在selenium 分布式里中心节点 driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)