App自动化测试
一、App环境搭建及App自动化测试原理
1、安装jdk,配置环境变量
1.系统变量—>新建JAVA_HOME变量,变量值填写jdk的安装目录 D:\JavaJdk\bin
2.系统变量—>寻找Path变量—>编辑,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3.系统变量—>新建CLASSPATH变量;变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
4.检验JDK是否配置成功 运行cmd 输入java -version,如果出现如下结果,则说明JDK环境变量配置成功
2、Android SDK环境安装
1.解压SDK并配置SDK的环境变量
(1)SDK的下载
下载版本选择:android-sdk_r24.4.1-windows.zip
(2)SDK的安装
进入D:\android-sdk-windows目录,双击SDK Manager.exe下载对应的包:
a.以下三个Android工具包必须安装:只需要下载最新的版本就行了。
Tools下:
1. Android SDK Tools
2. Android SDK Platform-tools
3. Android SDK Build-tools
b.Extras(附加设备)
1.Android Support Repostory
2.Google USB Driver
c.安卓版本:安装和模拟器的安装版本一致。现在android 5开发的场景多一些
1.SDK Platform
2.ARM EABI v7a System Image
3.Sources for Android SDK
(3)配置SDK的环境变量
1、新建:
变量名:ANDROID_HOME
变量值:D:\App\android-sdk_r24.4.1-windows\android-sdk-windows(SDK的实际安装路径)
2、编辑PATH,在最后面添加:
D:\App\android-sdk_r24.4.1-windows\android-sdk-windows\platform-tools
(如果原来PATH路径最后不是;则加一个;在添加下面内容)
3、严重是否安装并配置成功:
在dos中输入adb验证。
3、Appium Server安装
解压文件,执行.exe文件,即可
4、模拟器的安装
1、载夜神模拟器,版本选择最新版
2、被测app的安装
把apk包直接拖拽到夜神模拟器中安装
3、设置模拟器/真机的环境
a.启用设备的开发者选项,启动调试功能。
夜神模拟器:设置—>多次点击版本号直到出现提示[开发者选择]—>返回上一步能看到
[开发者选择]—>USB调试。
b.输入命令前:因为SDK下adb[在SDK安装目录的platform-tools目录下]和模拟器的nox_adb
[在夜神安装目录的bin目录下]版本不一致,所以需要把SDK路径下的adb.exe复制到模拟器的bin
路径下,重命名为nox_adb.exe,原来的nox_adb.exe先备份。
5、安装appium-python-client python第三方库
pip install appium-python-client
二、App自动化测试原理
如何通过代码操作不同操作系统(ios/Android)不同版本的手机终端
[自动化脚本] —发送指令—> [Appium Server] —转发指令—> [Android SDK环境(软件工具包/框架)] —操作手机终端—> [被测手机终端(模拟器/真机)]
三、Desired Capabilities-Appium自动化配置项
设置参数:
操作系统 platformName
版本 platformVersion
设备名称 devicName
包名 appPackge
入口启动页面 appActivity
四、常用ADB命令
1、连接模拟器
adb connect 127.0.0.1:62001
其他模拟器:雷神5555 夜神62001 mumu7555
2、查看连接的设备
adb devices
3、查看被测app的包名及入口启动页面
aapt dump badging apk的路径
package: name=‘xxxxxxx’ 包名
launchable-activity:name=‘xxxxx’ 启动页面
获取对应的包名和页面名
Mac/Linux: adb shell dumpsys window | grep mCurrentFocus
Window: adb shell dumpsys window | findstr mCurrentFocus
D:\App\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\29.0.3>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{4fafd7e u0 com.android.launcher3/com.android.launcher3.launcher3.Launcher}
com.android.launcher3 包名
com.android.launcher3.launcher3.Launcher 页面名
ADB调试工具
adb shell 查看手机文件
1、上传文件/下载文件
adb push 电脑的文件路径 手机的文件夹路径
adb push C:\Users\xiaoyang\Desktop\1.txt /data/
adb pull 手机的文件路径 电脑的文件夹路径
adb pull /data/1.txt C:\Users\xiaoyang\Desktop\
2、常用命令 app启动时间
3、adb获取手机日志
4、adb其他指令
五、python代码实现操作手机终端某个程序自动化测试
六、Appium日志的查看
python 自动化脚本如何操作手机终端过程:
1、自动化脚本发送http请求,请求参数:终端设备参数
2、创建会话
3、确认终端设备是否连接 并且确认安卓版本 确认设备参数是否与终端的设备是否一致
4、appium会推送一个包 AppiumBootstrap.jar 模拟器上 api包:appium server指令进行接收,操控手机端
5、相应http请求
6、下一http请求…
七、Appium元素定位工具(UIAutomatorView/Appium Desktop Inspector/weditor)
1.1 UIAutomatorView
Android SDK 自带的定位工具
位置:Android SDK/tools/uiautomatorviewer.bat
元素常见几个属性:
text
resoureid
class 元素标签
content-desc: 元素功能描述 语音播报
定位单个元素
driver.find_element(By.ID,resoureid)
driver.find_element(By.CLASS_NAME,class)
driver.find_element(By.XPATH,xpath)
driver.find_element_by_accessibility_id(content-desc)
1.2 Appium Desktop Inspector
appium server自带的定位工具
1.3 Weditor
Uiautomator2 python第三方库 appUi自动化测试框架
安装:
命令01: pip install Uiautomator2
命令02: python -m uiautomator2 init # 推送包到模拟器
命令03: pip install weditor
若 pip 下载的慢,可使用国内源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple weditor
确认安装: weditor --help
Appium-基础Api
一、app基础操作
1、应用跳转
driver.start_activity(appPackage,appActivity)
appPackage:要打开的程序的包名
appActivity:要打开的程序的界面名
2、获取包名和界面名
获取包名
driver.current_package
获取界面名
driver.current_activity
3、关闭驱动和app
关闭当前操作的app,不会关闭驱动对象
driver.close_app()
关闭驱动
driver.quit()
4、安装和卸载以及是否安装app
安装app,app_path为安装文件完整路径名
driver.install_app(app_path)
卸载app,app_id为app包名
driver.remove_app(app_id)
判断app是否安装,app_id为app包名
driver.is_app_installed(app_id)
5、置于后台
置于后台,seconds表示秒数
driver.background_app(seconds)
6、点击/输入/清空
点击
element.click()
输入
element.send_keys(‘内容’)
清空
element.clear()
如果send_keys 输入中文脚本报错,在设置设备参数中添加下面两条参数
desired_caps[‘unicodeKeyboard’] = True
desired_caps[‘resetKeyboard’] = True
7、获取元素信息-文本、位置和大小
element.text 文本
element.location 位置
element.size 大小
8、获取元素属性值
element.get_attribute(属性名)
获取resource-id ——> resourceId
获取content-desc ——> name
获取class ——> className
获取text ——> text
9、滑动和拖拽
swipe滑动
driver.swipe(start_x,start_y,end_x,end_y, duration=0)
start_x:起点x坐标
start_y:起点y坐标
end_x:终点x坐标
end_y:终点y坐标
duration:滑动这个操作,共持续的时间长度,单位:ms
10、scroll 滑动
从一个元素滑动到另一个元素,直到页面自动停止
driver.scroll(开始元素,结束元素,滑动时间=600)
从 应用滑动到更多
driver.scroll(driver.find_element(By.XPATH,‘//[@text=“应用”]‘),
driber.find_element(By.XPATH,’//[@text=“更多”]’),
3000)
11、drag_and_drop 拖拽
从一个元素拖拽到另一个元素,无惯性(精确滑动)
driver.drag_and_drop(开始元素,结束元素)
driver.drag_and_drop(driver.find_element(By.XPATH,‘//[@text=“应用”]‘),
driber.find_element(By.XPATH,’//[@text=“更多”]’),
1000)
二、高级手势-TouchAction
创建TouchAction对象
touch_action = TouchAction(driver)
调用高级手势对象提供所想执行的手势方法
touch_action.手势方法
执行手势
touch_action.perform()
轻敲
tap()
长按
long_press
*注意:所有手势都要通过执行perform()函数才会运行
也可以直接连续一行进行编写:
TouchAction(driver).手势方法.perform()
按下和抬起
touch_action.press() 按下
touch_action.release()抬起
移动和思考时间
模拟手指对元素或坐标的移动操作
TouchAction(driver).move_to(el=None)
模拟手指暂停到当前动作指定时间
TouchAction(driver).wait(ms=time).perform()
手机操作Api-获取分辨率和截图
driver.get_window_seze() 获取分辨率
deiver.get_screenshot_as_file(filename) 获取手机截图
获取和设置手机网络
0 None 没有任何模式
1 Airplane Mode 飞行模式
2 Wifi only Wifi模式
4 Data only 数据流量
6 All network on WIfi + 数据流量模式
获取手机网络
driver.network_connection()
设置手机网络
driver.set_network_connection(2)
使用Uiautomatorviewer连接真机报错Unexpected error java long (获取UI层次结构时出现意外错误)
android8以后sdk自带的uiautomator直接打开,截取不到机器界面信息
解决
在D:\Java\android-sdk\tools(路径自己定义就行)目录下创建app.uix文本文件
在D:\Java\android-sdk\tools(路径自己定义就行)目录下创建app.png文本文件
执行以下adb命名
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix D:\Java\android-sdk\tools\app.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png D:\Java\android-sdk\tools\app.png
运行uiautomatorviewer.bat,导入文件
使用uiautomatorviewer连接模拟器页面报错:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn’t exist!
解决方法1:
杀死adb服务器并重新启动它。
adb kill-server
adb start-server
命令面板执行这两条命令后再次连接即可
解决方法2:
命令面板运行:adb reconnect
运行后再次点击连接即可