appium启动日志分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了appium启动日志分析相关的知识,希望对你有一定的参考价值。
参考技术A appium运行时的一些输出日志。不懂具体的命令是什么意思,所以查了一下:adb shell getprop ro.build. version .release 获取系统版本:
adb shell getprop ro.build.version.sdk 获取系统sdk的版本:
https://www.jianshu.com/p/6bd0c3ed82fa
我应该如何允许访问非 SDK API?
可以通过使用 adb,在开发设备上允许访问非 SDK API。
若您想在 adb logcat 中显示 API 访问信息,您可通过以下命令更改 API 执行策略:
- adb shell settings put global hidden_api_policy_pre_p_apps 1
- adb shell settings put global hidden_api_policy_p_apps 1
更改回默认设置:
- adb shell settings delete global hidden_api_policy_pre_p_apps
- adb shell settings delete global hidden_api_policy_p_apps
以上命令不需要设备获得 Root 权限。
命令最后的数字分别表示:
https://www.jianshu.com/p/00441faae9ca?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
https://www.bbsmax.com/A/RnJW72bEJq/
wait-for-device:
adb wait-for-device shell getprop
需要提醒的是,这些命令在所有的系统启动起来之前是不会启动adb的,
所以在所有的系统启动起来之前也不能执行其他的命令,例如,
运用install 的时候就需要android包,这些包需要系统完全启动,例如:
adb wait-for-device install <app>.apk
上面的命令只有连接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启动前执行就会有错误发生。
https://blog.csdn.net/jq656021898/article/details/89491665
//安装settings app,辅助设置设备的网络,因为unicodeKeyboard设置为true,安装前先判断是否已经存在于设备上(注意这里是因为修改了源码所以才会去判断,没改过源码的是不判断的
,而是每次都会安装)
https://blog.csdn.net/fengyulinde/article/details/78798055
adb shell dumpsys命令是用于打印出当前系统信息(更切确的说是dumpsys命令,因为adb shell只是为了进入手机或模拟器的shell内核,使其能够执行dumpsys命令),可以在命令后面加指定的service name(比如activity,location),如果不加则默认打印出设备中所有service的信息
所以上图中的命令的意思是:
1.准备往设备上推送settings apk
2.打印出设备中io.appium.settings的信息
3.io.appium.settings 已经安装
4.使用apkanalyzer分析电脑上appium自带的包。/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/io.appium.settings/apks/settings_apk-debug.apk
可以看到电脑上的appium自带的一些安装包:
5.判断出手机上的已经安装的包比电脑上的版本低。
6.准备将电脑上的安装包更新到手机上。
7.获取手机上的安装包个数 ls -t -1 /data/local/tmp/appium_cache 2>&1 || echo _ERROR_ (这一步有啥用???)
8.将电脑上的apk,安装到手机上。
8.1 先在手机上创建缓存文件夹:adb -P 5037 -s Q5S5T19528002651 shell mkdir -p /data/local/tmp/appium_cache
8.2 将电脑上的包推送到手机上的缓存文件夹中:adb -P 5037 -s Q5S5T19528002651 push /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/io.appium.settings/apks/settings_apk-debug.apk /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk
8.3 将安装包在手机上进行安装:adb -P 5037 -s Q5S5T19528002651 shell pm install -r -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk
(Android的文件系统是什么样的?????)
https://blog.csdn.net/xiezechang/article/details/8528446
在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am.
启动的方法为
adb shell
# am start -n {包(package)名}/{包名}.活动(activity)名称
(apk包的工程结构是什么样的?????)
shell appops set io.appium.settings android\:mock_location allow
看起来像是给 io.appium.settings apk设置访问 mock_location的权限。
https://blog.csdn.net/xingchenxuanfeng/article/details/52023048
更改系统设置中的参数(如修改系统默认输入法)。
[AndroidDriver] Unsetting previous IME com.baidu.input_huawei/.ImeService
//将IME设置为 appium的输入法???
[AndroidDriver] Setting IME to 'io.appium.settings/.UnicodeIME'
// 激活 appium的输入法
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 shell ime enable io.appium.settings/.UnicodeIME'
//将手机的默认输入法设置为appium的输入法
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 shell ime set io.appium.settings/.UnicodeIME'
开始处理io.appium.uiautomator2.server,判断是否已经安装,重装。
开始处理io.appium.uiautomator2.server.test ,判断是否已经安装,重装。
开始处理appium-uiautomator2-server-debug-androidTest.apk,判断是否已经安装,重装。
为什么每次启动都重装?不耗时吗?
为什么这三个包需要验签? io.appium.settings就不需要验签?
Starting '/Users/xialei/Library/Android/sdk/build-tools/29.0.2/apksigner' with args '["verify","--print-certs","/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v4.3.0.apk"]'
[ADB] Using 'zipalign' from '/Users/xialei/Library/Android/sdk/build-tools/29.0.2/zipalign'
[ADB] /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk' is already zip-aligned. Doing nothing
https://blog.csdn.net/chengbai022/article/details/49944063
在Android SDK中包含了一个工具名为Zipalign,它可以优化你的APK程序包,我们都知道APK的MIME其实就是一个Zip压缩文件,通过Zipalign可以让你的应用程序运行更快,Android123猜测从原理上来讲应该是优化Zip文件的解压速度,毕竟这个工具的文件名为zip对齐。
在Android平台中,数据文件存储在apk文件中,可以多进程的访问,如果你开发过Win32可能知道程序的粒度对齐问题,不错虽然不是PE格式的文件,在Zip中一样,资源的访问可以通过更好的对其优化,而zipalign使用了4字节的边界对齐方式来影射内存,通过空间换时间的方式提高执行效率。
shell mkdir -p /data/local/tmp/appium_cache
-p的意思是 parent,父目录。 如果父目录不存在,则创建父目录。
前面几行里也有创建这个文件夹,但是没有-p。 我发现,开源的东西,写的比较乱,因为各种人都在开发,开发的风格不一样,而且有可能并没有把之前的内容都看完,所以上面创建了一个目录,下面又重新创建一个一模一样的目录。
adb -P 5037 -s Q5S5T19528002651 shell pm list instrumentation
instrumentation是什么?
https://www.cnblogs.com/insist8089/p/6897037.html
https://developer.android.google.cn/studio/command-line/adb
看了一堆解释,依然不明白instrumentation是什么!!!!
[UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[ADB] Forwarding system: 8200 to device: 6790
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 forward tcp\:8200 tcp\:6790'
[UiAutomator2] No app capability. Assuming it is already on the device
https://blog.csdn.net/python_jeff/article/details/101348248#android
为什么会提示这个错误?
[UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[ADB] Forwarding system: 8200 to device: 6790
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 forward tcp\:8200 tcp\:6790'
设置端口转发
您可以使用 forward 命令设置任意端口转发,将对特定主机端口上的请求转发到设备上的其他端口。以下示例介绍了如何设置主机端口 6100 到设备端口 7100 的转发:
adb forward tcp:6100 tcp:7100
以下示例介绍了如何设置主机端口 6100 到 local:logd 的转发:
adb forward tcp:6100 local:logd
[UiAutomator2] No obsolete sessions have been detected (Error: getaddrinfo ENOTFOUND localhost localhost:8200)
查了网上的资料,说是hosts中没有设置localhost
设置一下,重启appium试一试。
然后悲催的是 appium又出现了别的问题:
找不到 io.appium.settings这个进程。
把之前开启的终端关掉(终端中使用了adb连接手机,难道是因为终端中连接了手机?),又把手机拔掉重新连上电脑,重启appium。可以了。
[WD Proxy] Got response with status 200: "sessionId":"None","value":"ready":true,"message":"UiAutomator2 Server is ready to accept commands"
[UiAutomator2] The initialization of the instrumentation process took 3096ms
终于看到了这样的提示。看来是已经可以执行case了。
Appium-appium日志分析
查看日志是很重要的一部分,我们在编辑器上测试代码时可以直接进行调试,但持续集成时程序自动运行,如果出现bug,只能通过日志来定位代码位置。appium日志主要分为三部分。
1. 准备阶段,包含了appium启动、app启动前准备。
2. 控制阶段,包含了app启动,元素操作等测试用例的执行。
3. 关闭阶段,关闭appium,清理session等收尾工作
一、准备阶段
这几行日志表示appium启动成功,日志输出级别为debug。
这几行是收集我们的键值对,测试代码使用的语言和版本,获取apk信息,我们的示例没有apk,所以无法获取到,会在运行的设备上获取app信息。
这几行表示我们的代码连接appium服务端。使用的jdk版本,adb位置,apk信息。
本段日志显示的是appium查找手机的过程。
本段内容是先启动日志监控,再对手机进行操作,比如查询手机版本,删除以前自动化遗留信息,将需要的程序传到手机,安装需要的setting和unlock程序。
二、控制阶段
从本段开始是启动app的过程,首先关闭所有uiautomator的进程,然后运行AppiumBootstrap。
定位元素,点击我按钮。
点击元素。
三、关闭阶段
本段内容是关闭手机app和日志监控。
本段内容是关闭uiautomator,清理数据与session。
以上是关于appium启动日志分析的主要内容,如果未能解决你的问题,请参考以下文章