手机自动化测试工具实现

article/2025/10/7 14:57:02

手机自动化测试工具实现

一、PC 端监控工具实现

1、手机自动化可解决的问题
( 1 ) 压力测试:一些连续不断的操作,比如反复切换歌曲播放及联网操作等
( 2 ) 极限临界测试:一些极限条件的构造(创建多个列表)及输入字符个数等
( 3 ) 兼容及中断:比如在播放或下载歌曲的时候来电话或者信息(动态交互)
( 4 ) 基本功能回归测试:这样大大的节约了时间和人力成本
( 5 ) 预测试(版本接收测试)
( 6 ) 专项测试

2、实现原理
(1) 手 机 自 动 化 测 试 的 原 理 为 PC 上 一 个 控 制 端 ( 测 试 工 具 ) 与 手 机 上 的 一 个agent 端,通过串口、USB 或者无线方式将 PC 与手机终端相连,然后应用测试工具向手机发送请求或者命令,手机收到命令或者请求后,交给 agent 端解析,然后 agent 将这些解析的命令下发给手机的各个功能模块所能识别的命令,调用那些功能模块模拟操作。完成这些操作后,手机会返回一些信息,agent 可以抓取这些信息,然后传回给 PC 端,这样就完成了一个完整的手机自动化测试。
(2) 关键点在于 agent,可以利用 MMI_Command(AT comand)的方式来控制手机终端,原理就是给手机提供一个响应的接口。
(3) 而对于 PC 控制端,这个测试脚本用各种编程语言都可以,看如何定义。
这里写图片描述

3、TMTS 的 PC 端框架架(agent)说明

为什么需要 PC 端框架

单单依靠 Instrumentation 无法满足跨应用测试的需求
一些功能,如在测试用例中修改服务器端数据库,很难在移动设备端实现

PC 端框架的原理

PC 端运行时,会不停尝试去连接 PC 本地指定端口,由于执行了 adb

forward 命令(所以要求运行测试的设备都是具有 root 权限的),PC 端实际会去连接移动设备端指定端口

移动设备端框架在运行时会启动一个 ServerSocket,监听来自 PC 端的

Socket 请求

移动设备端发送 athrun 自定义格式的命令至 PC 端,PC 端收到后收到后

会解析命令,然后执行具体的操作,将结果再通过 socket 发送至移动设备端

PC 端目前提供的功能

首先以下功能的 API 都在 framework 中提供,agent 只是负责实现这些功

通过 Android 系统中 monkey 去点击屏幕上一个点或是物理按键(目前建立与 monkey 的通信机制,暂提供这两项操作,可根据自身需求进行扩展)
修改服务器端(android 应用是客户端)的数据
在模拟器上模拟来电,模拟短信

二、关键技术实现

1、消息传送机制
利用手机 Modem 中提供的 AT Command 通过串口向手机端建立命令消息通讯,目前手机厂商提供了常用的 AT Command,基本满足普通的自动化测试需求。

2、图像识别
图像识别主要通过抓取 LCD 屏幕显示图像进行智能识别来模拟测试工程师的双眼辨识文字或图像信息,以此判断测试结果。主要涉及图像的获取和对比分析,智能识别是一个比较专业的研究领域,更进一步的研究需要进行调研,目前我们可以考虑是否能够通过第三方工具来实现,比如借助目前已经成熟的测试工具QTP 等。对于图像获取在手机平台上应该具备这样的接口,或者自行开发这个接口。

3、测试脚本

测试脚本的定义:
通常来说,测试脚本就是被测试工具执行的一系列指令,而不是在被测系统上执行的指令。测试脚本一般通过脚本开发人员编写或者录制脚本工具录制。拿我所用的手机自动化测试工具举例来说,被测试工具执行的是 python 脚本,而手机是用 C 开发的。最后发给手机执行的命令是通过手机 server 对测试工具发来的消息的解析。

测试脚本相关技术的目的
知道了什么是测试脚本之后,我觉得下一步应该去想一想为什么要去探讨这些技术,这些技术又给测试脚本带来了哪些好处。
关于上面的两个问题,我们首先得知道与测试脚本相关的两大活动。第一个是开发,另一个是维护。这两个活动都跟时间成正比,测试脚本的好,复杂,维护少,开发周期长;测试脚本简单,开发周期短,维护周期长。它们之间的关系可以用如下图来表示:
这里写图片描述

