如何通过Airtest实用速学检测应用包体是否需覆盖安装?

2026-05-17 01:332阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1223个文字,预计阅读时间需要5分钟。

如何通过Airtest实用速学检测应用包体是否需覆盖安装?

1. 安装包体看似简单,实则不然。今天我们来聊聊测试前的准备工作——安装包体。有同学看到这可能会说,这不太简单吗?直接用Airtest封装的install接口,直接装一下不就完了?

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"])

Airtest官网:airtest.netease.com/
Airtest教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

如何通过Airtest实用速学检测应用包体是否需覆盖安装?

官方答疑 Q 群:117973773

呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

本文共计1223个文字,预计阅读时间需要5分钟。

如何通过Airtest实用速学检测应用包体是否需覆盖安装?

1. 安装包体看似简单,实则不然。今天我们来聊聊测试前的准备工作——安装包体。有同学看到这可能会说,这不太简单吗?直接用Airtest封装的install接口,直接装一下不就完了?

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"])

Airtest官网:airtest.netease.com/
Airtest教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

如何通过Airtest实用速学检测应用包体是否需覆盖安装?

官方答疑 Q 群:117973773

呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~