SDK自带测试框架用法记录(ADB&ADB SHELL, Monkey test, log capture, Automator tests等)

Android SDK解析

参考该博客

Android SDK解析_android sdk res-CSDN博客

ADB: Android Debug Bridge

理解:顾名思义,作为“桥梁”,连接电脑与安卓设备(或虚拟机),使用户能够通过电脑向设备(虚拟机)直接传递指令/接受数据,而不用在设备上进行操作。在ADB的基础上衍生了许多功能强大的自动化测试框架。

ADB SHELL

理解:Shell本质上是一个程序,介于计算机内核与用户之间。它的作用是接受用户指令(如windows command上的输入指令),进行处理,然后传输到计算机内核的相应接口上。Shell的意思是外壳,在这里顾名思义,起到了类似于贝壳一样保护珍珠(计算机内核)的作用。ADB Shell即为保护安卓设备内核的一层程序,并允许用户对安卓设备直接发送指令。

ADB Shell为Android Studio自带功能,位于 SDK/platform-tools下 (一个名为adb.exe的应用程序)

常用ADB Shell指令:

adb devices

展示所有连接到电脑的安卓设备/虚拟机

adb shell

进入安卓设备/虚拟机(若只有一台设备/虚拟机,则无需指定名称)

adb -s ****(device name) shell

进入安卓设备/虚拟机(若有多台设备、虚拟机连接到当前电脑,则需要指定进入哪个设备)

After entering adb shell mode

进入虚拟机(输入adb shell指令)后

su root

获取root权限

pm list package

列出设备内所有包(一般不常用)

pm list package -3

列出设备内所有第三方包(即第三方开发的应用)

dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'

1. 在安卓设备/虚拟机上打开一个app

2. 该指令用于获取当前activity名称

dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'同上,同时获取当前包和activity名

am start ****

(package name)/.MainActivity

启动一个新的activity。可以看到安卓设备/虚拟机上的应用被启动。 其效果与手动启动应用完全一致。

exit

退出adb shell及root权限

如需要在Android Studio模拟器下安装apk,只需要把apk拖到模拟器主页面即可

详细指令可参考该博客

全网最全ADB命令,没有之一_小曾同学.com的博客-CSDN博客

Monkey test

 猴子测试这个名字来源于“无限猴子定理”:即“让一只猴子一直在打字机上按键,最终能完成莎士比亚的全部著作。猴子测试就是百般刁难,乱按一通,系統也不能宕机或者数据出现差错,这样才能称得上是经得起考验的程序。

引用:猴子测试是什么? - 知乎

Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

引用:Monkey(猴子测试)简介和指令的使用_monkey命令含义-CSDN博客

说白了就是让电脑在app界面上疯狂乱点

常用Monkey test指令:

adb shell monkey -v 100     直接在虚拟机当前页面进行100次随机操作
adb shell monkey -p 包名  -v 100 先打开指定应用,然后进行100次随机操作

Capture log from Android System

可在Android Studio下方logcat栏位查看log日志

或直接在terminal内输入以下代码,将打印所有日志:

adb shell logcat

Automator test (包括UIAutomator, UIAutomator2, MonkeyRunner, Appuim, UIAutomator2)

UIAutomator

UIAutomator框架包含两部分内容:UIAutomator Viewer及各种API。API可用于编写测试脚本。UI Automator用来对虚拟机当前展示页面进行截屏,展现截屏上所有元素信息及层级关系。用这玩意儿就不需要源代码也能清晰看到UI元素是如何设计的了,十分强大的功能。

UIAutomator viewer界面展示

如图,左侧展现连接到电脑Android设备的当前界面。当鼠标移动到元素上时,右侧展示相应元素所属层级及信息。该界面相对简陋,功能也不多。UIAutomator2 Viewer界面更加丰富,功能也更齐全

注:UIAutomator viewer会用到ADB。若断开ADB连接(如输入adb kill-server指令)UIAutomator viewer连接也会被断开

 UIAutomator2

参考该博客即可(懒)

​​​​​​UIAutomator2的使用教程-腾讯云开发者社区-腾讯云

注:需联网使用(scania-office不可用,需连到SC-temp)

界面展示

UIAutomator2在浏览器中打开。可直接在左侧屏幕上点击。右侧可直接编写测试脚本。

使用前使用以下教程关闭网络代理 (proxy error)

InvalidProxyURL: Please check proxy URL. It is malformed and could be missing the host_requests.exceptions.invalidproxyurl: please check -CSDN博客

然后关闭miui优化 (gateway error)

小米手机Uiautomator启动失败问题 uiautomator2.GatewayError报错_uiautomator2.exceptions.gatewayerror: (<response [-CSDN博客z

最后降级package (invalid version)

pip install packaging==21.3

可以运行,编辑脚本了!!!!!

若遇到“未启动本地服务”报错,可用chrome打开(localhost:17310)

MonkeyRunner

参考该博客即可(懒)

https://soonsantos.medium.com/guide-to-run-monkeyrunner-e9363f36bca4

Appium

用于编写python脚本的自动化测试框架,由selenium演化而来

安装:参考官方文档

Install Appium - Appium Documentation

若运行python测试脚本时遇到报错 ModuleNotFoundError: No module named 'appium' , 直接在python shell里运行即可

Appium-Python-Client版本2.11.0,selenium版本4.10.0可正常运行测试脚本

若安装uiautomator2失败,可切换到sc temp

测试脚本案例

from appium import webdriver


desired_caps = {
    "platformName":"Android",
    "platformVersion":"8.1.0",
    "deviceName" : "a2a0da6e",
    "appPackage":"com.qiyi.video",
    "appActivity":"org.qiyi.android.video.MainActivity",
    "automationName": "UiAutomator2",
}

driver = webdriver.Remote("http://10.86.19.244:4723", desired_caps)
class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

    def tearDown(self) -> None:
        if self.driver:
            self.driver.quit()

    # def test_find_battery(self) -> None:
    #     el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
    #     el.click()

    def testHero(self):
        self.driver.start_activity(app_package='com.scania.hero_connect',app_activity='.MainActivity')

if __name__ == '__main__':
    unittest.main()

打开apk

self.driver.start_activity(app_package='com.scania.hero_connect',app_activity='.MainActivity')

定位元素

self.driver.find_element(by=AppiumBy.XPATH, value='//android.widget.Button[@content-desc="其他方式登录"]')
self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,"UiSelector().index(3)")

1. UI Automator viewer, Appium inspector及测试脚本需分开单独运行

2. 运行测试脚本后,只能通过运行Appium Inspector进行页面元素捕捉。由于端口被appium占用,WEditor无法使用

Android Studio相关

share_plus报错,去以下路径删除share-plus-7.2.1文件

C:\Users\CLZMFQ\AppData\Local\Pub\Cache\hosted\pub.dev

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值