真正的黑盒测试自动化:用机器人测试移动应用程序

2024-03-12 21:10

本文主要是介绍真正的黑盒测试自动化:用机器人测试移动应用程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

\

关键摘要

\\
  • Axiz的原型使用成品硬件组件搭建而成,包括基于3D视觉的自校准系统和基于Arduino的四轴机器人手臂。它通过外置的CMOS 1080像素的摄像头监控测试执行。\\t
  • 基于机器人的测试可以解决从桌面到移动计算的巨大转变所带来的挑战,并且可以更轻松地对UI手势和传感器输入等特性进行测试。\\t
  • 诸如Appium、Robotium和UIAutomator之类的框架可以实现一定程度的自动测试执行。 然而,它们依赖人工来设计测试脚本,就会成为瓶颈。\\t
  • 手持设备的出现使我们需要重新考虑黑盒测试的真正含义,这涉及到增强真实性、设备独立性、成本效益比和减少对假设的依赖等诸多因素。\\t
  • 实验证明,Axiz准确地执行了机器人测试生成的用例中包含的每个测试事件,并通过了所需的预置检查点。\
\\

8e42a0e7e5b034d4dec843ac9befae36.png本文最初发表于IEEE Software杂志。IEEE Software杂志提供了有关当今战略技术问题的可靠的、经过同行评审的信息。为了应对运营可靠而又灵活的企业的挑战,IT经理和技术主管需要依靠IT专业人员提供最先进的解决方案。

\\\\

机器人被广泛应用于大量重复性任务。 那为什么不将它用于软件测试?机器人测试向测试人员展现了一种新的测试形式,比以前所见过的都更接近黑盒测试。为此,我们开发了Axiz,用于移动应用的机器人测试生成器。在这篇文章中,我们将我们的方法与基于模拟的测试自动化进行比较,描述了一些能从使用机器人测试中获益(甚至是必须使用机器人测试)的场景,并展示了我们如何将Axiz应用于Google计算器应用程序的测试。

\\

为什么要使用机器人测试?

\\

基于机器人的测试可以解决从桌面到移动计算的巨大转变所带来的挑战[1][2]。随着人们的常用设备从桌面设备转变为移动设备,这一转变趋势预计将会加速爆发[3]。在这个新兴的移动世界中,我们比以往任何时候都需要自动化软件测试。但是,我们可能需要重新考虑软件测试的一些原则。

\\

移动设备支持丰富的用户交互输入,比如通过触摸屏进行手势操作、通过传感器(GPS、加速度计、气压计、NearId通信等)得到各种信号。它们为异构和动态环境中的大量用户提供服务,例如地理位置和网络基础设施。为了全面地探索和发现缺陷,测试必须考虑在各种测试场景下与各种传感器的复杂交互。一项关于移动应用程序开发的调查表明,目前移动应用测试实践主要依赖手工测试,而手工测试本身是低效且存在偏差的[4]。诸如Appium、Robotium和UIAutomator等框架可以实现一定程度的测试自动化。然而,它们依赖人工来设计测试脚本,就会成为瓶颈。

\\

幸运的是,Android测试自动化相关研究最近有了很多新进展[5][6][7][8]。然而,这些技术使用侵入式(部分或全部白盒)方法执行测试用例,并且假设测试工具享有开发者权限,而实际情况并不总是如此。

\\

这些技术中很多需要修改应用程序代码甚至操作系统,而最接近黑盒测试的方法仍需要通过测试套件与被测应用程序(AUT)通信。这不是真正的黑盒测试,因为它依赖于测试套件与被测应用程序之间的机器对机器接口。

\\

真正的黑盒测试方法将不会作假设,而只依赖于人与应用之间的设备级网络物理接口。在这个抽象级别进行测试能更好地模拟真实用户的体验,从而可以得到更接近真实场景的测试用例。此外,这种方法本质上是与设备无关的,在可能涉及2000多个不同待测设备的情况下可以带来相当大的好处[9]。

\\

机器人测试宣言

\\

手持设备的出现使我们需要重新考虑黑盒测试的真正含义。移动应用程序的用户体验与桌面应用程序截然不同,现有的机器对机器黑盒测试缺乏真实性、使用情况敏感度以及快速并廉价地生成可操作的测试用例所需的跨平台灵活性。

\\

本节列出了机器人测试的宣言,采用这套方法生成的测试用例能以真正的黑盒(完全非侵入式)方式执行。表1对手动测试、基于模拟的测试和机器人测试进行了比较。