那么把开发
脚本作为一个工程来讲的话,我们就希望用最少的时间及最少的成本去做这两件事。使开发和维护达到一个最佳值。如此,我们探讨测试脚本技术的目的也就出来了,就是减少自动化测试脚本开发和维护的成本。
好的测试脚本的特性既然我们知道了运用测试脚本技术的目的,那么为了达到这个目标我们就要把其具体化。那下面我们就来罗列一下好的测试脚本应该具有的特性。
1. 可维护性
2. 模块化
3. 健壮性
4. 复用性

接下来我们要谈的关于测试脚本的关键技术就是为了使测试脚本具有以上这些
特性。
测试脚本关键技术
下面我会以所用到的手机自动化测试工具为例,讲解一个最原始的”脚本”
如何运用这些技术对脚本进行封装和设计使其演变成一个高级的好的测试脚本 。
首先我们来看看最原始的脚本使个什么样子,你可以这样理解,它是最后运
行在被测软件上的那段代码,严格上来说,它都不能被称为脚本,所以我给加上
引号。就那我所用的手机测试工具来说吧,最原始的脚本就是一个自定义的 xml
结构的消息。xml 结构通常如下,

<teststep>
<key_input_sequence>
<key/>
</key_input_sequence>
<expect>
<display/>
</expect>
</teststep>

上 面 的 xml 消 息 由 自 动 化 测 试 工 具 的 客 户 端 通 过 usb 数 据 线 发 给 手 机 的 test

server 端,test server 端对消息进行解析,然后再由 Server 端发给相关 Server 。
这些相关 Server 在这里通常是 keyboard server 和 window server. Keyboard
server 通 常对 接受 到的 按键序列 进行 响应,test server 会 从 Window server
获得手机的 UI 信息并和 expect 的值进行对比。
现在我们就要对这个最原始的脚本进行设计和封装。
1.线性脚本
线性脚本是我们对最原始的脚本的第一次封装,线性脚本就是简单的测试脚本,形象的来定义就是我们通常录制手工测试用例得到的脚本,这些脚本由低层次的一些函数组成,这些低层次的函数通常由测试框架来提供。他们通常提供按键,移动,输入数据,比较数据的功能。比如笔者的手机自动化测试工具所提供的相关函数有 pressKey(),expectText(),
expectAnimation(),expectBitmap()函数。通过线性脚本使我们远离了编写 xml消息的繁杂,我们只需根据测试用例录制脚本就能完成测试脚本的编写,这迈出了自动化测试脚本编写的第一步,我们来看看线性脚本的特点。

简单,开发周期短
没有逻辑判断,也就是说编程语言中的控制语句 if,else,while
可维护性差,脚本很差,只要 case 发生一点变化,就要进行重新录制
没有复用性

让我们用好的测试脚本所具备的特点来判断,基本都不符合。所以线性脚本不是我们最终所追求的脚本,我们还需继续努力。

2.结构化脚本
自动化脚本的价值体现在脚本的复用,复用的次数越多,价值也就越大。为了提高脚本的复用性,引用了结构化设计的脚本。结构化脚本就是在原有线性脚本的基础上增加了各种逻辑结构,包括选择性结构,分支结构,循环迭代结构,还具有函数调用功能。这样就可以使脚本模块化,使脚本具有复用性,维护性也得到了提高。但依然存在问题,比如,测试数据和测试逻辑混在一起,相当于测试数据硬编码在脚本中,于是我们引入了数据驱动这个技术。
3.数据驱动脚本
结构脚本健壮性已经很好了,但是缺点还是有的,通过研究测试用例一般分为测试数据和测试逻辑。就能发现结构化脚本没有把这两个分开,测试数据还是和测试逻辑黏在一起,这样就会给维护带来复杂性,比如,我们只想改改测试数据,我们不得不去动测试逻辑相关的脚本。这样就很可能会无意中破坏测试逻辑。如果把两者分开,则可以保证两者的修改无不影响。这样对 tester 来说修改测试数据就变的容易了,而不需要去懂脚本相关的知识。另外数据驱动脚本也进一步提高了脚本的复用性,尤其是对那些只需改动测试数据的测试用例,测试逻辑脚本得到了复用。而在原来的结构化脚本是不行的。其实数据驱动这项技术不仅在测试中用到,在开发中也在用,就比如 web 开发,html 语言,wpf 的 xaml,moziila
的 xul 等的一些 xml 方式的界面开发都应该是数据驱动的。笔者的自动化测试工具就是用的 xml 来定义测试数据,然后通过对 xml 的解析来导入所需的数据从而建立相关的测试模型。
4.关键字驱动脚本

