Android-聊聊自动化测试真经

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

👉即将学会

了解到自动化测试的内容,知道如何入手,并且带有实践过程。

👉背景

🙈小空和🙎小芝:今天小空和小芝很安静,没有故事,不过一起吃了土豆饼。

👉实践过程

有时候开发完会发现莫名奇妙的bug,bug 来了咱不怕,那就解决呗。但是这 bug 贼得很,几个小时甚至几天出来调戏你一次,撒手就跑,就问你服不服。所以为了让 App 中的 bug 尽可能的减少,好好研究了下 Android 平台的自动化测试,在此总结一下。

自动化总纲

Android 平台的自动化测试可以从两个方向入手

  • Android 端的自动化测试框架
  • 各大云测试平台
  • 腾讯优测云测试平台
  • 华为开发者联盟
  • Testin 云测

测试的内容包括:

  • 兼容性测试:安装、启动、登录、遍历、卸载
  • 功能测试:行为检测、手势模拟、功能验证
  • 稳定性测试:CPU/内存/Crash/ANR/功能异常等
  • 场景测试:模拟真实网络场景,2G、3G、4G、wifi 网络的切换

Android 自动化测试框架

通过代码完成相应的测试用例,尽量减少人工的重复性操作,提升工作质量解放双手去创造更有意思的。伴随的缺点就是对测试人员的开发需求要高一些,而且有限,作为辅助开发的选择。

各大云测试平台

可以提供市面上大部分机型,兼容性测试很广,测完之后都会有详细的测试报告,位置定位比较明确。缺点嘛,就一个「收费」。毕竟人家也是要恰饭的。

真经上卷:自动化测试框架

第一重-ADB

开始前,我们先熟悉下ADB几个命令,因为底层的操作其实就是adb的各种真气流转,这点要了解。

安装卸载
adb install 安装包地址  adb uninstall 包名
adb  获取包名/界面名
adb shell dumpsys window windows | findstr mFocusedApp
发送文件到手机
adb push 电脑文件路径 手机文件夹路径
从手机拉取文件
adb pull  手机文件路径 电脑文件夹路径
打印日志信息
adb logcat 找到异常E级别
复制代码

第二重-UIAutomator2

背景介绍

Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有缺点:

  1. 只能使用Java语言 ;
  2. Android版本大于4.4,Python大于2.7
  3. 必须每次被上传到设备上运行;

为了解决以上缺点,才有了uiautomator2。uiautomator2是一个Android UI自动化框架,支持Python编写测试脚本对设备进行自动化。

基本原理

uiautomator2的底层是基于Google uiautomator,原理是在手机上运行了一个http服务器,将uiautomator中的功能开放出来,然后再将这些http接口,封装成Python库。

安装uiautomator2

  1. pip install --pre uiautomator2
  2. pip install pillow

测试试验脚本

import uiautomator2 as u2
from time import sleep
d = u2.connect('192.168.1.66')
# 启动App
d.app_start("com.zhima.app")
# 搜索
d(resourceId="com.zhima.app:id/j0").click()
# 输入关键字
d(resourceId="com.zhima.app:id/p9").set_text("flyme")
# 搜索按钮
d(resourceId="com.zhima.app:id/tp").click()
sleep(2)
# 停止app
d.app_stop("com.zhima.app")
复制代码

此框架说到这就结束了,有兴趣的可自信修炼,因他不是跨平台的,我们先放一放,重点看第三重-Appium

第三重-Appium介绍

Appium 是一款「移动」的自动化测试框架,牛逼的地方在于支持 iOS 和 Android 原生和混生的移动 Web 应用程序,也就是跨平台。

Appium环境搭建

我们使用Appium和python来进行测试,所以需要安装Appium客户端以及Python环境

他们的执行顺序是:

python代码 -> Appium-python库 -> Appium -> 手机。

极速体验

  1. 打开手机模拟器/真机
  2. 打开appium工具
  3. 创建python项目
  4. 复制下面代码,并作微微修改

测试示例

from appium import webdriver
import time
desired_caps = dict()
# 平台的名字,大小写无所谓,不能乱写
desired_caps['platformName'] = 'Android'
# 平台的版本
desired_caps['platformVersion'] = '9'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = '123456'
# 要打开的应用程序
desired_caps['appPackage'] = 'com.huawei.systemmanager'
# 要打开的界面
desired_caps['appActivity'] = '.mainscreen.MainScreenActivity'
# 地址就是appium启动页面的地址端口
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5)
复制代码

到这就有一个简单的启动了,当然既然是自动化测试,单纯启动没什么用,所以我们就需要具体的操作view/控件,这个时候就需要借助UIAutomatorViewer

UIAutomatorViewer

