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启动日志分析的主要内容,如果未能解决你的问题,请参考以下文章

通过Appium日志,分析其运行原理

appium界面运行过程(结合日志截图分析)

appium的log详细分析

appium的log详细分析

APP自动化测试-Appium日志分析

启动appium server时打印日志时间