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

App自动化测试笔记相关推荐

  1. App自动化测试笔记(十一):综合案例

    短信案例 需求 在<短信>应用中,进入发送短信页面,在姓名和内容栏中,输入对应的数据,并点击发送. 包名界面名:com.android.mms/.ui.ConversationList 发 ...

  2. App自动化测试笔记(十二):Yaml数据

    目录 Yaml数据格式 应用场景 字典和列表相互嵌套 规律 字典嵌套字典 字典嵌套列表 列表嵌套字典 列表嵌套列表 yaml其他数据类型 Yaml读写 读取yaml 写入yaml Yaml数据驱动应用 ...

  3. App自动化测试-原理与安装-Appium+Python+网易mumu模拟器

    App自动化测试(学习笔记一)--Appium原理与安装 APP自动化初始 Appium原理 Appium安装 Java jdk 1.8版本 Android sdk appium desktop ap ...

  4. 16 移动端app自动化测试 - 软件测试

    软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏. 本节内容:移动端app自动化测试 文章目录 ...

  5. app启动页数秒加载 代码_干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)

    1. 常见痛点 App 自动化测试中有些常见痛点问题,如果框架不能很好的处理,就可能出现元素定位超时找不到的情况,自动化也就被打断终止了.很容易打消做自动化的热情,导致从入门到放弃.比如下面的两个问题 ...

  6. python app自动化测试框架_appium+python,app自动化测试框架

    基于appium的app自动化测试框架 基于appium框架的app自动化测试 App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于we ...

  7. APP自动化测试系列之3种元素定位工具

    VOL 179 30 2020-11 今天距2021年31天 这是ITester软件测试小栈第179次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

  8. APP自动化测试系列之appium-desktop配置及录制脚本

    VOL 177 23 2020-11 今天距2021年38天 这是ITester软件测试小栈第177次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

  9. APP自动化测试系列之获取Android的Activity 和 Package

    VOL 174 11 2020-11 今天距2021年50天 这是ITester软件测试小栈第174次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-195 1的个数
  2. 交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...
  3. 当新零售遇上 Serverless
  4. java 数据库 字段名 转_Java正则表达式实现表字段名和驼峰式命名转换
  5. BPM与Workflow的区别
  6. ReviewForJob——堆排序
  7. 学术联赛 | 运用知识图谱技术,赋能多领域应用 ——“未来杯”AI学术联赛总决赛暨颁奖典礼圆满落幕...
  8. python语言例子_【Python】SimPy的使用示例-Go语言中文社区
  9. 这几天整理的 飞秋官方下载
  10. 在Java eclipse 中Spring Boot工具安装步骤
  11. 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
  12. linux中匹配邮箱地址,Python正则匹配邮箱和电话号码
  13. Scapy:send函数剖析(参数、返回值、应用)
  14. 用Java做一个基于Swing的多人网络聊天室
  15. PHP学习总结(二)
  16. 华为3Com孤单上路
  17. 8b/10b编码技术系列(二):Disparity、RD、8b/10b编码
  18. web网页设计实例作业 ——中国茶文化(30页) HTML网页制作作品 简单文化网页设计成品 dreamweaver学生网站模板
  19. 台式计算机经常使用的硬盘是什么尺寸,台式机固态硬盘多大合适
  20. 如何在Ubuntu 20.04 / 18.04服务器中进入救援模式或紧急模式?

热门文章

  1. 天马杯全球高校科技创新大赛
  2. redis缓存mysql_redis缓存mysql数据
  3. Flask简单调用Redis、MySQL和生成token及token验证
  4. hadoop 各个版本下载地址。
  5. cojs 1532. [IOI2001]移动电话
  6. .NET对JAVA进行AES加密(SHA1PRNG)及解密方法
  7. 使用tls生成腾讯云的密钥
  8. 2017研究生乒乓球比赛记录
  9. lingo基础入门Day 7——lingo应用之运输问题与生产问题总结
  10. 使用腾讯地图批量转换地址为经纬度坐标