一、什么是app测试?什么是app自动化测试?
概念:所谓app测试也称之为移动测试,通俗易懂的理解就是测试我们平时手机使用的程序。那什么是app自动化测试呢?
通常情况下是随app产品不断迭代更新,给测试⼈员也增加了测试⼯作量,特别是⼤量繁琐的回归测试。⾃动化测试是应对产品不断迭代更新的辅助测试⼿段(主要是针对回归测试),最终⽬的是为了保证产品质量。简而言之就是自动化的有点就是可重复、效率高,增加软件信任度。
下载300G软测学习资料包【视频教程+PPT+课件+项目源码】
编辑切换为居中
添加图片注释,不超过 140 字(可选)
二、app测试的主要内容有那些
APP功能测试是指测试你这个APP的所有功能点是否能够验证通过。APP功能测试的测试用例设计需要结合产品需求和开发设计文档。这里以测试微博APP为例:
1. 发布微博,从界面上看有文字长度,是否添加图片,是否有话题,是否有@别人等等。2. 发布微博的操作是否符合用户体验,选择照片,选择要@的人是否符合人类的认知3. 发布微博这样一个动作肯定是和服务器交互的,那么需要考虑到各种网络因素4. 发布微博是调用哪个api?有哪些参数?失败了会怎么样?是否会自动重试?5. 发布微博的控件是否有native的还是webview,还是混合的结构?6. 考虑一些android特别的交互,比如home,menu,长按home,发布到一半来电,关机,待机等7. 发布微博,从java而言调用了什么方法做请求的?httpclient?怎么判断成功,失败了又是什么逻辑
app兼容性要考虑的点主要包括手机型号、手机的系统版本、及屏幕分辨率(覆盖主流)除了这三个重点考虑的点还需要考虑网络(2G\3G\4G\5G\WIFI)的兼容性以及手机硬件(手机按钮及耳机蓝牙设备)兼容性和手机软件(定位、地图app等)兼容性。
app安装需要考虑的点:在不同手机、不同系统版本上安装、从不同渠道进行安装、安装时出现异常(关机、断网)恢复后能不能正常安装,安装时内存不足、安装时手动取后再安装、运行时覆盖安装。
app卸载需要考虑的点: 正常卸载、运行app时卸载、取消卸载、卸载时关机、卸载之后遗留数据检查等
app升级需要考虑的点:临近版本升级、跨版本升级、不同渠道升级、升级提醒成功
app的交叉事件测试主要是指多个应用之间是否有冲突,比如使用app时拔打电话、收发短信、连接耳机或蓝牙设备、旋转屏幕、电量告警、插拔充电器等等
当前手机app都会有push推送功能,而在web系统中是没有所,所以push也可以做为一个专项来进行测试,比如测试push的业务规则、push推送的用户是否正确、push推送消息的跳转、以及push推送关闭后是否正常等。
由于app软件是安装在手机的操作系统之上的,为了保证app能够在长时间内运行操作不会出问题,所以需要做稳定性测试,稳定性测试需要用到monkey工具,monkey工具是基于命令行的方式运行的,通过这个工具长时间来操作对应的app,以此来检测app会不会出现假死(ANR)或者崩溃的问题。
弱网测试是指手机app在网络不好的场景下,运行操作app,以此检测app会不会出现异常闪退、假死、以及异常提示信息等各种情况,弱网测试的重点是要模拟出各种复杂的弱网环境,一般都会借助于一些工具来模拟弱网环境,比如fiddler、charles等工具。
8、App性能测试
app的性能测试主要是指app运行操作过程当中,监测当前手机系统的一些性能指标,以此来确定app的性能是否会影响到用户的体验。app的性能指标主要包括以下几个:CPU、内存、启动速度、电量、流量以及流畅度。
三、App测试如何搭建环境
1、java sdk
(1)下载,安装
(2)配置 JAVA_HOME(配置下载好的java路径,比如:C:\Java\jdk1.8.0_45,配置在我的电脑右击属性——高级系统设置——环境变量——系统变
(3)配置PATH(找到系统变量里面的path,双击——新建,复制路径bin,比如:%JAVA_HOME%\bin)Windows 10 的系统举例
2、Android SDK
(1)解压(百度搜索Android SDK下载,然后看别人的博客Android SDK的下载与安装 - 菜鸟学飞ing - 博客园,官网不能直接下载)
(2)配置ANDROID_HOM(配置Android路径,比如:D:\android-sdk_r24.4.1-windows\android-sdk-windows)根据自己的位置配路径。
(3)配置PATH两个路径(比如:D:\android-sdk_r24.4.1-windows\android-sdk-windows\tools,D:\android-sdk_r24.4.1-windows\android-sdk-windows\platform-tools)
3、虚拟机安装
(1)使用夜神模拟器或其他模拟器(把Android里的platform-tools文件里的adb.exe和模拟器里面的adb.exe和nox_adb.exe都替换成platform-tools里,nox_adb需要重名后在替换)
(2)使用真机
(1)手机通过usb线连接电脑
(2)在手机上打开文件传输(通知栏,手机正在充电)
(3)在电脑上会发现多了一个cd驱动器,里面是手机驱动
(4)安装驱动,电脑的设备管理器中就可以看到型号了
(5)开启开发者模式:手机——设置——关于手机——版本号(多次点击)
(6)打开usb调试;手机——设置——开发者选项——usb调试(打开)
环境搭建
四、app测试的ADB服务
1、定义
就是一个 Android Debug Bridge 安卓调试桥
即包含ADB服务,也包含了与服务对应的Client
2、关系
会在电脑上创建出来一个服务(ADB服务)
手机连上电脑后,都会与服务建立连接
要想发送指令给手机, 需要把指令发送到服务中。
3、作用
通过命令行去操作手机
4、主要命令
a:服务 (如果发现代码连不上手机了)
adb kill-server
adb start-server
b:查看设备
adb devices
c:进入手机终端
adb shell
d:获取信息
adb shell getprop ro.build.version.release 获取手机android版本
adb shell dumpsys window windows | findstr mFocusedApp 获取手机当前运行的程序和界面的名称
e:文件传输
adb push 电脑上的文件 手机上的位置
adb pull 手机上的文件 电脑上的位置
f:软件安装卸载
adb install 电脑上的apk文件路径 安装应用
adb uninstall 应用的包名
g:获取其他信息
adb shell am start -W 包名/.启动名
一般我们去做app自动化会选取 Appium测试工具
优点:支持的语言多、支持的平台多
环境搭建
安装appnium的程序
在python中安装 Appium-Python-Client
安装selenium和appium的客户端
安装被测试app六、编写python自动化代码
1. 连接设备
组装一个字典,注明平台、系统版本、名称
#注明要打开的应用和界面的名称
1from appium import webdriver
# server 启动参数
1.desired_caps = {}
2.desired_caps['platformName'] = 'Android'
3.desired_caps['platformVersion'] = '5.1'
4.desired_caps['deviceName'] = '192.168.56.101:5555'
5.desired_caps['appPackage'] = 'com.android.settings'
6.desired_caps['appActivity'] = '.Settings'
# 从appium库里面导入driver对象
1.# driver = webdriver.Remomte('appnium程序的地址','一个字典,要获取设置的要求')
2.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
2. 执行操作
1.# driver.xxx
2.# element = driver.find_element_by_xx()
3.# element.xxx
3. 退出
1.driver.close_app()
2.driver.quit()
七、风险评估和分析事项自动化测试的主要风险分析主要有一下几点:
(1)测试用例的覆盖率。测试人员开发的测试用例覆盖率是否足够全面,影响了最终的测试效果和测试执行效率。
(2)测试结果的准确程度。测试结果的准确度直接影响最终产品的质量,以及后续对项目进行二次改动和调试的工作难度。
(3)自动化代码维护。因为自动话的脚本需要进行编写和维护这个时间精力成本比较大。(一些数据和关键字驱动的自动化测试框架,应该尽可能的减少代码的更改和优化量。自动化框架的搭建和开发应该尽可能使用面向对象的编程思维进行搭建)。
(4)版本开发以及测试的时间进度。一般如果项目比较稳定,功能更新和迭代周期较长的,都建议选择自动化测试,可以提高测试效率并且高精度的保障产品质量。
(5)开发对控件元素增修改的程度。需开发人员尽可能地用name元素,并且尽量保证开发结果和UI设计保持一致,不要大幅度的修改。这样做的目的是测试工程师能够根据需求中的设计做准确性测试,也方便测试工程师编写自动化脚本提高工作效率。