0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 软件开发

UI自动化测试简介-软件测试

发表时间:2023-12-06 21:04:07

文章来源:炫佑科技

浏览次数:133

菏泽炫佑科技

UI自动化测试简介-软件测试

​软件测试是随着软件开发而诞生的。 随着软件规模越来越大、结构越来越复杂,软件测试也从*初的简单“调试”发展到如今的自动化测试。

什么是自动化测试? 自动化测试是将人类驱动的测试行为转换为机器执行的过程。 自动化测试通常使用某些工具或框架。 虽然不能完全取代手动测试,但与手动测试相比,自动化测试可以降低人力成本,减少重复性工作,从而更快速、高效地进行测试活动。

测试金字塔是自动化测试过程的金字塔形策略结构。 用于指导软件开发过程中各层测试投入的工作量比例。 它是由 Mike Cohn 在其 2009 年出版的《Scrum 敏捷软件开发》一书中首次提出的。 Mike Cohn在书中指出:测试金字塔从上到下分为三层,即UI测试、服务/接口测试、单元测试。 越接近金字塔底层的测试活动,就越应该投入更多的工作,即单元测试。 投入的工作量*大,其次是界面测试,投入*少的是UI测试。

用户界面测试

UI 测试是*接近软件真实用户行为的测试类型。 它通常模拟真实用户使用软件的行为,即模拟用户在软件界面上进行的各种操作,并验证这些操作对应的结果是否正确。

接口测试(API测试)

​API测试主要针对各个模块暴露的接口,通常采用灰盒测试方法。 首先,使用黑盒方法设计如何调用API的测试用例。 同时,在测试执行过程中统计代码覆盖率,然后根据代码覆盖率添加越来越多的有针对性的测试用例。

单元测试

​单元测试属于白盒测试的范畴,通常由开发工程师自己完成。 越早发现缺陷,修复的成本就越低。

为什么要做UI自动化?

随着版本的不断迭代,越来越多的新软件功能被添加,对测试资源的需求也越来越大,进行手动测试的时间也越来越长。 依赖手动测试开始变得棘手,因此人们开始寻找解决方案,UI 自动化应运而生。

手动测试有以下缺点:

UI自动化测试具有以下优点:

UI自动化测试的特点

了解了为什么要选择UI自动化测试之后,我们需要了解UI自动化测试的使用场景。 UI是User(用户界面)的缩写。 UI自动化所做的就是模拟用户行为,完成用户界面测试。 这本质上限制了它的使用场景:

所以在开始之前我们*好先了解一下哪些业务场景可以进行自动化测试。

2.UI自动化测试工具

经过多年的发展,UI自动化测试已经出现了许多优秀的测试工具。 下面简单介绍一下测试领域一些常见的测试工具。

1、

​是SDK自带的测试工具。 在测试过程中,它会向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),对正在开发的应用程序进行压力测试,并有日志输出。 。 事实上,这个工具只能对程序进行一些压力测试。 由于测试事件和数据是随机的且无法定制,因此具有很大的局限性。

2、

也是SDK提供的一个测试工具。 严格来说,它实际上是一个API工具包,功能更强大,允许您编写测试脚本来自定义数据和事件。 功能足够强大,但是录制的脚本采用坐标轴作为定位方式,而且设备类型较多,分辨率各异,可移植性不好。

3.

是早期提供的自动化测试工具类。 虽然当时 JUnit 也可以进行测试,但它允许您对应用程序进行更复杂的测试,甚至是在框架级别。 您可以模拟按键、抬起、屏幕点击、滚动和其他事件。

这些功能是通过在同一进程中运行主程序和测试程序来实现的。 您可以将其视为一个类似或没有接口的组件,用于在程序运行时监视您的主程序。

缺点是对于测试人员来说,编写代码的能力比较高,需要对相关知识有一定的了解,而且还需要配置.xml文件,无法跨多个App。

4.

它也是提供的一个自动化测试框架,基本上支持所有的事件操作。 相比之下,它不需要测试人员了解代码实现细节(无需查看源代码即可抓取App页面上的控件属性)。 基于Java,测试代码结构简单,易于编写,学习成本低。 编译完成后,所有设备或者模拟器都可以运行测试,并且可以跨App(比如:很多App都有选择相册、打开相机拍照的功能UI自动化测试简介-软件测试,就是跨App)。 缺点是仅支持SDK 16(4.1)及以上版本,不支持App。

5.

​是一个开源的自动化测试框架。 相比之下,其特点是规模更小更简洁,API更精确,测试代码编写简单,易于快速上手。 因为是基于的,所以不能跨App。

6.

​基于测试框架,可以测试app、app、,但网上资料较少,社区也不是很活跃。

7.

也是基于目前国内外用的比较多的测试框架,资料比较多,社区也比较活跃。 缺点是测试人员必须有一定的Java基础,了解基本组件,而且不能跨App。