他是用来扫描和分析Android应用程序的UI控件的工具,帮助你快速获取元素特征。

  1. 进入SDK目录下的目录
  2. mac 在 tools/bin 目录下,打开 uiautomatorviewer
  3. windows 在 tools 目录下,打开 uiautomatorviewer.bat
  4. 电脑连接真机或打开android模拟器
  5. 启动待测试app
  6. 点击 uiautomatorviewer 的左上角 Device Screenshot (从左数第二个按钮)
  7. 点击希望查看的控件
  8. 查看右下角 Node Detail 相关信息

有了特征值,后面我们就可以搞事情了。怎么办呢?利用Appium的api进行对应的操作即可

# 获取当前设备的分辨率
print(driver.get_window_size())
print(driver.get_window_size()["width"])
print(type(driver.get_window_size()["width"]))
# 点击
driver.find_element_by_id("com.android.settings:id/search").click()
# 清空所有文本内容
input_label.clear()
# 获取文本内容
eles = driver.find_elements_by_id("com.android.settings:id/title")
复制代码

还有更多API就不介绍了,代码是死的,人是活的,灵活运用,可以写出很多骚操作的测试用例。

网络异常,图片无法展示
|

其他的一些框架比如Espresso等,虽然也是Google自己出的,有不少优点,但是年久未更,放一放,以后再说,权当是普及。

真经下卷:云测试平台

第一重-腾讯优测云测试平台

图.png

收费高,pass!(图懒得传)

第二重-Testin

网络异常,图片无法展示
|

Testin 在云端部署了 300 多款 1000 多部测试终端,终端种类及数量都比较全面。

该平台也是收费的,但是具体的收费标准没有在官网上显示出来,只能联系商务客服。

第三重-华为开发者联盟

网络异常,图片无法展示
|

网络异常,图片无法展示
|

可以云端测试,远程调试,特点是免费的。但是只支持华为品牌。具体的报告日志详细。

测试主要包括:

  • 兼容性测试:华为这边提供所有华为手机的测试
  • 稳定性测试
  • 安装、启动、注册登录、遍历、卸载
  • Crash、ANR、UI、功能异常
  • 提供问题上下截图及异常截图

最终卷-返璞归真

当你使用很熟练了之后,过过脑子就基本能定位到bug模块,这时候可能用手操作是最快的。思想与手速相辅相成,唯快不破。

👉其他

📢作者:小空和小芝中的小空

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6月前
|
Android开发 iOS开发
android自动化编译
android自动化编译
|
3月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
201 4
Android性能测试——发现和定位内存泄露和卡顿
|
3月前
|
测试技术 Shell Android开发
Android 性能测试初探 (六)
本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了。
59 6
|
3月前
|
JavaScript 测试技术 Android开发
Android 性能测试初探 (四)
本文介绍了GPU在移动端性能测试中的重要性,并详细解释了过度绘制、帧率和帧方差的概念。针对GPU测试,文章列举了三项主要测试内容:界面过度绘制、屏幕滑动帧速率和平滑度。其中,过度绘制测试需遵循特定标准,而帧速率和平滑度测试则可通过软件或硬件方法实现。在软件测试中,使用Systrace插件和高速相机是两种常用手段。对于不同机型,帧率及帧方差的测试标准也需相应调整。
59 5
|
3月前
|
测试技术 Shell Android开发
Android 性能测试初探 (三)
本文承接《Android性能测试初探(二)》,深入探讨CPU与内存测试。介绍了移动端内存测试的重要性及其测试目标,并详细列举了不同状态下应用内存消耗情况的测试项目。此外,还提供了多种内存测试方法,包括使用`procrank`等工具的具体操作步骤。最后,文章也简要提及了CPU测试的相关内容,帮助读者更好地理解Android性能测试的关键要素。
56 5
|
3月前
|
测试技术 Shell 定位技术
Android 性能测试初探 (五)
聊聊大家不常关注的测试项- 功耗
59 3
|
3月前
|
算法 测试技术 Android开发
Android 性能测试初探 (二)
上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试)
51 4
|
3月前
|
测试技术 API Android开发
Android 性能测试初探 (一)
Android 性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试;一类为应用的性能测试。
55 3
|
3月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
7月前
|
安全 物联网 测试技术
构建未来:Android与IoT设备的无缝交互深入探索软件自动化测试的未来趋势
【5月更文挑战第30天】在物联网(IoT)技术快速发展的当下,Android系统因其开放性和广泛的用户基础成为了连接智能设备的首选平台。本文将探讨如何通过现代Android开发技术实现智能手机与IoT设备的高效、稳定连接,并分析其中的挑战和解决方案。我们将深入挖掘Android系统的底层通信机制,提出创新的交互模式,并通过实例演示如何在Android应用中集成IoT控制功能,旨在为开发者提供一套可行的指导方案,促进IoT生态系统的进一步发展。