App功能测试:
1.业务逻辑正确性测试: 产品文档,隐性需求- 写成测试用例
2.兼容性测试:
1.系统版本:
android版本:官方版本(5.1 4.3 6.0…) 华为 小米 魅族
iOS版本:官方版本
2.分辨率:480x720 1920x 1080,关注点:图片展示
3.网络情况:2G 3G 4G Wi-Fi
3.异常测试:
1.热启动应用:应用置于后台,应用置于前台过程
2.网络切换&中断恢复
3.电话&信息中断恢复
4.升级&安装卸载测试
1.升级:系统升级,渠道升级,临近版本(1.0->1.1),跨版本(1.0->1.5)
2.安装卸载测试:系统版本,首次安装,覆盖安装,卸载后安装,卸载->安装->卸载
5.健壮性测试:
1.手机资源消耗:cpu,内存
2.流量消耗:图片,传输数据压缩
3.崩溃恢复测试:闪退,报错误
ADB:
1.帮助:adb —help
2.启动adb server:adb start-server
3.关闭adb server: adb kill-server
4.设备号:adb devices
5.系统版本号:adb shell getprop ro.build.version.release
adb -s 设备号 shell getprop ro.build.version.release
6.电脑文件发送到手机:adb push 电脑文件路径/文件 手机存储路径
7.从手机拉取文件: adb pull 手机文件路径 电脑文件存储路径
8.查看手机运行日志:adb logcat 扩展 可以通过过滤报名取到指定app运行日志(mac/linux:| grep 包名 win: | findstr 包名)
9.进入手机shell命令行: adb shell 可以操作类Linux命令 top 过滤app占用资源
10.获取app包名和启动名:
1.mac/linux:adb shell dumpsys window windows | grep mFocusedApp
2.win:adb shell dumpsys window windows | findstr mFocusedApp
adb -s 设备号 shell dumpsys window windows | findstr mFocusedApp
11.安装apk到手机:adb install apk文件路径
12.卸载app:adb uninstall 包名
13.获取app 启动时间:adb shell am start -W 包名/启动名
14.指定某台设备:adb -s 设备号
Appium:
appium: 封装android官方自动化工具uiautomator
appium原理图:脚本 <-> appium服务 <-> 手机端 ->uiautomator
appium声明手机驱动对象:webdriver.remote(服务地址,启动参数)
关闭app: close_app() # 关闭当前app 但不关闭driver
关闭驱动对象: quit() # 退出手机驱动对象,同时关闭所有关联窗口
启动新的app:start_activity(包名,启动名)
appium-安装app:install_app(app在电脑端的路径)
appium-卸载app:remove_app(包名)
判断app是否安装:is_app_installed(包名) # 安装返回True, 未安装:返回False
appium-电脑文件发送到手机:push_file(手机存储路径,data) # data:base64编码数据
appium-从手机拉取文件:pull_file(手机存储路径) # 返回是base64编码数据
获取当前屏幕内元素结构:page_source # 返回的是<<当前>>屏幕
定位元素:元素的基本定位基于<<当前屏幕范围内>>展示的可见元素。
单个元素定位:
1.id:find_element_by_id(id_value)
2.class: find_element_by_class_name(class_value)
3.xpath: find_element_by_xpath(xpath_value)
常用xpath语句://*[contains(@text,’要查询的内容’)]
注意:当有多个相同的属性值时,通过单个元素定位方式,默认选取第一个。
一组元素定位:
1.id:find_elements_by_id(id_value)
2.class: find_elements_by_class_name(class_value)
3.xpath: find_elements_by_xpath(xpath_value)
显示等待:
在一定超时时间范围内,每隔一段时间去搜索一次,搜索到返回定位对象,没有搜索到直到到达超时时间报超时异常
WebDriverWait(驱动对象,超时时间, 搜索元素间隔)\
.until(lambda x: x.find_element_by_id(“属性值”))
业务:进入设置 - 点击更多 - 移动网络 - 关闭移动数据网络漫游
app元素信息基本操作:
1.click()
2.send_keys(“发送的数据”)
注意:如果要发送中文,服务端启动参数需要配置:
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
3.clear():防止默认值,业务需求
4.text:获取元素文本内容
5.get_attribute(属性名)获取元素属性值,注意:属性名 不一定等于 元素属性key值
value='name' 返回content-desc / text属性值
value='text' 返回text的属性值
value='className' 返回 class属性值,只有 API=>18 才能支持
value='resourceId' 返回 resource-id属性值,只有 API=>18 才能支持
6.location:获取元素在屏幕上坐标
7.获取包名方法:current_package
8.获取启动名:current_activity
app元素事件操作:
1.swip滑动:从一个坐标滑动到另外一个坐标,可以设置持续时间 方法:swipe(start_x, start_y, end_x, end_y, duration=None)
2.scroll:从一个元素滑动到另外一个元素,直到页面自己停止 方法:scroll(origin_el, destination_el)
3.drag_and_drop:从一个元素滑动到另外一个元素,第一元素替代第二个元素位置 方法:drag_and_drop(origin_el, destination_el)
4.background_app:热启动,将app置于后台一段时间 方法:background_app(秒数)
app手机操作api
1.获取手机时间:device_time
2.获取手机分辨率 :get_window_size() 扩展:根据分辨率扩展做一些滑动操作
3.发送键值到设备执行对应键值的操作:keyevent(key对应的值 讲义找/方法中提供的官网地址):
4.操作手机通知栏:open_notifications() 建议:通过xptah的包涵语法取值/点击操作
5.获取手机当前网络:network_connection 返回网络类型值 0 1 2 4 6
6.设置网络(可能需要超级管理员权限)set_network_connection(网络类型值->讲义/方法当中有)
7.手机截图:get_screenshot_as_file(存储文件路径+文件名)
环境安装:
1.安装Nodejs,appium-doctor
2.安装Appium客户端
3.安装python,配置环境变量
4.安装pycharm
5.安装appium,直接在命令提示窗口中 输入pip install Appium-Python-Client
6.在pycharm中验证appium是否安装成功,import appium不报错
7.安装android studio 和SDK,并安装虚拟机,安装虚拟机选择最新版本的SDK
ADB命令总结:
1.帮助:adb —help
2.启动adb server:adb start-server
3.关闭adb server: adb kill-server
4.设备号:adb devices
5.系统版本号:adb shell getprop ro.build.version.release
adb -s 设备号 shell getprop ro.build.version.release
6.电脑文件发送到手机:adb push 电脑文件路径/文件 手机存储路径
7.从手机拉取文件: adb pull 手机文件路径 电脑文件存储路径
8.查看手机运行日志:adb logcat 扩展 可以通过过滤报名取到指定app运行日志(mac/linux:| grep 包名 win: | findstr 包名)
9.进入手机shell命令行: adb shell 可以操作类Linux命令 top 过滤app占用资源
10.获取app包名和启动名:
1.mac/linux:adb shell dumpsys window windows | grep mFocusedApp
2.win:adb shell dumpsys window windows | findstr mFocusedApp
adb -s 设备号 shell dumpsys window windows | findstr mFocusedApp
adb shell dumpsys activity activities | findstr "Run"
11.安装apk到手机:adb install apk文件路径
12.卸载app:adb uninstall 包名
13.获取app 启动时间:adb shell am start -W 包名/启动名
14.指定某台设备:adb -s 设备号
Appium报错
1.PID 15356 does not have permission android.permission.CLEAR_APP_USER_DATA to clear data of package com.android.settings
解决:Android系统设置中的开发者选项 - OEM锁没打开
2.selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command.
解决:手机重新连接,
定位元素:
1)控制真机,需要在appium客户端创建一个Session,需要配置手机 系统,版本,手机设备号,app的包名,启动名,不初始化手机app信息等,
2)对于虚拟机,下载SDK,需要最新版本的SDK,新建模拟器,在sdk\tools 路径下 uiautomatorviewer.bat用于定位元素
定位元素常用:driver.find_element_by_xpath("//*[contains(@text,'声音')]").click()
data = WebDriverWait(driver, 5, 1).\
until(lambda x: x.find_element_by_id("com.android.settings:id/search"))
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
get_attribute(属性名)获取元素属性值,注意:属性名 不一定等于 元素属性key值
value='name' 返回content-desc / text属性值
value='text' 返回text的属性值
value='className' 返回 class属性值,
value='resourceId' 返回 resource-id属性值,