App自动化测试笔记

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属性值,


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值