python脚本处理Android安装启动卸载app(一)

348 阅读3分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。

前言

作为半个程序员,在windows上写bat批处理文件,本身就是锦上添花的事情,但是需要做到精通,可能会有点舍本逐末,为啥?因它仅仅只在windows系统有效,不能跨平台,而且它的语法结构也比较晦涩,并不是很美观;所以本次尝试换成使用python语言来实现,那么在跨平台的时候也能提升自己的代码能力。

bat案例

@echo off

title 自动安装启动卸载android-app

rem 变量延迟引用
setlocal enabledelayedexpansion

set result=failed
rem set /p path=请输入apk路径:

set i=1

for %%i in (D:\10.40.0\*.apk) do (
    echo *************************************
    echo =====开始第!i!次安装apk=====
    echo =====预设结果:%result% =====
    echo =====第一步:准备安装=====
    for /f %%j in ('adb install -r %%i') do ( set result=%%j )
    rem adb install -r %%i
    echo =====安装结果:!result!=====
    echo =====第二步:开始启动=====
    adb shell am start -W xxxx/xxxx
    TIMEOUT /T 3
    echo =====第三步:准备卸载=====
    rem adb shell pm uninstall  com.chutzpah.yasibro
    for /f %%j in ('adb shell pm uninstall  xxxx') do ( set result=%%j )
    echo =====卸载结果:!result!=====
    set /a i+=1
    echo *************************************
)

pause

APPIUM简介及原理

使用脚本语言无疑需要借助第三方工具来辅助完成Android客户端的操作,因为python本身是不支持操作移动端的API。

Appium 是一个开源工具,用于在 iOS 移动、Android 移动和 Windows 桌面平台上自动化原生、移动 Web 和混合应用程序。 本机应用程序是使用 iOS、Android 或 Windows SDK 编写的应用程序。 移动网络应用程序是使用移动浏览器访问的网络应用程序(Appium 支持 iOS 和 Chrome 上的 Safari 或 Android 上的内置“浏览器”应用程序)。 混合应用程序有一个围绕“webview”的包装器——一个能够与 Web 内容交互的本机控件。像Apache Cordova这样的项目 可以轻松地使用 Web 技术构建应用程序,然后将这些应用程序捆绑到本机包装器中,从而创建一个混合应用程序。

重要的是,Appium 是“跨平台的”:它允许您使用相同的 API 针对多个平台(iOS、Android、Windows)编写测试。这使得 iOS、Android 和 Windows 测试套件之间的代码重用成为可能。

在这里插入图片描述

Appium是c/s架构的

Appium是基于webdriver协议添加了对移动设备自动化api扩展而成的, webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息 。

Appium会首先开启一个监听4723端口的server,接收测试脚本发送过来的对应请求,再将对应的请求发送给中间件Bootstrap.jar(比如点击一个APP中的一个Button就是一条请求)。

Bootstrap.jar

  监听4723端口(可以通过-p参数指定启动appium服务的端口)由Appium发送过来的相关请求,并且将请求转换成UiAutomator可以识别的命令发给UiAutomator进行处理。

那么Bootstrap作用是什么?

Bootstrap是Appium在初始化的时推送到Android手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理。它会监听4723端口获得命令然后传递给UiAutomator来做处理。

Bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase, 所以Uiautomator可以正常运行它 ,它也可以正常使用uiautomator的方法,这个就是appium的命令可以转换成uiautomator命令的关键;

其次,bootstrap是一个socket服务器,专门监听4723端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;

小结

本篇先理清楚原理,在构思如何实现bat的处理流程。