\\

增强真实性

\\

对于Android测试,MonkeyLab基于应用使用数据生成测试用例[10]。研究人员还发布了几种方法用于为Web系统提供真实的自动化测试输入[11]。然而,这些基于自动化测试输入的系统并不是针对移动平台的,而在关于如何生成自动化测试输入的文献中对测试用例的真实性几乎没怎么提到。

\\

如果开发人员认为测试集与真实情况不一致,他们就不会对出现崩溃的测试集采取任何行动。此外,由于缺乏领域知识,与真实情况不符的测试会让自动测试数据的生成变得很困难。移动计算还引入了另外一个问题:人类可能无法执行测试。例如,测试可能需要使用超过五个手指同时点击屏幕。

\\

相比之下,机器人测试套件可以模拟人的手势操作。虽然可能有一部分手势是机器人无法模拟的(还有一些手势可能机器人可以操作但人类无法重复),但至少机器人手势同为身体手势。因此,相比现在的非机器人测试环境模拟的虚拟手势——只是简单地在被测设备端生成一系列事件,机器人手势更接近真实的人机交互。

\\

设备独立性

\\

目前已有的白盒自动化测试和(声称的)黑盒自动化测试都需要修改被测设备和操作平台中的一个或两者皆要修改。即使是所谓的黑盒技术也是通过模拟信号与应用程序通信,而不是通过移动设备上真实存在的传感器(例如触摸屏或重力传感器)触发的信号。

\\

如前所述,机器人测试使用与人类用户相同的网络物理接口。它不太容易受到底层平台、API接口和实现细节的变化的影响。在如今这个上市时间至关重要的世界,能够在不同平台上进行快速部署是一个相当大的优势。

\\

更好的成本效益比

\\

人工测试是相当昂贵的,虽然它有更好的真实性和设备独立性。反之,目前的自动化测试数据生成则相对便宜,仅依赖于计算时间,但它缺乏真实性和设备独立性。机器人测试则能达到最佳的成本效益比,它结合了人工测试和机器对机器自动测试的优点。

\\

虽然从历史上来看机器人技术曾经非常昂贵,但如今机器人技术的成本正在迅速下降。虽然众包也可以降低人工测试的成本[12],但说到底还是不可能比机器人测试更便宜。

\\

减少对假设的依赖

\\

传统的自动化测试对被测系统提出了许多假设,而人工测试生成测试数据时提出的假设较少。机器人测试在提出假设的数量上更接近人工测试,但是它能够低成本地生成大量测试用例这一点则更接近现有的自动化测试。

\\

Axiz

\\

图1展示了Axiz的架构,包括两个高级组件:机器人测试生成器和机器人测试执行器。

\\

机器人测试生成器

\\

机器人测试生成器分析被测设备,并使用提取到的信息(包括应用程序类别、静态字符串和API)来调整真实性模型。该模型使用之前收集的经验数据,其中包括已知的真实场景测试用例。

\\

09f76ec0981257815aef871921bc566c.png

\\

表1:选择手动测试、基于模拟的测试或机器人测试的参考标准

\\

基于对用户使用情况的观察结果,我们得到了一个完整的属性列表(例如两个相邻事件之间的延迟、事件类型和事件模式),其中涵盖了潜在的真实场景测试用例的特征和属性。我们希望这些特征能够反应真实用户环境中发生的情况,以便Axiz利用它们来指导和约束自动化测试数据生成。

\\

6258bfe1b985f0e4ce009b6561e00bc6.png

\\

图1. Axiz机器人测试系统的架构。机器人测试生成器生成基于真实场景的测试用例。机器人测试执行器剔除无法执行的测试用例并执行其余的测试用例。

\\

机器人测试生成器将真实性模型和被测设备信息传递给进化搜索组件,以生成和改进测试用例。这些测试用例的真实性来源于两个方面。首先,我们通过重用和扩展基于真实场景的测试用例(例如Robotium或Appium测试脚本),改进应用程序测试人员以前手动编写的测试。其次,通过搜索由真实性模型约束的解决方案空间,重点生成满足早先由众包测试确定的约束条件的测试用例。

\\

我们基于测试用例的性能(如代码覆盖率和故障发现率)和由真实性模型评定的真实性来评估生成的测试用例的质量。

\\

机器人测试执行器

\\

