ATX 另一种在 Android 手机内执行 UI 自动化测试方法-Termux

linpengcheng · January 22, 2019 · Last by lank replied at January 07, 2020 · 5410 hits

之前写过一篇帖子 ATX-uiautomator2 使用 QPython 在 Android 手机内执行自动化
通过qpython来实现手机内执行python脚本运行UI自动化,但是qpython是直接将uiautomator2的整个库文件夹push到手机,在安装pip相关依赖包的时候也挺麻烦的。
后来发现了一个Android端的神器-- Termux

Termux是一款开源且不需要root,运行在Android终端上极其强大的linux模拟器,支持apt管理软件包,完美支持python,ruby,go,nodejs。

通过termux 可以安装好python环境 下载需要的pip库,使得在手机端可以直接运行起来python编写的自动化的脚本成为可能。

1、安装Termux

Termux仅支持Android 5.0及以上版本。在国内建议使用F-Droid安装Termux(先下载安装F-Droid,再在F-Droid内部搜索Termux,然后点击安装)

在桌面点击安装后的Termux图标,我们就启动了一个Termux应用,见下图:

(1)基本使用
  • Termux界面长按屏幕,显示菜单项(包括返回、复制、粘贴、更多),此时屏幕出现可选择的复制光标。
  • Termux界面从左向右滑动,显示隐藏式导航栏,可以新建、切换、重命名会话session和调用弹出输入法
(2) 常用快捷键

音量-键模拟(Ctrl)键

音量-(Ctrl)+L                清除屏幕内容
音量-(Ctrl)+C 终止当前操作
音量-(Ctrl)D 退出当前会话session
音量++D Tab键(可自动补全命令或文件名)
音量++W 方向键 上(可显示前一条命令)
音量++S 方向键 下(可显示后一条命令)
音量++A 方向键 左(可左移动光标)
音量++D 方向键 右(可右移动光标)
音量++Q 显示或关闭扩展键(ESC、插入链接CTRALTTAB-/|以及左滑扩展键一栏可切换到全功能支持手机输入法的输入框)

更多快捷按键参考官网介绍,有蓝牙键盘的读者可以参考硬件快捷键使用

(3)常用命令
apt update                    更新源
apt search <query> 全文搜索可安装包
apt install <package> 安装软件包
apt upgrade 升级软件包
apt show <package> 显示软件包的信息
apt list [--installed] 列出所有(或已安装)的软件包信息
apt remove <package> 删除软件包
chmod 修改文件权限
chown 修改文件归属

2、python&uiautomator2安装

在安装好了Termux之后,需要配置好python的环境和安装好uiautomator2库,在终端执行下面2行命令就好了。

apt install python
pip install --pre uiautomator2

3、存储

termux执行命令的路径是私有的内部存储(private internal storage),这类存储的特点是termux应用内部的、私有的,一旦termux被卸载,这些数据也将不复存在。Android下还有另外两种存储类型:shared internal storage和external storage。所谓shared internal storage是手机上所有App可以共享的存储空间,放在这个空间内的数据不会因为App被卸载掉而被删除掉;而外部存储(external storage)主要是指外部插入的SD Card的存储空间。默认情况下,Termux只支持private internal storage。

那么,想要让写的脚本在termux上执行起来改怎么办呢,总不能直接用termux来写python的脚本吧。
Termux提供了一个名为termux-setup-storage的工具,可以让你在Termux下访问和使用shared internal storage和external storage;该工具是termux-tools的一部分,你可以通过apt install termux-tools来安装这些工具。

执行termux-setup-storage(注意:这个命令只能在手机上执行才能弹出授权对话框,通过远程ssh登录后执行没有任何效果)时,手机会弹出一个对话框,让你确认授权.

一旦授权,termux-setup-storage就会在HOME目录下建立一个storage目录,该目录下的结构如下:

  /data/data/com.termux/files/home $tree storage
storage
├── dcim -> /storage/emulated/0/DCIM
├── downloads -> /storage/emulated/0/Download
├── movies -> /storage/emulated/0/Movies
├── music -> /storage/emulated/0/Music
├── pictures -> /storage/emulated/0/Pictures
└── shared -> /storage/emulated/0

6 directories, 0 files

可以看到termux下,termux-setup-storage在storage下建立了6个符号链接,其中shared指向shared internal storage的根目录,即/storage/emulated/0;其余几个分别指向shared下的若干功能目录,比如:相册、音乐、电影、下载等。

这样一来,在电脑上写好的python脚本文件,直接push到手机之后,就可以通过termux来运行了。

4、运行脚本

在电脑上编写好测试的脚本(以网易云音乐为例),因为是直接在手机本地的,所以注意ip需要修改成为0.0.0.0

import uiautomator2 as u2

def main():
u = u2.connect('0.0.0.0')
print(u.info)
u.app_start('com.netease.cloudmusic')
u(text='私人FM').click()
u(description='转到上一层级').click()
u(text='每日推荐').click()
u(description='转到上一层级').click()
u(text='歌单').click()
u(description='转到上一层级').click()


if __name__ == '__main__':
main()

然后将这个脚本文件push到手机中,然后在termux中执行这个python文件就ok了
前置条件: 手机通过uiautomator2 init 成功 且atx-agent仍然可正常连接

cd storage
cd shared
python termuxdemo.py

看看运行的效果

参考资料:

基于Termux打造Android手机渗透神器
Hello,Termux

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 14 条回复 时间 点赞

整麻烦了,可以直接写java层

好多做测试的不会java啊

刚有这个想法,你就实现了,牛逼

正在搞这个,之前也是看了楼主的帖子收到启发,弄个手游小辅助,可是这个前置条件:手机通过uiautomator2 init 成功 且atx-agent仍然可正常连接太烦人,每次还要通过电脑来执行启动命令,想在termux直接执行"python -m uiautomator2 init"没反应,楼主有什么办法吗

sdqsdq 回复

没有

我去...厉害了呀

小试了一下,还是可以的;华为手机不用想,不支持termux,用的是自家的麒麟;执行脚本还需要进termux里面执行,有没有啥其他方式呢

riklu 回复

啥?

@linpengcheng 需要进入termux后在进入脚本目录,然后执行py脚本才可以;还有其他的或者命令行的模式执行吗

问下楼主, u.app_start('com.jingdong.app.mall') 这一句提示“SessionBrokenError('com.jingdong.app.mall')”,'package not found'

cmetl 回复

包名错了吧 或者没安装这个app

12Floor has been deleted
linpengcheng 回复

找到原因了。,所有app的名称在/android/data/下。

另外还要问下楼主,我想安装pillow,但是提示zlib问题。具体报错好长,好像说的是zlib的问题,但是我zlib已经安装了,费解,我主要是想用pillow查看页面元素

cmetl 回复

是因为依赖库的关系,可以试试如下方式安装,我这边测试安装成功(仅安装没有跑过自动化脚本)
pkg upgrade
apt install python
pkg install -y python ndk-sysroot clang make libjpeg-turbo
pkg install clang
pkg install libxml2 libxslt
pip install cython
pip install lxml
pip install --pre uiautomator2

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up