Appium - adb monkey事件(二)

本文介绍了Monkey测试工具执行的11种随机事件,包括触摸、手势、二指缩放等操作,用于模拟用户行为,帮助进行手机App的稳定性测试。
操作事件简介

Monkey所执行的随机事件流中包含11大事件,分别是触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。Monkey通过这11大事件来模拟用户的常规操作,对手机App进行稳定性测试。下面让我们来详细了解这11大事件。

1.触摸事件

触摸事件是指在屏幕某处按下并抬起的操作,可通过--pct-touch参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到。 该事件由一组Touch(ACTION_DOWN)和Touch(ACTION_UP)事件组成,在手机上看到实际操作类似于点击。

2.手势事件

手势事件是指在屏幕某处的按下、随机移动、抬起的操作,即直线滑动操作。可通过--pct-motion参数来配置其事件百分比。

该事件是由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成的,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。

3.二指缩放事件

二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作。可通过--pct-pinchzoom参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件起始是一个ACTION_DOWN事件和一个ACTION_POINTER_DOWN事件,即模拟两个手指同时点下;中间是一系列的ACTION_MOVE事件,即两个手指同时在屏幕上直线滑动;结束是由一个ACTION_POINTER_UP事件和一个ACTION_UP事件组成的,即两个手指同时放开。

4.轨迹事件

轨迹事件是由一个或多个随机的移动组成的,有时会伴随着点击。很早之前的Android手机带有轨迹球,这个事件就是模拟的轨迹球的操作。现在的手机几乎都没有轨迹球,但轨迹球事件中包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数。可通过--pct-trackball参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件是由一系列的Trackball(ACTION_MOVE)事件组成的,观察手机上的操作,即为一系列的曲线滑动操作。

5.屏幕旋转事件

屏幕旋转事件是一个隐藏事件,在Android官方文档中并没有记录这个事件。它其实是模拟的Android手机的横屏和竖屏切换。可通过--pct-rotation参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件由一个rotation事件组成,其中degree表示的是旋转方向,顺时针旋转,0表示旋转90度的方向,1表示旋转180度的方向,2表示旋转270度的方向,3表示旋转360度的方向。在执行过程中,可以看到手机屏幕在横竖屏之间不断地切换。

6.基本导航事件

基本导航事件是指点击方向输入设备的上、下、左、右按键的操作,现在手机上很少有上、下、左、右按键,这种事件一般用得比较少。可通过--pct-nav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上、下、左、右四个方向按键。

7.主要导航事件

主要导航事件是指点击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如键盘的中间键、回退按键、菜单按键。可通过--pct-majornav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是中间键和菜单键。

8.系统按键事件

系统按键事件是指点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等。可通过--pct-syskeys参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上面说到的几个系统按键。

9.启动Activity事件

启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。可通过--pct-appswitch参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Switch操作组成的,从手机上看,上面的操作实际是打开了com.android.settings这个应用的一个com.android.settings.Settings的Activity界面。

10.键盘事件

键盘事件主要是一些与键盘相关的操作。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等。可通过--pct-flip参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 如日志所示,这里主要是键盘的打开和关闭操作。

11.其他类型事件

其他类型事件包括了除前面提到的10种事件外其他所有的事件,如按键、其他不常用的设备上的按钮等。可通过--pct-anyevent参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是其他的一些系统按键,如字母按键、数字按键等。因为现在手机很少带字母按键或数字按键,所以这个事件一般使用得比较少。

 

转载于:https://www.cnblogs.com/Teachertao/p/11258909.html

