实用速学!Airtest如何帮助我们检测包体是否需要覆盖安装?

简介: 实用速学!Airtest如何帮助我们检测包体是否需要覆盖安装?

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


1. 安装包体真的是一个简单的事情吗?



今天我们来聊一聊测试前的准备工作--“安装包体”。有同学看到这个可能会说,这不是很简单吗?直接用Airtest封装的 install 接口,直接装一下不就完事了吗?、


我们也希望是这么简单的,但实际上并不是,举个例子,如果该手机已经安装了一个相同包名的包体,那我们使用 install 安装的时候,设备就会提示我们是否需要覆盖安装,此时单纯的 install 接口就没法帮我们自动处理了。我们可能就需要在安装之前,事先判断一下,手机上是否已经安装了同名包体。


那进一步思考,究竟要不要执行覆盖安装呢(假设我们希望要安装的包体,比设备里已经安装的包体版本要高,才执行覆盖安装的操作)?这时我们就需要通过脚本判断下,我们想要安装的这个包体,是否比手机上已有的包体版本更高,才执行进一步的操作。


2. Airtest如何检测包体已经成功安装?



我们可以通过Airtest提供的下述2个接口,来判断一个包体是否已经成功安装在测试设备上:


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


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


以网易云音乐APP为例(游戏应用也是同理的):


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.core.android.android import *
auto_setup(__file__)
PACKAGE = "com.netease.cloudmusic"
android = Android()
print(str(android.check_app(PACKAGE)))
print("-----------------")
print(str(android.path_app(PACKAGE)))
复制代码


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


通过接口判断出设备是否已经成功安装了包体之后,我们就可以做出如下处理:


  • 如设备未安装包体,则直接执行安装
  • 如设备已安装包体,则进一步判断是否需要覆盖安装


3. Airtest如何检测包体是否需要覆盖安装?



检测是否需要执行覆盖安装的思路大概是:


  • 获取本地apk的版本号(即准备安装到手机上的那个包体)
  • 获取手机里已经安装好的包体的版本号
  • 对比获得的2个版本号,如果本地apk版本号大于手机里包体的版本号,则判断需要执行覆盖安装


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.utils.apkparser import APK
from airtest.core.android.android import *
auto_setup(__file__)
PACKAGE = "com.netease.cloudmusic"
APK_PATH = r"D:\demo\NeteaseCloudMusic_Music_official_8.7.11.220318190241_32.apk"
android = Android()
# 获取本地apk文件的版本号
apk_version = int(APK(APK_PATH).androidversion_code)
# 获取手机已安装包体的版本号
installed_version = android.adb.get_package_version(PACKAGE)
print("------------------------------------")
print("local version code is {}, installed version code is {}".format(apk_version, installed_version))
复制代码


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


因为我们对每台设备,或者每次拿到新包时,都要判断一下,所以我们可以直接把判断是否需要覆盖的脚本,封装成一个方法:


from airtest.utils.apkparser import APK
def need_upgrade(device: Android, package: str, apk_path: str):
    """
    检查手机中的package name的版本号,与本地apk文件版本号进行对比,如果本地文件版本号更高,说明需要覆盖安装
    :param device: Android() 对象
    :param package: 例如:com.netease.cloudmusic
    :param apk_path: 本地apk文件路径
    :return:
    """
    apk_version = int(APK(apk_path).androidversion_code)
    installed_version = device.adb.get_package_version(package)
    if installed_version is None or apk_version > int(installed_version):
        print("local version code is {}, installed version code is {}".format(apk_version, installed_version))
        return True
    return False
复制代码


4. 关于覆盖安装



大部分同学应该都知道,我们可以使用Airtest封装的 install 接口帮助我们在设备上安装包体,其实,它还支持传入一些参数,比如执行覆盖安装(与 adb install 命令一致):


from airtest.core.api import *
# 安装参数 -r 表示覆盖安装
install(r"D:\demo\test.apk", install_options=["-r", "-t"])
复制代码


5. 小结



那今天关于“安装包体”的内容就聊到这里,简单汇总一下上文提到的几个小知识点:


  • 检查package在设备中是否存在:check_app
  • 打印出package的完整路径:path_app
  • 获取本地apk文件的版本号:int(APK(apk_path).androidversion_code)
  • 获取手机中包体的版本号:Android().adb.get_package_version(package)
  • 覆盖安装:install(r"D:\test.apk", install_options=["-r", "-t"])


相关文章
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1316 0
iOS:项目中无用类检测和无用图片检测汇总
|
4月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
|
7月前
|
人工智能 Python
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
250 0
|
7月前
|
JSON 前端开发 JavaScript
前端上传文件前检测文件数据🔍
前端上传文件前检测文件数据🔍
131 0
|
小程序 PHP
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
|
传感器 IDE 程序员
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
251 0
|
存储 JSON 编解码
深度之眼(十四)——Python:文件、异常和模块
深度之眼(十四)——Python:文件、异常和模块
154 0
深度之眼(十四)——Python:文件、异常和模块
|
机器学习/深度学习 数据可视化 数据挖掘
深度之眼(十四)——Python:文件、异常和模块(下)
深度之眼(十四)——Python:文件、异常和模块(下)
100 0
深度之眼(十四)——Python:文件、异常和模块(下)
python 基于cartopy库绘制台风路径(包含代码详细解释)
python 基于cartopy库绘制台风路径(包含代码详细解释)
python 基于cartopy库绘制台风路径(包含代码详细解释)

热门文章

最新文章