Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)

news2024/11/23 8:25:06

耍猴第一式 - 隐藏命令

monkey隐藏的两个命令:

1

–pck-blacklist-file<黑名单文件><br><br>–pck-whitelist-file<白名单文件>

monkey还有一个隐藏的命令那就是:

1

–f<脚本文件>:可以指定monkey的自定义脚本

  一般monkey测试都是随机的测试事件,假如我们需要测试某一个特定的场景,普通的命令很难办到,这是就是需要自定义脚本这个命令了,它的使用方式也是很简单方便的,只要我们按照monkey的脚本规范写好脚本,之后将它保存到手机中,然后运行monkey的时候使用-f 命令指定脚本就行。

耍猴第二式 - monkey自定义脚本格式

1、虽然,Google 官方并没有提供对 MS 详细讲解的 API 文档,但是我们是可以通过源码来分析出 MS 支持的API的。

2、MS 的源码文件是:MonkeySourceScript.java

3、monkey的源码MonkeySourceScript.java类中有一段关于monkey脚本规则的描述MonkeySourceScript.java有兴趣的同学可以去看一下这个源码,这里以 5.1.1 为例子,进行讲解,其实这一块的代码变动非常的少,找一个版本了解即可。我们看一下源码(33行到46行)对j脚本规则描述。

脚本规则的描述

1

2

3

4

5

6

7

8

9

10

11

12

13

14

33/**

34 * monkey event queue. It takes a script to produce events sample script format:

35 *

36 * <pre>

37 * type= raw events

38 * count= 10

39 * speed= 1.0

40 * start data >>

41 * captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)

42 * captureDispatchKey(5113146,5113146,0,20,0,0,0,0)

43 * captureDispatchFlip(true)

44 * ...

45 * </pre>

46 */

解释他们的意思

1

2

3

4

5

6

7

8

9

10

11

12

#声明脚本的类型

type= raw events

#脚本的执行次数,由于monkey运行次数在命令设置的,这里的设置是无效的

count= 10

#事件执行时间间隔,这个也是通过命令来设置,这里不起作用

speed= 1.0

#脚本的入口,说明脚本从下面开始执行

start data >>

#下全是monkey命令

captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)

captureDispatchKey(5113146,5113146,0,20,0,0,0,0)

captureDispatchFlip(true)

知道了monkey脚本书写的基本格式,在来看一眼monkey常见脚本API

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

1.LaunchActivity(包名,Activity名称)

启动被测应用的某个Activity

2.Tap(x,y,TapDuration)

一次单击事件

x,y:是坐标

TapDuration:持续的时间,单位毫秒

3.DispatchPress(keyName)

模拟一个按键

keyName:按键的名称

4.RotateScreen(RotationDegree,peresist)

旋转屏幕

RotationDegree:0~3分别表示顺时针的四个方向

peresist:是否存留

5.DispatchFiip(true/false)

打开或关闭软键盘

6.LongPress()长按2秒

7.PressAndHold(x,y,PressDuration)

模拟长按事件

x,y:点击的坐标

PressDuration:持续时常,单位毫秒

8.DispatchString(input)

输入字符串

input:输入的内容

9.Drag(xStart,yStart,xEnd,yEnd,pCount)

模拟拖动操作

xStart,yStart:开始的坐标值

xEnd,yEnd:结束的坐标值

pCount:滑动事件的次数

10.PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2ystart,pt2xEnd,pt2yEnd)

手势缩放事件

pt1xStart,pt1yStart:第一个手指起始的坐标位置

pt1xEnd,pt1yEnd:第一个手指结束的坐标位置

pt2xStart,pt2ystart:第二个手指开始的坐标位置

pt2xEnd,pt2yEnd:第二个手指结束的坐标位置

11.UserWait(sleepTime)

设置睡眠时间

sleepTime:等待时间,单位毫秒

12.DeviceWake()

唤醒设备屏幕

  在源码中,所有我们上面介绍的 API 都是以一个 static final 的形式被声明。这里简单就 LaunchActivity 的方法的源码进行讲解,其他的 API 其实也大同小异。

LaunchActivity 的方法的源码讲解

1、浏览器输入源码地址,找到静态字符串LaunchActivity,如图:

 2、将鼠标定位到静态字符串LaunchActivity通过ctrl(command)+🖱️左键我们可以定位到方法的位置。大约在597行,如图:

3、将鼠标定位到LaunchActivity的方法通过ctrl(command)+🖱️左键我们可以进入到方法代码。大约在597行,如图:

4、如上边LaunchActiviity 方法源码所示,LaunchActiviity 会以数组的形式接收两个参数,分别表示 PackageName 和 Activity 的 ClassName,下面具体对应的实现,我们就不细看了。再参照上面介绍的 API ,就可以很清晰的定位出方法和参数的含义了。

5、有兴趣的小伙伴们可以通过以上步骤一一查看哪些方法的API。

耍猴第三式 - monkey 脚本的实例

1、Monkey脚本主要包含两部分,一部分是头文件信息,一部分是具体的monkey命令。

2、按照2.1的脚本描述规则我们来编辑monkeyscript,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

type = user

count = 1

speed = 500

start data >>

#启动应用程序

LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity)

UserWait(5000)

#点击下步按钮

Tap(615,609)

UserWait(1000)

#点击编辑框

Tap(200,85,1000)

#输入sg

DispatchString(sg)

  以上脚本主要操作过程:

  1、点击夜神模拟器的应用中心

  2、进入应用中心,点击搜索框

  3、在搜索栏输入:hongge

  4、结束

  注意这里分别使用了 DispatchPress 和 DispatchString 来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。

执行脚本

1、编写好脚本,保存为monkey.script 文件。

2、通过 adb push 将其上传到待测试的设备中。要push到sdcard文件夹中(这里一夜神模拟器为例),如图:

1

adb push C:/Users/DELL/Desktop/monkey.script /sdcard/

3、查看有没有push到设备中,从下图可以看到成功的push进去了。如图:

4、有兴趣或者不相信的可以查看文件内容,如图:

5、然后通过 monkey -f 执行此脚本,例如下面执行 1次。

1

adb shell monkey -f /sdcard/monkey.script -v 1

6、效果截图,在应用中心的搜索栏里输入了:hongge。

7、执行完成之后,可以在控制台,看到输出的 Log 信息。

8、我们一起看一下执行过程小视频,小伙伴们都看到了吧,猴子按你的指令在夜神模拟器上开始表演,如下:

小结

1、通过adb pull和adb push 手机与电脑之间传输文件

(1)将手机卡中的某个文件复制到电脑

  1,手机连接电脑后,在命令行输入 adb devices,获取到设备序列号后说明手机已经和电脑连接成功。

  2,输入: adb pull 手机存储路径  电脑路径
    adb pull  /sdcard/xxx  /Users/xxxx/xxx.tx

(2) 从电脑端向手机复制文件

  1,输入: adb pull 电脑路径  手机存储路径  
     adb push  /Users/xxxx/xxx.txt   /sdcard/xxx

2、注意事项(此处有坑要留心注意哦!!!)

头文件代码书写注意“=”两边预留空格,否则会出现如下报错。

java.lang.NumberFormatException: Invalid int: ""

3、好了,今天关于耍猴就到这里了!哈哈!最后祝大家都成为耍猴高手!!!


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批处理下载视频

一、安装annie Github 上 annie 下载神器的安装及使用教程: https://blog.csdn.net/qq_41780295/article/details/119795152 二、视频下载 安装了annie之后&#xff0c;我们就可以使用命令行下载视频文件了&#xff1b; 例如&#xff0c;打开B站&#xff0c;随便点开一个视频…

能耗监测管理系统

能耗监测管理系统是一种用于监测和管理能源消耗的软件系统&#xff0c;可以帮助企业、机构或个人实现对能源消耗的实时监控、分析和管理。随着能源问题的日益凸显&#xff0c;能耗监测管理系统的重要性也越来越受到人们的关注。本文将从以下几个方面介绍能耗监测管理系统。 一、…

springboot 项目启动不打印spring 启动日志

今天项目遇到一个很奇怪的问题&#xff0c;服务在启动时&#xff0c;不打印spring 的启动日志。经过排查发现是因为其他的依赖引入了 log4j 的依赖&#xff0c;因为我们的项目用的是logback&#xff0c;所以项目中没有log4j 的相关配置&#xff0c;所以干扰到了日志的打印 原因…

使用IntelliJ Idea开发Flink应用程序

使用IntelliJ Idea开发Flink应用程序 一、实验目的二、实验内容三、实验原理四、实验环境五、实验步骤5.1 启动IntelliJ Idea并创建flink项目5.2 编写flink代码5.2.1 准备工作5.2.2 批处理5.2.3 有界流处理5.2.4 无界流处理 ⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何…

剑指Offer第一章——整数

1. 整数 1.1 整数的基础知识 整数是一种基本的数据类型。编程语言可能会提供占据不同内存 空间的整数类型&#xff0c;每种类型能表示的整数的范围也不相同。例如&#xff0c;Java中有4种不同的整数类型&#xff0c;分别为8位的byte&#xff08;-&#xff5e;-1&#xff09;、…

Minecraft 1.20.x Forge模组开发 04.动画效果物品

我们本次实现一个具有动画效果的流星锤: 效果演示 效果演示 效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.20.x Forge模组开发 03.动画生物实体 1.首先我们要使用geckolib制作一个物品和对应的动画: 在blockbench中新建一个

Android TelephonyManager双卡获取数据开启状态异常的可能原因

背景 应用内不指定subId获取数据状态可能会错误&#xff0c;因为可能拿到voice的能力&#xff0c;而非data。 代码逻辑 1、通过TelephonyManager的isDataEnabled()没有指定subId时&#xff0c;调用内部方法isDataEnabledForReason&#xff0c;传入getId()参数以指定subid&am…

设备监测诊断与维护:优化工业生产效率的关键措施

在现代工业生产中&#xff0c;设备的稳定运行对于保障生产效率至关重要。设备监测、诊断和维护作为关键措施&#xff0c;能够帮助企业及时发现设备问题、诊断故障原因&#xff0c;并采取有效维护措施&#xff0c;从而降低生产中断风险&#xff0c;提高生产效率。本文将深入探讨…

【二叉树】利用前序和中序遍历结果生成二叉树并输出其后序和层序遍历结果

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; ⭐️往期关于树的文章&#xff1a; 【哈夫曼树】基本概念、构建过程及C代码 【线索二叉树】C代码及线索化过程详解 欢迎阅读&#xff01; 实验内容 根据二叉树先序和中序遍历的结果,生成该二叉树。并…

pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

tep是一款测试工具&#xff0c;在pytest测试框架基础上集成了第三方包&#xff0c;提供项目脚手架&#xff0c;帮助以写Python代码方式&#xff0c;快速实现自动化项目落地。 在tep项目中&#xff0c;自动化测试用例都是放到tests目录下的&#xff0c;每个.py文件相互独立&…

低代码治好了CIO们的 “精神内耗”

目录 一、前言 二、低代码在企业数字化转型中能“C位出道”&#xff0c;凭什么&#xff1f; 三、低代码的数字化构建能力 四、结束语 一、前言 近两年&#xff0c;我发现身边的CIO/CTO朋友都得了一种“病”——“数字化焦虑”症。 他们经常皱着眉头问我&#xff1a;“老板对数字…

gradio初体验

背景 近期随着很多开源大模型的出现&#xff0c;对于其如何落地&#xff0c;或者说充分地去挖掘其实际应用领域和商业价值变得格外重要。于是乎&#xff0c;对于不懂技术的前方市场或销售人员&#xff0c;如何在没有形成AI产品之前向其展示算法模型效果呢&#xff1f;这时候gr…

【严重】Citrix ADC 和 Citrix Gateway 远程代码执行漏洞(PoC)

漏洞描述 Citrix ADC是应用程序交付和负载平衡解决方案&#xff0c;Citrix Gateway是一套安全的远程接入解决方案&#xff0c;常用于提供虚拟桌面和远程桌面服务&#xff0c;此外&#xff0c;Citrix ADC还被广泛用作Windows堡垒机。 在 Citrix ADC 和 Citrix Gateway 受影响版…

《我为什么要听你的 如何与强势的人相处》读书笔记二

目录 反驳例子 勇敢反击的益处 一些重要的自我保护法 不要再讲述你生活中的细节 别答应那些表意不明的请求 记录下一切 第一时间告知亲友 拒绝成为中间人 区别对待强势者 谨慎应对奉承话 想方设法快点跑 反驳例子 例子 例子&#xff1a; 例子&#xff1a; 例子&am…

什么是UE像素流送,像素流推流是什么原理?

游戏开发者通常在运行游戏逻辑时会将游戏渲染到屏幕的同一台设备上来运行虚幻引擎应用&#xff0c;多人联网游戏可能会在应用程序的多个实例之间分发部分游戏逻辑&#xff0c;但每个单独的实例仍然会为自己的玩家在本地渲染游戏。即使是使用 HTML5 部署选项创建可以在 Web 浏览…

CountDownLatch 一个神奇的计数器,您了解吗

一、CountDownLatch基础概念及案例 1.CountDownLatch是java.util.concurrent 包下提供一个同步工具类&#xff0c;它允许一个或多个线程一直等待&#xff0c;直到其他线程执行完成再执行。其本质就是一个计数器&#xff0c;传入一个初始的值&#xff0c;调用await 方法会阻塞当…

vue+Element项目中v-for循环+表单验证

如果在Form 表单里有通过v-for动态生成&#xff0c;如何设置验证呢&#xff1f; <el-form ref"ruleFormRef" :model"ruleForm" status-icon :rules"rules" label-width"120px"class"demo-ruleForm" hide-required-aster…

大数据课程综合实验案例---课设问题汇总

最近翻看两年前的大数据课设&#xff0c;感觉这个大数据课设实验当时答辩 在大数据课设实验过程中&#xff0c;我遇到了很多问题&#xff0c;在这里做出汇总&#xff1a; 1、MySQL启动报错 首先&#xff0c;我的MySQL有时候启动不了&#xff0c;当我输入这个命令的时候&#…

ModuleNotFoundError: No module named sklearn

前言 出现ModuleNotFoundError: No module named sklearn’的debug过程记录 步骤 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learn 完成&#xff0c;不再报错

剖析Linuxptp中ptp4l实现--OC

源码克隆地址&#xff1a; git://git.code.sf.net/p/linuxptp/code 项目官网文档&#xff1a; https://linuxptp.nwtime.org/documentation/ 关于linuxptp的相关配置可以参考以下博文&#xff1a; linuxptp/ptp4l PTP时钟同步配置选项 代码剖析 ptp4l的main函数在ptp4l.…