Android SDK解析
参考该博客
Android SDK解析_android sdk res-优快云博客
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的博客-优快云博客
Monkey test
猴子测试这个名字来源于“无限猴子定理”:即“让一只猴子一直在打字机上按键,最终能完成莎士比亚的全部著作。猴子测试就是百般刁难,乱按一通,系統也不能宕机或者数据出现差错,这样才能称得上是经得起考验的程序。
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
引用:Monkey(猴子测试)简介和指令的使用_monkey命令含义-优快云博客
说白了就是让电脑在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)
然后关闭miui优化 (gateway error)
最后降级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