前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Uiautomator2 脱机 Monkey 测试

Android Uiautomator2 脱机 Monkey 测试

作者头像
测试加
发布2022-03-24 15:54:42
3.1K1
发布2022-03-24 15:54:42
举报
文章被收录于专栏:用户4624600的专栏

简介

前些日志在社区看了【有赞团队的一篇记一次基于Robotium 改造的测试实践】 https://testerhome.com/articles/18752.

文章中提到了自动化测试可以拖离PC运行,点击apk中的运行按钮就能开启自动化测试,这个思路给了我很大的启发.

本文就尝试把Android Monkey测试脱机运行,截止到写这篇文章.基本功能已经实现,还差一些适配问题和优化.

自动化框架对比

现在主流移动端自动化框架,基本上都是在pc上运行来操作移动端设备.

Appium

这种cs架构的自动化框架,需要在pc上开启一个服务,然后手机上安装各种的可以通信的app,比如bootstrap、wda等.在启动测试脚本后、bootstrap接受指令,最后调度UiAutomator或者UiAutomator2底层引擎操作移动设备.

Robotium

这个项目现在已经不怎么更新了,依托Android测试环境的核心是Instrumentation框架,有依赖源码使用和不依赖源码使用的两种方案.在【有赞】的文章中提到了Robotium框架,但是看了一些Robotium的环境搭建贴还是停留在ecliese上并且都是3年以前的,果断放弃了.

atx

底层基于Google uiautomator,安装atx-agent后会在手机上开启一个http端口.也就是说服务端从pc上挪到了手机本身上了,这样就可以脱离pc达到效果.

UiAutomator2

UiAutomator2是Android提供的一个自动化测试框架,基于Instrumentation框架.提供了丰富的api方法来操作设备,Appium中也提供了UiAutomator2底层引擎.

脱机运行方案

综合了上面几个自动化测试方案,决定使用【UiAutomator2】框架.不需要开启任何端口、和Android项目天然结合.

使用

先简单介绍下UiAutomator2如何使用和一些常用api

创建一个Android UiAutomator2项目

创建一个带页面的项目,为了后期在页面中运行自动化测试做准备.

自动创建好项目后,会有个androidTest文件夹和ExampleInstrumentedTest.java文件.

在app路径下的build.gradle文件添加依赖.

通过Intent启动app、创建UiDevice实例并使用api方法,如点击元素和滑动等.

点击运行方法按钮,会使用gradle打一个androidTest.apk安装到手机上.

启动测试命令如下:

代码语言:javascript
复制
adb shell am instrument -w -r -e debug false -e class 

'android.example.xinxi.monkey.ExampleInstrumentedTest#testDemo'

com.bilibili.test/android.support.test.runner.AndroidJUnitRunner

常用api

click

根据坐标点击屏幕

swipe

滑动屏幕

drag

拖拽屏幕

findObject

查询元素

dumpWindowHierarchy

获取页面xml元素

executeShellCommand

执行shell命令

pressBack

模拟返回

参数传递

在上面提到instrument命令行启动,是可以传递参数给测试类的.主要用途是传递测试时间和测试包名.

用法如下:

代码语言:javascript
复制
adb shell am instrument -w -r -e runtime 10 debug false -e class 
# 运行10分钟测试脚本

Bundle bundle = InstrumentationRegistry.getArguments();
TIMING  = Integer.parseInt(bundle.getString("runtime"));
# 在代码中使用getArguments接收参数并获取字段值

Monkey

Monkey这部分设计,是把随机点击、滑动、返回、滚动等常用api结合起来,通过分配事件概率控制.

apk内执行

上面已经完成了Monkey开发并且可以通过命令行测试app,但是还是需要依托pc.

所以需要一个apk执行instrument命令,这样就可以脱离了pc.

创建MainActivity增加【运行】和【停止】按钮,增加运行时间输入框.会在点击【运行】按钮的同时把【时间】参数传递给【测试类】.

需要主要注意的是,执行instrument命令是个耗时操作,所以创建了一个子线程来执行.

展示效果

app获取系统权限

目前仅对模拟器和root过的手机适配过,原因在于在app内部执行shell命令需要系统权限.

解决方案是给app添加系统权限并且系统权限签名,在AndroidManifest.xml增加"android:sharedUserId=“android.uid.system”,然后使用platform.pk8和platform.x509.pem文件签名.

这个解决方案参考了一些帖子,尚未成功过,后续有时间了再调研.

崩溃获取

在Android中可以自定义CrashHandler类来捕获崩溃,需要一个当前app的上下文环境,现在还获取不到被测app的崩溃,这个问题也后续调用如何捕获运行时崩溃.

代码语言:javascript
复制
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());

结语

畅想以后的移动端自动化测试,只要把该功能集成到被测app的debug环境中,任何开发同学和测试同学都可以无成本的使用,最终达到【自动化触手可及】的效果.

项目地址: https://github.com/xinxi1990/MonKeyTest

参考

UIAutomator2.0详解(入门篇) https://blog.csdn.net/daihuimaozideren/article/details/78331673

安卓apk重签名工具 https://github.com/pengwei1024/apkReSign/

Android Studio在只有apk情况下的的robotium自动化框架应用 https://blog.csdn.net/wokankanhao88/article/details/81335650

https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html

如何启动 instrumentation ?(android ) https://blog.csdn.net/duan5858/article/details/54670397

uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)的实现方案 http://www.voidcn.com/article/p-tkfwaruq-beo.html

keytool-importkeypair https://github.com/getfatday/keytool-importkeypair

让Android Studio支持系统签名(证书) https://zhuanlan.zhihu.com/p/48131789

实现uiautomator2.0脱离PC运行 博客地址:https://blog.csdn.net/pgz100 https://github.com/pgz100/myuiautomator

Andorid 任意界面悬浮窗,实现悬浮窗如此简单 https://www.jianshu.com/p/18cbc862ba7b https://github.com/yhaolpz/FloatWindow

Android Studio自动生成带系统签名的apk https://blog.csdn.net/cxq234843654/article/details/51557025

Uiautomator 2调试参数传递 https://blog.csdn.net/sinat_29052561/article/details/

UIAutomator2.0 简介 https://testerhome.com/topics/3588

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 自动化框架对比
    • Appium
    • Robotium
    • atx
    • UiAutomator2
    • 脱机运行方案
    • 使用
      • 创建一个Android UiAutomator2项目
      • 常用api
        • click
          • swipe
            • drag
              • findObject
                • dumpWindowHierarchy
                  • executeShellCommand
                    • pressBack
                    • 参数传递
                    • Monkey
                    • apk内执行
                    • 展示效果
                    • app获取系统权限
                    • 崩溃获取
                    • 结语
                    • 参考
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档