我们通过在真实设备上执行用例来进一步验证候选的测试用例,使这些用例与用户或手动测试人员操作的方式大致相同。机器人测试执行器将代码形式的测试脚本转换为机器可执行的命令,然后在机器人手臂上执行它们。

\\

机器人手臂可以与移动设备进行非侵入式地交互,就像人类一样。这个过程需要利用反向运动学和校准组件使操纵器的动作更准确。摄像头监控移动设备的状态。机器人测试执行器通过计算机视觉技术进一步处理来自摄像头的图像数据,包括执行对象检测和预测点对照。

\\

最后,机器人测试执行器将执行过程中记录的所有过程数据发送到测试筛选器,以确定候选测试用例是否可以在真实场景中执行。如果无法执行,测试执行器会将其过滤掉。否则,Axiz将保存该测试用例以便后续再次使用。

\\

Axiz原型实现

\\

我们开发了Axiz的原型来演示这套系统的可行性(见图2)。我们使用一套廉价、适用性广且通用的成品硬件组件来开发这个原型。我们使用3D视觉自校准功能[13]来校准和调整机器人的机械手,使系统得以可靠运行,并为预测点对照器提供输入。

\\

机械手是一个基于Arduino的四轴机器人手臂。它由重复定位精度为0.2 mm的步进电机驱动。每个轴的最大移动速度从115至210度/秒不等(这是负载为200克时的计算结果,这个最大移动速度对于大多数移动设备来说都已经足够大了)。在机械手的末端是用于模拟手指手势的触控笔。

\\

一个外置的CMOS 1080像素摄像头监控测试执行。我们在配置有2.3GHz CPU和16GB RAM的MacBook Pro笔记本电脑上运行测试生成器和机器人控制器。

\\

我们利用Python中的反向运动学组件控制机器人手臂。对象检测器和预测点对照器则基于OpenCV库实现。机器人测试生成器使用(目前最先进的)工具Sapienz[14]并应用NSGA-II(非支配排序遗传算法II)——一种广泛使用的多目标遗传算法,进行基于多目标搜索的软件测试。这个工具可以生成一系列测试事件,用最少的测试事件实现更高的测试覆盖率和故障发现率。

\\

Axiz与Google计算器应用程序

\\

Google计算器应用程序的安装数已经达到了500万到1000万次[15]。虽然Google计算器的功能很简单,但不失为一个非常重要的基于真实场景的应用程序,因此通过它能够展示真正的黑盒机器人测试的潜力。

\\

我们使用机器人测试生成器来生成与真实场景相符的测试用例,并用机械手臂执行测试。 被测设备是Nexus 7平板电脑,配置了普通的用户权限和Android官方操作系统(无需修改)。作为对比,我们使用另一台Nexus 7,并对它进行更传统的侵入式测试。第二台Nexus 7直接连接到MacBook上的机器人控制器。它对应的测试工具具有开发者权限,并且可以修改操作系统。

\\

图3展示了整个测试过程。MacBook的解释器组件将事件指令转换为机器人手臂控制器的运动规律。然后该控制器基于反向运动学将运动规律转换为关节角度指令。如图3所示,机器人手臂点击第一台Nexus 7上的按钮执行测试。预测点对照器监控每一个测试事件。在执行每一个测试步骤之后,预测点对照器通过外置摄像头捕获图像并验证移动GUI的状态。

\\

Axiz准确地执行了生成的机器人测试用例中每一个测试事件,并通过了所需的预置检查点,使Sapienz的能力得以发挥到极致。

\\

9bdae2dcac1a24e608823dc6cf01a102.png

\\

图2:用四轴机器人手臂测试移动应用程序。我们使用一套廉价、适用性广且通用的成品硬件组件进行开发。

\\

eb0b23881d5f71ec44a6f719ea046dc0.png

\\

图3:使用Axiz测试一个真实的计算器应用程序。Axiz准确地执行了生成的机器人测试用例中每一个测试事件,并且通过了所需的预置检查点。

\\

Axiz执行测试的视频可以在这里查看。在这个视频中,我们将Axiz与传统的自动化测试工具并排展示,后者不使用机器人手臂,而只是产生一系列测试事件。该视频表明,用廉价的成品硬件开发的机器人手臂可以产生一组相同的测试事件,但更接近真实的使用场景,从而实现更好的设备独立性和真实性。

\\

致谢

\\