<think>好的,我现在需要分析用户提供的Appium报错信息,找出原因并给出解决方法。首先,我需要仔细阅读用户提供的错误信息,理解其中的关键点。 错误信息的核心是:`Cannot activate 'com.huawei.appmarket'`,并且提到`adbExec`命令超时,具体是执行`monkey`命令时超时,超时时间为20000ms(20秒)。用户被建议增加`adbExecTimeout`的能力设置。 首先,我需要回顾Appium中`adbExecTimeout`的作用。这个参数控制Appium执行ADB命令时的超时时间。默认情况下,可能设置为20秒,如果ADB命令在这段时间内没有完成,就会触发超时错误。 接下来,分析可能的原因: 1. **ADB命令执行时间过长**:用户执行的`monkey`命令可能因为设备响应慢、应用启动时间长或设备性能不足,导致在20秒内无法完成。例如,华为应用市场(`com.huawei.appmarket`)可能启动较慢,或者设备当前负载高,导致`monkey`命令未能及时返回。 2. **设备连接问题**:ADB与设备的连接不稳定,导致命令执行延迟。例如,设备通过USB连接但连接不牢固,或者USB调试未正确授权,可能导致命令执行中断或延迟。 3. **应用无法激活**:目标应用(`com.huawei.appmarket`)可能未安装在设备上,或者安装后无法正常启动(如崩溃、权限问题),导致`monkey`命令无法成功激活应用,从而超时。 4. **ADB路径或环境问题**:用户提供的ADB路径是否正确?例如,路径中是否有空格或特殊字符?ADB版本是否与设备兼容?旧版ADB可能无法正确处理某些设备或命令。 5. **Monkey命令本身问题**:用户使用的`monkey`命令是否正确?例如,`-p com.huawei.appmarket`指定了包名,`-c android.intent.category.LAUNCHER`指定了启动类别,参数是否正确?是否有拼写错误? 接下来,需要验证这些可能性,并给出对应的解决方法。 例如,检查应用是否安装:可以通过`adb shell pm list packages | grep com.huawei.appmarket`确认应用是否存在。如果不存在,需要先安装应用。 如果应用已安装,检查是否能手动启动:通过`adb shell am start -n com.huawei.appmarket/.MainActivity`(假设主Activity正确)尝试手动启动,看是否成功。如果手动启动失败,可能应用本身有问题(如崩溃)。 关于超时问题,用户可以尝试增加`adbExecTimeout`的能力设置,延长ADB命令的执行超时时间。例如,在`desired_caps`中设置`adbExecTimeout: 60000`(60秒),让Appium等待更长时间。 另外,检查设备连接是否正常:使用`adb devices`确认设备是否在线,是否有多个设备导致ADB选择错误(用户命令中指定了`-s 4TFBB25412100180`,即设备序列号,需确认该设备确实连接且状态为`device`)。 此外,查看ADB日志或设备日志(`adb logcat`)可能有助于定位问题,例如应用启动时是否有崩溃日志,或者权限拒绝的信息。 总结,主要原因可能是ADB命令执行超时,或者目标应用无法被激活(未安装、启动失败等)。解决方法包括延长超时时间、检查应用状态、确认设备连接和命令正确性等。 </think> 根据报错信息分析,核心问题是**Appium执行ADB命令超时而触发的异常**,具体涉及通过`monkey`命令激活目标应用`com.huawei.appmarket`时超时。以下是详细原因分析和解决方法: --- ### **错误原因分析** #### 1. **ADB命令执行超时(直接原因)** 报错中明确提到:`Command ... timed out after 20000ms`,说明Appium执行ADB命令的默认超时时间(20秒)不足以完成操作。 **触发场景**: - 目标应用(华为应用市场)启动速度慢(如首次启动需加载大量资源)。 - 设备性能差或当前负载高(如同时运行多个应用),导致`monkey`命令响应延迟。 - ADB与设备的通信延迟(如USB连接不稳定、Wi-Fi ADB延迟高)。 #### 2. **目标应用无法被激活(潜在原因)** `Cannot activate 'com.huawei.appmarket'` 表明`monkey`命令尝试激活应用失败,可能原因: - 应用未安装在设备上(或包名拼写错误)。 - 应用已安装但主Activity异常(如崩溃、无`LAUNCHER`类别的Activity)。 - 应用被系统限制启动(如后台权限被禁止)。 #### 3. **ADB配置或环境问题(辅助原因)** - ADB路径错误或版本过低(用户日志中ADB路径为`D:\\python\\auto_deploy_hytest\\androidsdk\\platform-tools\\adb.exe`,需确认路径有效性)。 - 设备未正确连接(`adb devices`显示设备状态非`device`)。 --- ### **解决步骤与方法** #### **步骤1:验证目标应用是否正常安装** 通过ADB命令手动检查应用是否存在: ```bash adb -s 4TFBB25412100180 shell pm list packages | grep com.huawei.appmarket ``` - 若输出无结果:应用未安装,需先安装目标应用。 - 若输出存在但包名不一致:检查包名拼写是否正确(如是否多了空格或符号)。 #### **步骤2:手动验证应用能否启动** 通过ADB手动启动应用,排查应用本身问题: ```bash adb -s 4TFBB25412100180 shell am start -n com.huawei.appmarket/.MainActivity ``` - 若启动失败(无响应或崩溃):检查设备日志(`adb logcat`)定位应用崩溃原因(如权限缺失、代码异常)。 - 若启动成功:说明应用本身无问题,问题可能出在ADB命令超时或连接延迟。 #### **步骤3:延长ADB命令超时时间(关键修复)** Appium的`adbExecTimeout`参数控制ADB命令的执行超时时间(默认20秒)。在`desired_caps`中增加此参数,延长等待时间(如60秒): ```python desired_caps = { "platformName": "Android", "deviceName": "4TFBB25412100180", "appPackage": "com.huawei.appmarket", "appActivity": ".MainActivity", "automationName": "UiAutomator2", "adbExecTimeout": 60000 # 60秒(根据实际情况调整) } ``` #### **步骤4:优化ADB连接与设备环境** - **检查设备连接状态**:执行`adb devices`确认设备状态为`device`(非`unauthorized`或`offline`)。 - **更换USB接口/线**:避免因USB接触不良导致通信延迟。 - **关闭设备冗余进程**:通过`adb shell top`或任务管理器清理后台应用,降低设备负载。 #### **步骤5:替换激活应用的方式(备选方案)** 若`monkey`命令始终超时,可改用Appium原生方法启动应用(更稳定): ```python # 初始化驱动时直接指定appPackage和appActivity(自动启动应用) desired_caps = { "platformName": "Android", "deviceName": "4TFBB25412100180", "appPackage": "com.huawei.appmarket", # 目标包名 "appActivity": ".MainActivity", # 主Activity(需正确获取) "automationName": "UiAutomator2" } driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) ``` --- ### **总结** 此错误主要由ADB命令执行超时或应用无法激活导致。优先通过延长`adbExecTimeout`解决超时问题,同时验证应用安装状态和启动能力,确保设备连接稳定。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值