当前位置: 首页 > news >正文

App移动端测试【10】Monkey自定义脚本案例

Monkey自定义脚本案例:QQ的操作

1. Monkey API

  • LaunchActivity(pkg_name, cl_name) 启动应用的Activity。参数:包名和启动的
  • Tap(x, y, tapDuration) 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。
  • UserWait(sleepTime) 休眠一段时间
  • DispatchPress(keyName) keycode。 RotateScreen(rotationDegree, persist): 旋转屏幕。 参数:rotationDegree为旋转角度, e.g. 1代表90度;persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变。
  • DispatchString(input) 输入字符串
  • DispatchFlip(true/false) 打开或者关闭软键盘。
  • Drag(xStart, yStart, xEnd, yEnd, stepCount): 用于模拟一个拖拽操作。
  • PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放手势。
  • LongPress(): 长按2秒。
  • PowerLog(power_log_type, test_case_status): 模拟电池电量信息。
  • WriteLog(): 将电池信息写入sd卡。
  • RunCmd(cmd) 运行shell命令
  • DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags) 向指定位置,发送单个手势。
  • DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags) 发送按键消息
  • LaunchInstrumentation(test_name,runner_name) 运行一个instrumentation测试用例。
  • DispatchTrackball 模拟发送轨迹球事件。
  • ProfileWait 等待5秒。
  • StartCaptureFramerate() 获取帧率。
  • EndCaptureFramerate(input) 结束获取帧率。

2.获取元素的位置

X,Y的值。通过模拟器手机,【开发者选项】->【显示指针位置】,打开【显示指针位置】,然后在屏幕上点击某个元素,在屏幕的顶部可以看到元素的X,Y值。
1.jpg

3. Monkey自定义脚本编写

3.1 案例讲解

启动移动端qq、然后进行登录(输入用户名、密码)。
考虑:

  • 知道qq的包与lanchable-activity的名字
  • 要操作用户名、密码,要知道具体的元素
  • 操作步骤需要组织(脚本)

3.2 脚本的设计

确定被测应用的包名与launchable-activity

##方式1:
C:\Users\Leo>aapt dump badging C:\Users\Leo\Desktop\mobileqq_android.apk
package: name='com.tencent.mobileqq' versionCode='1010' versionName='7.9.9'
launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity'
##方式2:
C:\Users\Leo>aapt dump badging C:\Users\Leo\Desktop\mobileqq_android.apk | find "launchable-activity"
launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity'  label='QQ' icon=''
C:\Users\Leo>aapt dump badging C:\Users\Leo\Desktop\mobileqq_android.apk | find "pack"
package: name='com.tencent.mobileqq' versionCode='1010' versionName='7.9.9'
##方式3:
C:\Users\Leo>aapt dump badging C:\Users\Leo\Desktop\mobileqq_android.apk | findstr package
package: name='com.tencent.mobileqq' versionCode='1010' versionName='7.9.9'
C:\Users\Leo>aapt dump badging C:\Users\Leo\Desktop\mobileqq_android.apk | findstr launchable-activity
launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity'  label='QQ' icon=''

编写脚本(脚本的文件格式随意,后缀名随意txt)

#头文件
type = raw events
count = 1
speed = 1.0

#启动qq,并测试
start data >>

LaunchActivity(com.tencent.mobileqq,com.tencent.mobileqq.activity.SplashActivity)
UserWait(10000)

Tap(134,891,1000) #点击登录
UserWait(5000)

Tap(96,198,1000) #点击账号文本框
UserWait(3000)

Tap(189,164,1000) #点击账号文本框,变化后的位置,
UserWait(3000)
DispatchString(3298373768)
UserWait(3000)

Tap(134,210,1000) #点击密码文本框
UserWait(5000)
DispatchString(ABCD12345)
UserWait(5000)

Tap(276,274,1000)

执行脚本

C:\Users\Leo>adb connect 127.0.0.1:62001
already connected to 127.0.0.1:62001
C:\Users\Leo>adb push C:\Users\Leo\Desktop\ScriptQq.txt /sdcard
C:\Users\Leo\Desktop\ScriptQq.txt: 1 fi... pushed. 0.0 MB/s (519 bytes in 0.070s)
C:\Users\Leo>adb shell monkey -f /sdcard/ScriptQq.txt -v 1

结果
1.jpg

测试精讲视频

如果你觉的文章读的不过瘾,可以查看详细的视频教程。

《移动测试必备技能》
UI自动化测试:Selenium3自动化测试
【测试全系列视频课程】

学习路线如下

微信图片_20210816100905.png微信图片_202108161009051.png微信图片_202108161009052.png
在这里插入图片描述

相关文章:

  • springboot 整合dubbo3开发rest应用
  • 【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略
  • 算法与数据结构 --- 串,数组和广义表 --- 串
  • 【Python Web】Flask框架(四)Bootstrap的使用及案例
  • MySQL------数据表的创建和简单、条件,模糊查询
  • 【arduino】I/O端口操作
  • 微服务项目:尚融宝(44)(核心业务流程:借款申请(1))
  • 11、Java——吃货联盟订餐系统(对象+数组)
  • Java高性能实体类转换工具MapStruct
  • C++引用的概念
  • 基于ResNetRS的宝可梦图像识别
  • SpringBoot+Easyexcel读取多sheet支持xls,xlsx版本的excel
  • Ubuntu22.04 安装配置流水账
  • SwiftUI 动态岛开发教程之什么是Dynamic Island,快速完整demo
  • 关于我博客付费专栏:写给粉丝的致歉信
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【前端学习】-粗谈选择器
  • Codepen 每日精选(2018-3-25)
  • Computed property XXX was assigned to but it has no setter
  • crontab执行失败的多种原因
  • gulp 教程
  • Java多线程(4):使用线程池执行定时任务
  • mockjs让前端开发独立于后端
  • mysql 5.6 原生Online DDL解析
  • nodejs调试方法
  • Nodejs和JavaWeb协助开发
  • Python打包系统简单入门
  • React-生命周期杂记
  • tensorflow学习笔记3——MNIST应用篇
  • vue-cli在webpack的配置文件探究
  • 工程优化暨babel升级小记
  • 两列自适应布局方案整理
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 小程序开发中的那些坑
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 正则表达式小结
  • 走向全栈之MongoDB的使用
  • #HarmonyOS:基础语法
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 发送邮件
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net2005怎么读string形的xml,不是xml文件。
  • .net连接MySQL的方法
  • .net中应用SQL缓存(实例使用)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @Autowired和@Resource装配
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504