英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
运用脚本技术对移动应用程序进行自动化测试:一项在Appium上的研究
Shiwangi SinghȦ*, Rucha GadgilȦ and Ayushi ChudgorȦ
摘要
测试是软件工程的重要组成部分,并且在基于产品的行业应用中占有重要的地位。如今,公司正在花费越来越多的时间和资源,通过手动测试来确保应用程序得到最佳用户体验和最佳性能的全面测试。进行测试是为了确保日常更新被正确反映出来。在本文中,讨论了移动应用程序(包括混合应用和网页应用)的自动化测试。本文包括使用开源移动测试工具Appium测试Android和iOS应用程序图形用户界面的技术。通过使用脚本技术自动测试来替代人工测试可以提高单位时间的效率和每个测试用例的准确性。此外,使用Appium和其他自动化测试工具进行比较,以说明使用Appium进行移动用户界面测试的优势。
关键词:脚本技术;移动应用程序;Appium;自动化测试;UI测试;iOS应用程序;Android应用程序
- 引言
据Ilene Burnstein介绍,软件测试被描述为一组规程,用于评估软件的某些方面(I. Burnetein,2003)。此外,软件测试意味着通过观察其执行来评估软件(P.Ammann和J.Offutt,2008)。软件测试大致分为两个主要类别:人工测试和自动化测试。人工测试被定义为人工测试被测系统的过程。在这个过程中,测试者与系统构成最终用户,并与系统中存在的不同功能进行交互,以消除所有可能的错误。在自动化测试中,我们利用软件基于不同于正在测试的系统来控制测试的执行。此处,将所产生的输出与预定义输出进行比较,以确保系统的正确工作。
软件测试包含了软件大部分的开发生命周期,这使完成该过程成本较为高昂。因此,摆在我们面前的挑战是在系统的开发中如何保持整体质量的同时减少工作量。
因此,自动化测试是面对这一挑战的最突出且最有效的解决方案。因为通过将自动化与重复性任务相结合,可以降低整个过程的成本,使其比人工测试更快速也更有效率。
- 人工测试VS自动化测试
软件测试主要分为手工测试和自动化测试两大类,可以区分如下:在人工测试中,没有程序可以来实现复杂的测试来获取隐藏的错误和指向丢失的信息,然而在自动化测试中,测试人员可以对复杂的测试进行编程,以得到隐藏的错误并指出丢失的信息。
其次,人工测试需要对人力资源进行巨大投入,但由于人为错误,每次测试都不能精确执行,因而测试也不太可靠。这种类型的测试变得缓慢、繁琐和耗时。随着越来越多的移动应用程序的出现,自动化为我们提供了一个解决方案,每次都通过执行相同的操作来消除犯错误的风险。因为该过程使用脚本,这使我们的测试有更多的可能来减少更进一步的错误。
Katja Karhu总结了两种测试之间的差异表明,自动化软件测试应该被用来预防在已经测试的工作模块中的新错误,而人工测试最好用于寻找新的和意想不到的错误(K. Karhu T.Repo和K. Smolander,2009)。这两种方法是相辅相成的,自动化测试可以在较短时间里执行大量的测试用例,而人工测试通过测试人员的知识来将测试目标定在系统中那些被认为更容易出错的部分。
第3节分为:第3.1节“数据中心应用类型”,第3.2节“测试用例基数”,第3.3节“Appium的体系结构”,第3.4节“Appium的工作方式”。
- 用户界面自动化测试
多年来,移动技术所取得长足的进展导致业务流程和信息技术的解决方案产生变化。这使得修改软件测试技术迫在眉睫。其中,软件测试技术包括测试设计、测试自动化、性能测试和用户界面自动化测试。本文中,主要对移动应用的用户界面自动化测试进行了研究,以展示其在自动化测试领域的影响因素。此外,还需要一种可以跨平台测试移动应用程序的工具。如今,最流行的移动应用程序大都基于Android和iOS平台。使用Appium自动化工具可以成功测试iOS和Android应用程序的功能。
-
- 数据中心应用类型
以数据为中心的应用程序可以是以下三种类型:原生应用,移动Web应用程序和混合应用(Swati Hajela,2012)。Appium支持这三种类型的所有应用程序,从而使如今测试现代应用程序通常使用的浏览器或网页。
1.原生应用:这些应用程序都在移动设备上安装和启动。在某些移动设备上测试此类应用程序需要访问设备ID。原生应用程序的功能性和可用性需要在多个设备上进行测试。
2.移动网页应用程序:这些应用程序不需要安装。它们需要在各种移动浏览器上进行测试。
3.混合应用:这些应用程序是一个原生应用程序和移动Web的结合,其中原生应用程序的图标和界面与移动Web的易用性和丰富的内容相结合。
-
- 基数
Appium的基本思想是生成要测试的事件的脚本。脚本(i)可以被硬编码,(ii)具有可以控制的结构,(iii)可以是数据驱动的并且具有可以控制的结构[4]。因此,脚本技术可用于自动化界面测试。所以在这种方法中,脚本可以保持不变,但输入测试用例可以是多个的。考虑测试用例数和要运行的脚本之间的基数,如图1所示。一个特定事件的测试脚本记录可以多次运行来用以验证多个测试用例的正确性。
图1 测试用例与脚本基数
-
- Appium的体系结构
Appium根源于Selenium WebDrivers,后者是浏览器自动化的标准,被开发人员大量使用他们选择的任何语言来进行编程。 Appium利用Selenium WebDrivers来执行脚本。作为一个开源的跨平台工具,脚本可以用Java,Ruby,C,Python,Perl编写,这使程序员可以自由地选择使用任何语言。
本节将介绍与Android和iOS平台相关的架构。图2展示了iOS应用程序的框架,图3展示了Android应用程序的框架。
图2 iOS应用程序的Appium框架
图3 Android应用程序的Appium框架
Appium的架构可以分为四个主要部分:
- 网页驱动程序脚本:
Selenium WebDriver库和API用于编写测试用例脚本。对于类似应用程序的特定事件,在Android和iOS中这些脚本也是类似的
- Appium服务器:
Appium服务器是一个HTTP服务器,用于处理和创建网页驱动程序会话。它开始执行一个测试用例时会访问服务器。
- Instruments或者UiAutomator:
Appium服务器监听代理命令,Instruments命令服务器用于iOS应用程序和UiAutomator在设备上运行并用于Android应用程序。
- 实际设备或模拟器和仿真器:
模拟器是实际iOS设备复制品,用于测试应用程序。类似地,仿真器用于Android的应用程序。在实际设备上,Appium可以更快地执行测试脚本,而无需知道应用程序代码的技术性,这使其成为万众所需的理想框架。
-
- Appium的工作方式
脚本和desired capabilities可以用任何编程语言编写,包括Python,Perl,Java,Ruby,C#。eclipse 集成开发环境用于在Windows平台上编写capabilities和脚本。desired capa的一个例子如图4所示。这些capabilities用于在仿真器上测试Android应用程序。对于iOS应用,只有一些desired capabilities需要被更改。例如,将设备名称改为iPhone,平台名称改为iOS。
在测试应用程序的图形用户界面时,这些元素由Appium的inspector自动识别,包括元素名称,类型,Xpath和类。 Xpath通过该特定元素所导航到的路径找到对应元素。 Appium提供了记录此脚本的功能,并在运行测试用例时直接使用它们。一个事件的特定记录将具有用于该特定路径的唯一脚本。在图4和图7中,测试用例是在Junit中编写的。 Appium的Inspector捕获应用程序屏幕截图。记录将生成你所点击或触摸屏幕的命令对应的脚本。当给出点击或单击命令时,将会捕获下一屏幕的屏幕截图,随后此命令的脚本会被记录下来。整个捕获过程中,记录和生成脚本的过程如图5所示。
图4 安卓应用程序测试的Desired Capabilities
图5 Appium的Inspector的总览
因此,以这种方式生成特定事件的硬编码脚本。现在,该原始脚本可以用作数据驱动脚本,将其连接到外部数据文件,并在运行测试用例的程序中为其提供控制结构。
对于自动化测试的极其重要性质,即可重用性,可以通过appium来实现。同一组脚本可用于测试数百个值的特定测试用例。人工测试一百个值需要几个小时的工作量,但是使用它可以在几分钟内自动完成。
在用户界面截图中找到元素
通过Xpath:Xpath是元素路径的抽象表示。在图5中,通过导航到具有层次结构的屏幕上的特定元素来找到用户名和密码的元素。图7展示了使用Xpath的脚本。要输入用户名,使用的Xpath是:android.view.View[1]/android.widget.ListView[1]/android..view.View[1].类似的,要输入密码,在Xpath中只需android.view.View[2]这一改变。
通过ID:Appium的Inspector识别特定用户界面元素的id。该id用于在生成脚本时定位元素。
通过名称:该元素通过其名称被识别。在图6中,登录按钮的名称为Login。
图6 一个安卓应用的登陆界面
向Appium服务器发出命令
可以使用Appium测试时间:Selenium Web Drivers允许使用各种测试用户界面元素的方法。 Selenium WebDriver从代码中识别出一个命令,并以Json的形式通过HTTP请求将其发送给Appium服务器。 Appium支持用户界面功能测试,例如点击,添加文本,触摸和滚动。
点击事件:Elements.click()事件用于向Appium发送一个点击命令,与客户端设备界面交互并执行该命令。执行命令后,日志报告将发送到Appium服务器。接着,Appium准备接收下一个命令。
触摸事件:触摸事件类似一个点击事件,但它用于触摸用户界面上的任何位置,以便在将任何键值发送到文本框之前进入特定屏幕或点击文本框。
sendKeys事件:将一段称为密钥的文本从要键入的代码发送到客户端设备中的文本框。此过程与用户在文本框中键入一些文本类似。在图5中,通过使用Elements.sendKeys(“username”)向空的用户名文本框发送密钥“username”。
滚屏事件:滚动事件有多种方法支持,可以向上或向下滚动屏幕。但对一些事件支持上有一些限制,例如,Appium不支持测试挤压事件。
图7 登录界面的记录脚本
- 比较
具体比较如表1所示。
表1
lt;
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[141871],资料为PDF文档或Word文档,PDF文档可免费转换为Word
自动化工具 |
支持平台 |
开源跨平台 |
相同脚本运行在不同平台上 |
浏览器支持 |
Instruments |
iOS |
否 |
否 |
Safari,Chrome |
UiAutomator |
Android |
否 |
否 |
IE,Firefox |
Selenium |
iOS和Android |
是 |
是 |
Safari,Chrome,Firefox, Opera,IE |
Monkey Talk |
iOS和Android |
否 |
是 |
Firefox |
Robotium |
Android |
否 |
否 |
任何基于html的浏览器 |
Appium |
iOS和Android |
是 |
是 |
Chrome,Safari,Firefox, 对所有浏览器开放支持 |
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。