实用速学!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"])


相关文章
|
自然语言处理 搜索推荐 API
通义千问API:用4行代码对话大模型
本章将通过一个简单的例子,让你快速进入到通义千问大模型应用开发的世界。
通义千问API:用4行代码对话大模型
|
机器学习/深度学习 API 开发工具
通义千问API入门教程
本教程将带你从零开始,快速了解如何通过 API 使用通义千问大模型,并尝试使用大模型 API 开发一些简单的应用应用到工作中,提升效率。
|
图形学 Android开发 容器
解锁爬坑新技能:FairyGUI在Unity中遇见的问题
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
1239 0
|
5月前
|
人工智能 运维 云计算
专家对谈|AI推动文化传媒行业向“新”发展
随着“人工智能+”行动的深入推进,文化传媒行业正经历深刻变革。云计算与AI深度融合,重构内容生产、分发全流程,为行业注入新动能。预计到2025年,我国AI核心产业规模将破万亿,文化传媒作为技术应用先锋,以两位数增速迈向智能化。在CCBN活动现场,中央广播电视总台与阿里云探讨了大模型如何驱动行业升级,展望未来新图景。汪莹指出,大模型将重构文化消费形态,助力生产力与传播力倍增,推动中国文化走向世界。同时,解决AI应用“最后一公里”问题需产业链各方协同发力,基于现有大模型能力进行二次开发是切实可行路径。
288 4
|
11月前
|
Python
Pandas 安装
10月更文挑战第26天
280 59
Pandas 安装
|
9月前
|
人工智能 计算机视觉 开发者
SmartEraser:中科大推出图像对象移除技术,轻松移除照片中的不想要元素,保留完美瞬间
SmartEraser 是由中科大与微软亚洲研究院联合开发的图像编辑技术,能够精准移除图像中的指定对象,同时保留周围环境的细节和结构,适用于复杂场景的图像处理。
217 8
SmartEraser:中科大推出图像对象移除技术,轻松移除照片中的不想要元素,保留完美瞬间
|
物联网 5G
Wi-Fi 7:主要功能、优势和与前代的改进
【8月更文挑战第23天】
1102 0
|
机器学习/深度学习 自动驾驶 算法
深度学习之因果推理与决策
基于深度学习的因果推理与决策是一个将因果推理理论与深度学习技术结合,旨在从数据中学习因果关系并基于此做出最优决策的领域。因果推理不仅关注变量之间的相关性,还侧重于发现变量之间的因果关系,而这些因果关系是决策系统做出有效决策的关键。
316 1
|
机器学习/深度学习 人工智能 机器人
语音克隆达到人类水平,微软全新VALL-E 2模型让DeepFake堪比配音员
【8月更文挑战第10天】微软的VALL-E 2模型标志零样本语音合成新高度,通过重复感知采样与分组编码建模,显著提升语音合成的稳定性与效率。在LibriSpeech等数据集上,VALL-E 2的语音自然度与说话者相似度超越前代和其他系统,达到人类水平。然而,其卓越性能也引发了潜在滥用风险的关注。尽管如此,VALL-E 2在辅助沟通、教育、娱乐等领域的应用前景广阔。[论文](https://arxiv.org/pdf/2406.05370)
340 64
|
搜索推荐 数据挖掘 API
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)丨京东API接口指南
1173 1