当前位置 : 主页 > 手机开发 > 无线 >

移动端测试

来源:互联网 收集:自由互联 发布时间:2021-06-10
移动数据平台: TalkingData 移动观象平台 App 功能测试 业务逻辑正确性测试:一句产品文档设计测试用例,加上隐性需求用例 兼容性测试: 系统版本: android :4.4 5.0 6.0 7.0 iOS:原生系统:5.0 屏幕分

移动数据平台:

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.1
Port: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 base64
data = driver.pull_file(path) #返回数据为base64编码
print(str(base64.b64decode(data),‘utf-8‘)) #base64编码
参数:
path:手机上的路径

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

from appium import webdriver
from time import sleep
import 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

网友评论