资讯专栏INFORMATION COLUMN

Appetizer 实战 1:多设备控制 + 录制重放实现完整多设备测试流程

kamushin233 / 3631人阅读

摘要:所以今天使用的是我们开源的,这个命令行工具的原理是录制触摸屏上操作,然后存成一个文件,下一次可以从一样的状态重放。

测试人员在找到一个问题之后从上报到修复通常是一个比较漫长而且需要大量交流的过程。很多时候开发人员常常会有以下抱怨:
“你怎么弄崩溃的?”,“我这里好好的啊”,“你从什么状态开始操作的?”,诸如此类。
大量的问来问去的语言交流使得修复的时间变长,影响进度(测试是个漂亮妹妹除外)。
虽然不同公司可能存在不同的上报流程(github上的开源项目有些不厌其扰也搞了模板),但归根结底修复的人只希望得到一个测试人员提供的可以重现的测试流程,跑一遍,重现问题。这里我们向大家分享一下如何结合多设备控制以及屏幕操作的录制重放,在多设备上实现可重现的测试流程。鉴于公司的制度和流程不同,并不一定完全适用,大家挑有用的用就是了。

介绍

最简单的录制重放,就是那一个摄像头把测试全称录下来,这样虽然能够看到测试做了什么,但是和看电影一样,修复者没法参与。所以今天使用的是我们开源的appetizer-toolkit,这个命令行工具的原理是录制触摸屏上操作,然后存成一个trace文件,下一次可以从一样的状态重放。这样听上去有点像按键精灵,当然比按键精灵要做得好,时间控制非常准确,准确到可以重放音乐手游;支持多点触摸,因为是触屏操作,所以怎么奇怪的手势都可以支持;同样,因为录制的是触屏操作,所以如果应用中间需要切换到其他应用去打开文件什么的也是没有问题的;最后,用现在的命令行工具,可以灵活结合重放以及一些常用的控制命令,例如启动应用,输入文字,并不一定要录制在屏幕上按输入法输入文字;

配置环境

首先,到github页面去下载最新版本的appetizer-toolkit,支持三个操作系统,必须是64位机器(32位的怎么办?重装吧)。直接就下载对应平台的可执行文件就可以了,linux和mac的比较简单,下载后就一个可执行文件,windows上需要下载appetizer-toolkit-win.zip后解压,得到一个文件夹里面有主可执行文件 appetizer-toolkit-win.exe

确认adb 都装好了(废话吧,是嘛),确认adb在PATH环境变量里面。这里以windows为例,测试一下 appetizer-toolkit-win devices list 输出应该一串json,看看连在电脑上的设备有没有在里面

如果找不到adb,用./appetizer-toolkit-win.exe adb detectadb确认一下是否找到了adb可执行文件,如果没有,检查环境变量设置

如果发现有遗漏的设备,用adb devices检查一下设备是否是online状态,一般有些需要重新插拔

如果工具丢出一堆crash stacktrace,请到我们的QQ群(见最下面)去反映一下

调整设备到初始状态

执行appetizer-toolkit-win.exe devices list获取目前已经连接的设备。每个设备由一个serialno标识(和adb devices得到的一样)。appetizer-toolkit-win.exe devices control系列命令是adb的多机扩展,可以同时控制多个设备。
该命令的第一个参数是设备列表,可以是单个设备的serialno,也可以是一系列设备的serialno,用逗号隔开,例如serialno1,serialno2
以下是控制命令的子命令:

DEVICE=serialno1,serialno2 # 设备序列号列表,注意不要有空格
./appetizer-toolkit-win.exe devices control $DEVICE uninstall com.helloworld # 卸载应用
./appetizer-toolkit-win.exe devices control $DEVICE install hellworld.apk # 安装应用
./appetizer-toolkit-win.exe devices control $DEVICE kill_all # 杀掉后台应用
./appetizer-toolkit-win.exe devices control $DEVICE launch_pkg com.helloworld # 启动应用
./appetizer-toolkit-win.exe devices control $DEVICE shell input keyevent KEYCODE_HOME # 模拟按HOME按键
./appetizer-toolkit-win.exe devices control $DEVICE shell pm grant pkg android.permission.SOME_PERMISSION  # 赋予权限(小米弹框除外)
./appetizer-toolkit-win.exe devices control $DEVICE shell "input keyboard text "Paste%stext%son%sAndroid%sDevice""  # 输入一段文本, Android 6.0前
./appetizer-toolkit-win.exe devices control $DEVICE shell "input keyboard text "Paste text on Android Device""  # 输入一段文本, Android 6.0后
./appetizer-toolkit-win.exe devices control $DEVICE shell screenrecord /sdcard/demo.mp4  # 录制屏幕video(4.4+)

常见初始状态,包括关闭所有后台程序,回到桌面,打开待测应用,这些步骤可以用appetizer-toolkit-win.exe的命令行完成。其中./appetizer-toolkit-win.exe devices control $DEVICE shell还能用来在多个设备上执行同一个shell命令,用法和adb shell类似。一些有用的资料:

keyevent 虚拟按键列表(英文)

adb shell命令集(英文):替换adbappetizer即可