我们感谢Andreas Zeller在第36届CREST(进化、搜索和测试研究中心)开放研讨会[16]上所作的演讲,在演讲中他展示了一个有趣的视频,视频中一款人造手臂自动与移动设备进行交互。这成为了我们研究的灵感之一。

\\

参考资料

\\
  1. F. Richter, “Global PC Sales Fall to Eight-Year Low,” 14 Jan. 2016.\\t
  2. “Global Smartphone Shipments Forcast from 2010 to 2019(in Million Units)\\t
  3. “Worldwide Device Shipments to Grow 1.9 Percent in 2016, While End-User Spending to Decline for the First Time,” Gartner, 20 Jan. 2016.\\t
  4. M.E. Joorabchi, A. Mesbah, and P. Kruchten, “Real Challenges in Mobile App Development,” Proc. 2013 ACM/IEEE Int’l Symp. Empirical Software Eng. and Measurement (ESEM 13), 2013, pp. 15–24.\\t
  5. A. Machiry, R. Tahiliani, and M. Naik, “Dynodroid: An Input Generation System for Android Apps,”Proc. 9th Joint Meeting Foundations of Software Eng. (ESEC/FSE 13), 2013, pp. 224–234.\\t
  6. D. Amalfitano et al., “Using GUI Ripping for Automated Testing of Android Applications,” Proc. 27th IEEE/ACM Int’l Conf. Automated Software Eng. (ASE 12), 2012, pp.258–261. 10.\\t
  7. W. Choi, G. Necula, and K. Sen, “Guided GUI Testing of Android Apps with Minimal Restart and Approximate Learning,” Proc. 2013 ACM SIGPLAN Int’l Conf. Object Oriented Programming Systems Languages \u0026amp; Applications (OOPSLA 13), 2013, pp. 623–640.\\t
  8. K. Mao, M. Harman, and Y. Jia, “Sapienz: Multi-objective Automated Testing for Android Applications,”Proc. 25th Int’l Symp. Software Testing and Analysis (ISSTA 16), 2016, pp. 94 –105.\\t
  9. A. Reversat, “The Mobile Device Lab at the Prineville Data Center,” Facebook, 13 July 2016.\\t
  10. M. Linares-Vasquez et al., “Mining Android App Usages for Generating Actionable GUI-Based Execution Scenarios,” Proc. 12th Working Conf. Mining Software Repositories (MSR 15), 2015, pp. 111–122.\\t
  11. M. Bozkurt and M. Harman, “Automatically Generating Realistic Test Input from Web Services,” Proc. IEEE 6th Int’l Symp. Service Oriented System Eng. (SOSE 11), 2011, pp. 13 –24.\\t
  12. K. Mao et al., “A Survey of the Use of Crowdsourcing in Software Engineering,” J. Systems and Software, 2016.\\t
  13. J.M.S. Motta, G.C. de Carvalho, and R. McMaster, “Robot Calibration Using a 3D Vision-Based Measurement System with a Single Camera,” Robotics and Computer-Integrated Manufacturing, vol. 17, no. 6, 2001, pp. 487–497.\\t
  14. “Calculator,” Google, 2016.\\t
  15. A. Zeller, “Where Does My Sensitive Data Go? Mining Apps for Abnormal Information Flow,” presentation at 36th CREST Open Workshop (COW 36), 2014.\

关于作者

\\

Ke Mao是伦敦大学学院进化、搜索与测试研究中心(CREST)的研究生。读者可以通过k.mao@cs.ucl.ac.uk与他联系。

\\

Mark Harman是伦敦大学学院进化、搜索与测试研究中心(CREST)的主任。读者可以通过mark.harman@ucl.ac.uk与他联系。

\\

Yue Jia是伦敦大学学院进化、搜索与测试研究中心(CREST)的软件工程讲师。读者可以通过yue.jia@ucl.ac.uk与他联系。

\\

8e42a0e7e5b034d4dec843ac9befae36.png本文最初发表于IEEE Software杂志。IEEE Software杂志提供了有关当今战略技术问题的可靠的、经过同行评审的信息。为了应对运营可靠而又灵活的企业的挑战,IT经理和技术主管需要依靠IT专业人员提供最先进的解决方案。

\\\\

查看英文原文:Robotic Testing of Mobile Apps for Truly Black-Box Automation

\\

感谢薛命灯对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们。

这篇关于真正的黑盒测试自动化:用机器人测试移动应用程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802588

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo