移动端测试

余生长醉 提交于 2019-12-23 00:09:01

移动数据平台:

TalkingData 移动观象平台

App 功能测试

业务逻辑正确性测试:一句产品文档设计测试用例,加上隐性需求用例

兼容性测试:

系统版本:

android :4.4 5.0 6.0 7.0

iOS:原生系统:5.0

屏幕分辨率:

720 * 1280, 1920*1080 图片(根据分辨率做一些图片)

网络状态:

2g,3g,4g,5g wifi

异常测试:

热启动应用:应用由后台转换为前台的过程

考虑:1.仍然展示退到后台时的页面

2.希望初始化首页

网络切换和终端回复

1.网络切换:wifi->2g , 4g->3g 应用正常可用状态

2.终端恢复:4g->断网->4g,(下载2M 应用,1M断网.恢复网络(断点续传))

电话和信息中断恢复

电话:看视频->电话接10分钟->返回视频 app

信息:玩游戏->通知栏一个消息->不影响游戏体验

升级安装卸载测试:

升级: 临近版本升级(1.0>1.1)

跨版本升级(1.0->1.7)

保证升级后App可用状态

安装测试: 首次安装

卸载后安装

覆盖安装

保证app安装后可用,安装文件齐全​

卸载测试: 正常卸载

卸载后安装再卸载

保证卸载后,需要清理的文件全部清空,需要保留的文件存在

健壮性测试:

手机资源消耗:cpu,内存,耗电测试

流量消耗:数据流量,加载图片瞬间小号20M 图片压缩,数据压缩

崩溃恢复: app闪退,提示终止运行等等,保证自启动可用,手动启动可用

App 自动化测试

通过场景和数据的预设,把以认为驱动的测试行为转化为机器执行的一种过程

并不是所有功能都能进行自动化

例子: app 设计 500 条测试用例 2个人 5天 用例中有300条是主流业务可以通过脚本实现完成

优点:

  1. 高效

  2. 不需要人工干预

  3. 回归测试

安全测试: 通过一些安全测试工具

2.1 主流的移动端自动化工具

  • Robotium

    • 支持语言 Java

    • 仅 Android 系统

    • 不支持跨应用

  • Macaca

    • 支持语言:Java,Python,Node.js

    • Android,iOS

    • 支持跨应用

  • Appium 开源

    • 支持语言: Java,C#,Python, php, perl, ruby, Node.js

    • Android ,iOS

    • 支持跨应用

自动化工具的关注点
  1. 是否支持native,webview

  2. 是否支持获取toast

  3. 是否支持跨应用

2.2 Appium 环境搭建

2.2.1 Appium 客户端安装

2.2.1.1 Appium 背景介绍

  1. 官网: www.appium.io ,由SauceLab 公司开发

  2. Appium 是由nodejs 的express框架编写的Http Server,Appium 使用WebDriver 的json wire 协议,来驱动 Apple 系统的UIAutomation,Android 系统的UIAutomator

2.2.1.2 安装方式

1.运行 Appium-desktopx........1.2.7.exe

Host:127.0.0.1Port:4723

2.2.2 Appium-python 库安装

  • 命令行安装

pip install Appium-Python-Client
  • 安装包安装

    前提:python 已安装 setuptools 包

    安装setuptools :

    1. 解压setuptools-38.2.4.zip

    2. 进入解压后文件夹执行:python setup.py install

    3. 等俺安装完成无错误信息即可

    安装Appium-Python-Client

    1. 解压Appium-Python-Client-0.25.tar.gz

    2. 进入解压后文件夹执行命令:python setup.py install

    3. 等待安装完成,无错误信息即可

bootstrap.jar-->UIAutomator(官方自动化测试框架)

android 模拟器:https://www.genymotion.com/download

  • 声明手机驱动对象

只有声明驱动对象我们才可以让手机完成脚本的操作

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)# 手机启动参数desired_caps: 负责启动服务端时的参数设置,appium server 与手机端建立会话关系时,
desired_caps常用参数 
platformName 平台的名称:iOS,Android,or Firefox Os
platformVersion 设备系统版本号
deviceName 设备号iOS:instruments -s devices,Android: adb devices (随便写)
app 安装文件路径:/abs/path/to/my.apk or http://myapp.com/app
appActivity 启动的Activity
appPackage 启动的包

脚本内启动其他app

driver.start_activity(appPackage,appActivity)

关闭app

driver.close_app() #关闭当前操作的app,不会关闭驱动对象

关闭驱动对象

driver.quit()

关闭服务:adb kill-server获取设备号:adb devices获取系统版本:adb shell getprop ro.build.version.release​发送文件到手机:adb push 电脑端文件存储路径 手机端要存储路径拉取文件从手机:adb pull 手机端存储文件路径 电脑端需要存储路径​查看手机运行日志: adb logcat | grep 包名​手机shell 命令行: adb shell​获取app包名和启动名(手机必须打开对应app):adb shell dumpsys window windows | grep mFocusedApp​安装apk到手机: adb install ,apk文件存储路径卸载app从手机: adb uninstall 包名​获取app启动时间: adb shell am start -W 包名/启动名TotalTime:app 自身启动时间WaitTime:系统启动应用时间

安装apk:

driver.install_app("apk所在路径")

卸载app:

driver.remove_app("nameless.cp")

判断app是否安装在手机(存在返回True,不存在返回False)

boolean = driver.is_app_installed("nameless.cp")

判断通讯录:

boolean = driver.is_app_installed("com.android.contacts")

发送文件到手机:

imprt base64​with open(".test.txt",'r') as f: data = str(base64.b64encode(f.read().encode('utf-8')),'utf-8')driver.push_file(path,data)参数:path: 手机设备上的路径(例如:/sdcard/a.txt)data: 文件内数据,要求base64编码Python3.x 中字符都为unicode编码,而b64encode函数的参数为byte类型,需要先转码;生成的数据为byte类型,需要将byte转换回去.
从手机中拉取文件数据
import base64data = driver.pull_file(path) #返回数据为base64编码print(str(base64.b64decode(data),'utf-8')) #base64编码参数:    path:手机上的路径

拉取手机上文件数据并复制生成文件到电脑端

from appium import webdriverfrom time import sleepimport base64​# 启动参数desired_caps = {}# 设备信息desired_caps['platformName'] = 'Android'desired_caps['platformVersion'] = '7.0'desired_caps['deviceName'] = 'hePhone'​# 相关操作 app信息desired_caps['appPackage'] = 'com.android.launcher3'desired_caps['appActivity'] = '.Launcher'​# 声明手机驱动对象driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)​sleep(1)## driver.start_activity("com.android.contacts",".activities.PeopleActivity")## sleep(3)## #关闭app# driver.close_app()​# with 文件操作的方法# 发送电脑端文件到手机上# with open("./heheda.txt", 'r') as f:#     data = str(base64.b64encode(f.read().encode('utf-8')), 'utf-8')#     driver.push_file("/sdcard/heheda.txt", data)​# #拉取手机上文件数据# data= driver.pull_file("/sdcard/heheda.txt")# da = str(base64.b64decode(data),"utf-8")# print(da)​#拉取手机上文件数据并复制生成文件到电脑端data = driver.pull_file("/sdcard/heheda.txt")newf = open('gegeda.txt','w')newf.write(str(base64.b64decode(data),'utf-8'))newf.close()​​​sleep(1)driver.quit()

capabilities 启动参数列表 (网上查)

API 基础获取屏幕内元素

获取当前屏幕内元素结构

driver.page_source

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!