8、

​ 是目前*主流的移动测试自动化框架,不仅支持应用程序,还适用于iOS、混合和Web应用程序。

它底层完全使用了 和 的 API,所以如果你以前使用过它,你几乎不需要额外的学习成本就可以使用它。 支持(API级别16以上)和(API级别低于16),但是你不需要知道这两个框架的具体用法,它们已经为你封装成了统一的使用规则。 优点之一是您可以用几乎任何编程语言(例如 Java、-C、PHP、Ruby 或 C# 等)编写脚本。 无需重新编译或更改应用程序即可匹配,并且有一个非常庞大且活跃的社区。

9、

​是网易出品的基于图像识别和poco控件识别的UI自动化测试套件。 它由一个框架、一个poco框架和。 它是一个适用于游戏和应用程序的跨平台UI自动化测试框架。 用户不需要逐行编写代码,而是截屏并将截屏排列形成可执行的程序。 另外,它也是基于UI控件搜索框架poco,这也是网易自己的跨平台U测试框架。 原理类似于通过控件的名称、id等定位目标控件,然后调用函数方法,如 click() 、 swip() 等方法来点击或操作目标控件。

虽然它*初用于游戏测试,但现在广泛用于应用程序测试。 录制和执行脚本没有开源,不方便深度定制。

10.

​是蚂蚁金服开源的一款移动APP测试工具。 提供脚本录制、编辑、播放、结果显示、一机多控(即一部手机通过设备间通信控制多部手机执行脚本)等功能,其录制和执行测试用例全部在手机APP中完成。 无需使用计算机软件与测试设备交互,因此通信结构更简单、更高效。 元素的识别也使用类似的控件,并引入类似的图像识别方法。

3. 简介

过去的性能测试工具主要有三种形式:PC驱动工具、侵入式测试模块、ROOT工具。

​提供手机免root应用提权解决方案。 可以简单概括为:是一种无线、非侵入、免Root的专用测试解决方案。

传统的功能测试通常有两种方法:一种是手动执行测试,另一种是基于测试框架编写自动化脚本。 前者成本巨大,可能需要大量人力来应对不断加速的产品迭代; 而后者需要测试学生大量的代码能力,这也导致手动测试转为自动化测试以节省人力的进展相对缓慢。

​将传统仅在PC上具备的自动化测试能力移植到移动平台,并根据手机的使用习惯,开发了简单易用、功能强大的自动化测试框架。 无需测试学生编码能力,降低了使用门槛,更容易推广。

​主要功能有:自动化测试-录制回放、兼容性测试-一机多控、性能测试、稳定性测试。

虽然 和 都有广泛的应用范围,但与 和 相比,它们具有以下优点:

(一)总体结构

在该方案中,底层依赖主要是“无线ADB、系统辅助功能、调试和图像识别技术”。 稍后将介绍它们的具体应用场景。 同时,基于底层依赖,封装了一套核心能力,包括“控制定位、事件驱动、性能采集、依赖注入”,并实现了录音、播放、数据处理等公共服务能力在服务层。 在架构的*上层,结合界面交互逻辑封装了各个功能的入口。

(2) 录音与回放

在记录过程中,会拦截用户的操作,识别用户操作的位置,突出显示当前操作的控件,并记录用户当前正在执行的操作类型。 每次操作后,都会记录操作类型和每个目标控件。 所有信息均被记录。 这里的控件信息包括控件的ID、文本等基本信息,以及相对布局、截图信息等。

播放时,会对之前录制的数据进行一一解析,通过智能搜索算法综合各种属性来定位目标控件。 一旦找到该控件,就会进行相应的操作,比如点击、滑动等,所有步骤执行完毕后,会显示本次回放的结果,包括日志、截图等信息,作为本次回放的总结。

​录制和回放基于同一套逻辑,包括控制结构构建、控件定位、事件驱动三个部分。 两者的区别主要在于控件的定位:

(3) 底层依赖的核心功能 1) 基础依赖

下面主要介绍控制搜索功能和运行监控功能所依赖的基本解决方案:无线ADB解决方案和解决方案。

无线ADB解决方案

对于自动化来说,ADB shell 的执行能力是一切的基础。 在PC上,SDK提供的ADB与同样运行在PC上的ADB进行通信,然后ADB通过USB与位于设备中的Adbd进行通信。 要实施无线解决方案,我们必须摆脱对 USB 电缆的依赖。 幸运的是,系统还提供了基于ADB的连接方式。 这种情况下,只需按照ADB通信协议与本机的5555端口进行通信,即可获得ADB shell的执行能力。

这个无线ADB解决方案是区别于其他UI自动化测试框架的核心解决方案之一。 您可以在其他项目中学习该无线解决方案。

计划

​辅助函数()实际上是一个系统提供的服务,它本身就是一个继承类。 此服务提供增强的用户界面,旨在帮助残疾人或可能暂时无法与设备完全交互的人。

从开发者的角度来看,主要用到两个功能:查找界面元素和模拟点击。

(,所使用的方案)与相关:使用底层,也使用底层。 它们都是通过RPC交互来获取和操作界面元素。 区别在于:只能在shell环境中执行,而可以在app环境中运行,但需要用户手动启动服务。

2)基本功能

基于以上两个基本能力,下面对两个底层功能进行介绍:基本控制搜索功能和用户操作监控功能。

控制搜索功能

随着移动终端动态能力的稳步发展,越来越多的应用采用“+H5/小程序”的混合开发方案。 考虑到近年来移动游戏行业的快速发展,移动游戏自动化测试的需求越来越大。 为了尽可能适应各种场景,提供了三种搜索模式:

**种方案的核心是基于生成当前控件视图树并记录ID、文本等属性,适合场景。

第二种解决方案是基于调试协议。 通过注入js,可以获得页面布局以及各个元素的属性。 控件的定位思路与辅助功能方案一致。 适用于H5/小程序场景。

第三个方案是图像匹配方案,在端实现了一套图像比对能力,结合了模板匹配、特征匹配等算法,并做了一定的适配和调整。 适合游戏自动化场景。

​目前开源代码中,中的控件和控件都是使用生成的控件视图树。 断言函数和截图点击函数将使用图像匹配方案。 现阶段基于其的调试协议方案尚未开源。

用户操作监控功能

A。 事件获取机制:

关于操作监听和控件获取,可以获取用户的操作事件并关联相应的控件,可以实现大部分功能。

​但也有不足之处。 例如,对于HTML5场景,辅助功能的控件获取会存在延迟,导致控制结构不准确。 另外,对于一些自定义控件,辅助函数只能获取对应的控件,而缺乏具体的信息。 坐标信息,导致控件无法按预期运行。

因此,采用“结合系统功能”的策略,通过直接解析系统原生事件来获取用户的操作行为。

简单来说,通过 ,可以获取用户操作屏幕的具体坐标,以及手指落下和抬起的具体时间。 但该命令的使用需要SHELL权限,限制了普通应用程序获取相关数据的能力。 通过系统的无线调试功能,实现了一套纯端的SHELL执行能力,可以在系统上执行adb相关命令。 开源库集成到应用程序中,并打包成一组 ADB 命令执行工具。

通过该命令,结合当前页面的控制结构树,获取用户点击的具体坐标。 遍历控件树,找到坐标点击位置*上面的控件。

b. 事件拦截机制:

代码中,当需要拦截事件时,设置触摸监听模式(通过该标志)。 在这种模式下,系统不会在视图树中分发事件,而是将各种事件分发到实现类中。 这时它会自己监听get event事件并分发处理该事件。 当不需要拦截系统分发事件时,该标志将被重置。

(4) 播放能力的扩展

​记录的用例将以JSON的形式存储。 不仅可以直接在设备上回放用例自动化软件开发,还可以通过解析器将用例转换为当前主流自动化测试框架等脚本,轻松连接云测试平台。 此外,得益于文本捕获和图像识别功能,用例可以在终端上记录一次,生成的脚本可以同时在iOS和iOS设备上回放。

(5)脚本编辑

​还提供用例步骤的插入、删除、修改等用例编辑功能,可以有效降低用例的维护成本。 此外,还引入了循环、条件等过程控制能力。 如果用例安排得当,需要重复操作的工具脚本或者需要暴力播放的稳定性测试脚本都可以轻松实现。

(6)一机多控

在各类特殊测试中,兼容性测试是*耗时、*费力的。 测试人员需要关注各种系统版本、各大手机厂商、各类屏幕等,想要通过纯手工测试来保证兼容性测试的质量成本非常高。

​ 基于录音和播放功能,实现了一套兼容性测试方案。 在录制和回放场景中,用户的操作首先记录在一台设备上,然后在任意设备上回放该操作。 如果场景扩展到多台设备,可以用一台设备控制多台设备。 这组功能称为“一机多控”。 具体来说,主机与从机建立连接,然后将用户的操作实时发送到主机上的各个从机,并在从机上完成操作的回放。

​一机多控环境更加灵活。 手头的手机安装完毕后,通过简单的建立操作即可完成部署。 一机多控适配了目前市面上主流机型和ROM,并封装了一些快捷功能以提高测试效率,如应用安装、数据清理、设备信息查看等。

(7) 性能测试-数据收集

​性能数据可随意测量,并可在本地自动生成报告。 数据采集​​支持手动和广播触发方式,方便与自动化结合。

以上功能仅作简单介绍。 详细的功能介绍可以参考官方开源库的介绍:

参考:

/A/…

……

//独奏…

//2507…

//2013...

//1983…

……

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多