关键字 驱动 就是 面向脚本 开发工程师和 tester.使 他们编写 脚本 和阅 读脚 本更加容易。就拿笔者使用的测试工具来说吧,比如要通过手机的 option 选项来选择 option 菜 单 中 的 某 一 项 , 如 果 不 用 关 键 字 驱 动 脚 本 , 我 们 就 会 写 一 大 堆pressKey()的按键序列,来让手机执行这些按键命令,这样对 tester 就很不友好,这些按键序列其实应该是面向机器的。如果用了关键字驱动脚本,我们会提供 select 关键字,然后提供 item 参数。加入关键字驱动技术后,同样实现这
个功能,只需调用函数 select(item)即可,这样既利于脚本编写,也利于维护。
因为,从维护的角度来看,你只需要维护 select(item)这个方法。
这些技术都不是各自独立存在的,是相互共存的。讲完了这些测试脚本技术,那么我们可以对测试脚本语言的选择有一些了解。为了实现这些测试脚本技术,我们的脚本语言一定要扩展性好,那么自己定制的测试脚本语言在扩展性方面就比较差,所以我们要选择标准的测试脚本语言,比如 python,vb,tcl,ruby.它们的扩展性好,功能强大,能良好的与开发人员进行沟通。


http://chatgpt.dhexx.cn/article/0rXuaZig.shtml

相关文章

五款Android 应用的自动化测试工具

如今自动化测试已经应用到每天的测试中。这不足为奇&#xff0c;因为自动化测试在测试过程中节约了时间&#xff0c;还能避免包括人为因素造成的测试错误和遗漏。 自动化测试工具选择很多。一些是开源的&#xff0c;一些非常贵。一些自动化工具是几年前出的,一些才在市场上出来…

Android 应用有哪些自动化测试工具

目录 简述&#xff1a; 1、Monkey 测试 2、 MonkeyRunner 测试 3、Robotium测试 4、Ronaorex测试 5、Appium测试 6、UI Automator 测试 7、TestBird 测试 简述&#xff1a; 本文介绍几款流行的 Android应用自动化测试工具。希望对你有帮助&#xff0c; Monkey测试&…

六款Android 应用的自动化测试工具

如今自动化测试已经应用到每天的测试中。这不足为奇&#xff0c;因为自动化测试在测试过程中节约了时间&#xff0c;还能避免包括人为因素造成的测试错误和遗漏。 自动化测试工具选择很多。一些是开源的&#xff0c;一些非常贵。一些自动化工具是几年前出的,一些才在市场…

超好用的手机开源自动化测试工具分享

随着消费者对移动应用使用的占比增加, APP测试越来越被重视! 在现已出现的开源移动自动化测试工具中&#xff0c;总结了几个最实用的&#xff0c;希望对大家有帮助&#xff1a; 一、Calabash&#xff08;适用于Android和iOS&#xff09; Calabash-android是支持android的UI自…

几款Android 应用自动化测试工具

简述&#xff1a; 本文介绍几款流行的 Android应用自动化测试工具。 Monkey测试&#xff1a;随机测试&#xff0c;压力测试&#xff0c;运行在模拟器或实际设备中。 MonkeyRunner测试&#xff1a;操作简单&#xff0c;可录制测试脚本&#xff0c;可视化操作&#xff0c;主要生成…

2021年四大流行Android手机自动化测试工具,全在这里了

Android 自动化测试的工具非常多&#xff0c;但是目前主流使用的就那几个&#xff0c;我会详细说明他们各自的情况&#xff0c;你可以根据自己的需要决定使用哪款工具。 Appium Appium 是目前最主流的移动测试自动化框架&#xff0c;不仅支持 Android 应用&#xff0c;而且适…

2022年四大流行Android手机自动化测试工具,全在这里了

Android 自动化测试的工具非常多&#xff0c;但是目前主流使用的就那几个&#xff0c;我会详细说明他们各自的情况&#xff0c;你可以根据自己的需要决定使用哪款工具。 Appium Appium 是目前最主流的移动测试自动化框架&#xff0c;不仅支持 Android 应用&#xff0c;而且适…

Android 手机自动化测试工具有哪几种?

一、Android手机自动化测试工具&#xff0c;常用的有这7中&#xff1a; 1、首推Appium&#xff1a; 推荐理由&#xff1a;功能非常强大的移动端自动化测试框架&#xff0c;还免费 下载链接&#xff1a;Appium: Mobile App Automation Made Awesome. Appium是一种被广泛使用的…

