随着移动互联网的不断发展,软件产品的质量与稳定性越来越得到重视,其中UI自动化测试技术是重要的质量保障手段之一。而其中一个必备技术就是UI自动化测试框架之一的uiautomation。
一、 uiautomation是什么?
uiautomation(User Interface Automation)简称UIA,是苹果公司推出的一种自动化测试框架,其实现原理是利用Accessibility相关信息结合图形界面实现自动化。
在iOS系统上是内置于操作系统中的一种工具,可以通过iOS SDK和Xcode进行调用,而在Mac OSX系统中需通过Xcode进行获取相关API调用的桥接文件。
二、uiautomation的优势
uiautomation的主要优点是:
1. 覆盖面广
UIA不仅可以用于UI上的测试,还能测试Accessibility相关信息,如语音识别功能等,以及一些图片文字上的验证等多方面。
2. 能够支持多语言
UIA支持多个语言输出,如Swift、Objective-C、C++等语言的输出,以支持需要用不同语言调用其API的开发者。
3. 反应速度快
UIA利用Accessibility相关信息结合图形界面实现自动化,完成了界面与自动化之间的交互,来进行相关的设计,从而反应速度快。
4. 与Safari Remote Debugging结合使用
通过Safari Remote Debugging,我们可以查看和调试uiautomation scripts。这样的设计可以让我们更加聚焦于我们需要验证的部分,同时也能大大加快我们的测试效率。
5. 完美适配测试用例集
UIA满足我们对测试用例集的需求,因为其能够支持模块化编程和高覆盖率的测试用例。
三、uiautomation的实践
UIA能够对用户界面进行控制,获取信息、模拟用户输入等等,因此其实践非常的重要。
首先,我们要安装Xcode,因为uiautomation是一个Xcode的内置工具。这时我们需要创建一个新项目,这样可以方便我们更好地了解UIA。Xcode创建一个新的项目后,我们需要先要导入UIATarget类库。
接着,我们可以通过继承UIAElement类来实现我们自己的UIA控件类,然后可以向这个类添加需要的属性和方法。我们可以通过它来检查我们的UI是否正确。也可以通过控件来测试我们的UI自动化。
例如,我们可以测试某个控件是否会正确地支持拖放功能,我们可以这样来实现:
```
var target = UIATarget.localTarget(),
mainWindow = target.frontMostApp().mainWindow(),
draggable = mainWindow.slider(),
dropZone = mainWindow.image(),
dragStart = draggable.rect().centerPoint(),
dragEnd = dropZone.rect().centerPoint();
target.flickFromTo(dragStart, dragEnd);
```
四、uiautomation的挑战
虽然UIA有许多优点,但是其实践也面临着一些挑战。
1. 开发者基础要求高
UIA需要对iOS SDK、Objective-C等知识较为熟悉,因此需要对编程和测试流程有一定的认知和能力,对于缺乏相关知识的测试人员,需要耗费较长的学习时间。
2. 测试用例的编写存在困难
UIA需要人工编写测试用例,这可能会使得测试用例难以维护和扩展。尤其是在测试用例集过于复杂时,将会更为困难。
3. 维护复杂性高
随着测试用例集规模的增加,测试代码的数量也将愈发庞大,这给代码维护和管理带来了困难。
4. 开发调试成本高
构建成功的UI自动化测试脚本需要大量的代码编写、调试和优化,很容易出现重复代码、代码相似度低以及维护成本高的问题,需要一定的经验和技术支持。
五、总结
总之,UI自动化测试已成为质量保障中的重要手段之一,而UIA是其中一种必备技术之一。通过其优点和实践的过程中可以看出,UIA的确提供了广阔的应用前景和优势。但是,不可忽略的是,UIA的实践面临的挑战也不容忽视,需要认真全面的分析和评估。