录制重放屏幕操作

运行appetizer-toolkit-win.exe trace record trace.txt --device serialno就开始录制一个设备上接下去所有的屏幕操作了。启动录制后appetizer toolkit程序会继续接受命令行输入,输入exit回车即可结束录制。
下面的截图这样就算录制成功了

可以用appetizer-toolkit-win.exe trace info trace.txt确认一下录制的trace的情况,比如:

{"contacts": 1, "description": "", "height": 1920, "length": 2.4815590000071097, "records": 52, "valid": true, "width": 1080}

表示这是个合法的trace (valid),总计2.48秒,在一个1920x1080的设备上录制的,单点触摸(contacts),记录了52个屏幕事件

重放一下刚才录制的trace,确保问题可以重现。重放命令是appetizer-toolkit-win.exe trace replay trace.txt serialno

可以录制多段重放,在段与段间可以用 appetizer-toolkit-win.exe devices screenshot 1.jpg --device serialno 来保存设备屏幕截图

录制重放是支持多点触摸的,支持对时间精确度高的复杂手势,重放效果见视频

Python脚本

命令行工具可以通过命令行调用,也可以通过Python调用,Appetizer toolkit的Python SDK提供了Python接口来使用所有toolkit的功能。
中文文档在此
举个栗子:

appetizer=Appetizer("/home/haha/appetizer-toolkit/appetizer-toolkit-linux-x64")
# 列举所有已经连接的可以使用的设备
print (appetizer.devices.list())
# 获取一个设备的屏幕截图
appetizer.devices.take_screenshot("path/to/save/jpg/file", "serial_number")
# 安装APK文件到多个设备
appetizer.devices.control(["serialno1", "serialno2"], "install", "path/to/APK/file")
# 启动一个APP
appetizer.devices.control(["serialno1", "serialno2"], "launch_pkg", "com.example.app")
# 在多个设备上同时执行一个shell命令并获取返回信息
print(appetizer.devices.control(["serialno1", "serialno2"], "shell", "ls | grep system")
# 镜像控制:将一个设备上的触摸屏输入实时投射到多个从属设备上
task = appetizer.devices.mirror("master_serialno", ["slave_serialno1", "slave_serialno2"])
# task对象代表了正在执行的镜像控制任务
time.sleep(5)
task.stop()
加群来同行互相伤害

QQ群:467889502

Slack(用的人可能比较少,也贴一下):https://appetizer.typeform.co...

Bug report: https://github.com/appetizeri...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13473.html

相关文章

  • 如何通过自动化测试 应对App的频繁迭代

    摘要:自动化测试的流程是搭建框架设计测试用例编写脚本进行测试得出结果。它支持所有的事件操作,通过模拟器也能运行测试,很多自动化测试脚本编写客户端都封装了,包括百度云测腾讯优测等。 移动互联网在改变我们生活的同时,给各行各业都带来了翻天覆地的变化,就拿移动应用开发来说,传统软件的迭代周期往往以年、月计,而到了手机上,几乎每周都有新版本上线,一些勤快的应用甚至三五天就更新一个版本。如此频繁的迭代...

    YanceyOfficial 评论0 收藏0
  • 视频私有云实战:基于 Docker 构建点播私有云平台

    摘要:本篇文章将会结合网易云信的实践经验,以全局概述的方式带大家认识点播私有化平台构建的整体架构面貌。基于构建点播私有云平台在具有以上优势的同时,还具备资源弹性管理监控完善部署简易自动化维护等特性。基于构建平台,能够自由管理创建云主机。 私有云是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序。其核心属...

    MadPecker 评论0 收藏0
  • 视频私有云实战:基于 Docker 构建点播私有云平台

    摘要:本篇文章将会结合网易云信的实践经验,以全局概述的方式带大家认识点播私有化平台构建的整体架构面貌。基于构建点播私有云平台在具有以上优势的同时,还具备资源弹性管理监控完善部署简易自动化维护等特性。基于构建平台,能够自由管理创建云主机。 私有云是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序。其核心属...

    jkyin 评论0 收藏0
  • 代码 - 收藏集 - 掘金

    摘要:行代码的人脸识别实践产品掘金前言很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上页的教程立马就放弃了。掘金最新最全的开源项目合集掘金是由整理并维护的安卓相关开源项目库集合。 安卓第三方登录之微信登录(图文详解) - Android - 掘金一、创建应用并成为开发者 1、创建应用 1)到微信开放平台管理中心,点击创建移动应用 ... 三步实现...

    neuSnail 评论0 收藏0
  • 程序员!一款超实用的安卓实时同步投屏电脑的软件,谁用谁知道!

    QtScrcpy超赞的安卓实时投屏软件 QtScrcpy介绍眼见为实的效果环境准备主要功能介绍手机打开USB调式模式运行精简模式非精简模式运行时注意这个图 无线连接步骤(保证手机和电脑在同一个局域网): QtScrcpy介绍 QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制。不需要root权限。单个应用程序最多支持16个安卓设备同时连接。同时支持G...

    yy13818512006 评论0 收藏0

发表评论

0条评论

kamushin233

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<