什么是过滤器?拦截器和过滤器有何区别?

过滤器(Filter) servlet过滤器作用&#xff1a; 1.对不符合要求的请求进行拦截&#xff0c;使之不能到达servlet 2.抽取公共的代码&#xff0c;对共同的业务进行抽离&#xff0c;对请求的数据进行加工 &#xff08;例如设置编码格式、记录日志信息、鉴别用户是否登录等&#x…

面试官:谈谈过滤器和拦截器的区别?

点击关注公众号&#xff0c;Java干货及时送达&#x1f447; 来源&#xff1a;blog.csdn.net/qq_42924666/article/details/109563400 一、拦截器和过滤器的区别二、拦截器和过滤器的代码实现三、总结 1、什么是Filter及其作用介绍2、Filter API介绍3、Filter链与Filter生命周期…

springboot(13)拦截器和过滤器的区别

1. 解释拦截器和过滤器的概念 拦截器是一种拦截请求并在请求到达目标之前执行某些任务的机制。 过滤器是一种修改或拦截请求或响应的机制。通常&#xff0c;它们用于在特定的请求或响应被处理之前对其进行处理或修改。 2. 触发时机 过滤器和拦截器触发时机不一样&#xff0…

详解拦截器和过滤器的区别

拦截器和过滤器的区别 过滤器和拦截器的区别&#xff1a; ①拦截器是基于java的反射机制的&#xff0c;而过滤器是基于函数回调。  ②拦截器不依赖与servlet容器&#xff0c;过滤器依赖与servlet容器。  ③拦截器只能对action请求起作用&#xff0c;而过滤器则可以对几乎所…

SpringBoot 的拦截器和过滤器的区别和使用场景

Servlet 现在我们通常做 Java Web 开发都会用 SpringBoot &#xff0c;但要知道 SpringBoot 只是用来简化开发的&#xff0c;在此之前&#xff0c;Springframework 只是一个粘合剂框架&#xff0c;用来整合各种 Java Web 技术的&#xff0c;SpringMvc 都是出现的比较晚的技术&…

拦截器和过滤器的区别是什么

过滤器 过滤器Filter是基于Servlet实现。Servlet的工作原理是拦截配置好的客户端请求&#xff0c;然后对Request和Response进行处理。Filter过滤器随着web应用的启动而启动&#xff0c;只初始化一次。 过滤器的配置比较简单&#xff0c;直接实现Filter 接口就可以了&#xff…

Spring拦截器和过滤器的区别

本文来说下Spring拦截器和过滤器的区别 文章目录 概述拦截器和过滤器介绍过滤器 (Filter)拦截器 (Interceptor)主要区别 拦截器和过滤器的区别实现原理不同使用范围不同触发时机不同拦截的请求范围不同注入Bean情况不同控制执行顺序不同 本文小结 概述 拦截器和过滤器 filter和…

springboot拦截器和过滤器的区别与使用

拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处&#xff0c;比如二者都是AOP编程思想的体现&#xff0c;都能实现权限检查、日志记录等&#xff0c;不同的是&#xff1a; 适用范围不同&#xff1a;filter是servlet规范规定的&#xff0c;只能用于web程序中…

Springboot--拦截器、过滤器 区别,作用,实现方法

Springboot–拦截器、过滤器 拦截器和过滤器的区别 拦截器不依赖于servlet容器&#xff0c;这是springMVC自带的&#xff0c;过滤器依赖于servlet容器拦截器是基于java的反射机制&#xff0c;过滤器是基于函数的回调拦截器只能对action请求起作用&#xff0c;而过滤器可以对几…

Spring Boot拦截器与过滤器的区别

Spring Boot拦截器与过滤器的区别 在使用Spring Boot开发Web应用程序时&#xff0c;您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下&#xff0c;您可以使用两种不同的机制&#xff1a;拦截器和过滤器。本文将介绍…

Springboot过滤器和拦截器的区别

上两篇文章我们介绍了过滤器Filter和拦截器Intercepter&#xff0c;其功能都是对请求进行拦截并对请求过滤&#xff0c;本篇文章就介绍一下两者的区别 1. 过滤器和拦截器的区别 过滤器和拦截器触发时机不一样&#xff0c;过滤器是在请求进入容器后&#xff0c;但请求进入serv…

关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理

拦截器与过滤器的区别总结&#xff1a; 过滤器在web.xml中配置&#xff1a; &#xff08;1&#xff09;因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。<url-pattern>*.action</url-pattern> &#xff08;2&#xff09;…