从 Accessibility 说到自动化测试

Accessibility

iOS 以及其他苹果设备都内置了 Accessibility 的相关功能。借助这些功能,API,以及开发者工具,iOS 为每位用户(包括有特殊需求的用户)提供了卓越的体验。其中有一项比较特殊的功能 VoiceOver ( Settings-General-Accessibility-VoiceOver ), 用于盲人和弱视用户的屏幕阅读器。

Accessibility 还提供了一些其他的功能比如:字幕和音频描述,开关 AssistiveTouch / 3D Touch,显示自定义( 粗体文本,减少透明度,Dark Mode in iOS13 ), 引导访问 ( 通过在应用程序中实施 Guided Access协议,您可以根据用户的需要指定应用程序的哪些部分正常运行 )。由于这篇文章更多关注辅助自动化测试的部分,所以这些功能不再展开描述。

借助 Accessibility 进行自动化测试

现在主流的公司由于 APP 里流程复杂,业务不断扩大,测试用例也会随着不断增多,为了保证尽可能的提升效率,都会在打包时自动触发自动化测试,用例覆盖主要的流程或者是使用回归测试的用例即可。

App 的自动化测试工具大多使用 Appnium, 在 Appnium 捕捉 iOS app 的屏幕时,默认会显示每一个 UI 元素的 XPath, 但是有的 XPath 过于冗长,所以一般都推荐借助 AccessibilityIdentifier 的方式来定位元素。iOS 不像 Android 那样可以在 xml 文件中自动生成唯一的 id 作为标签,需要我们手动为控件添加。

简单归纳下如果使用 AccessibilityIdentifier 的话,就会有几个问题:

1> AccessibilityIdentifier 需要手动去设置,这需要花费开发人员很多的时间来配合测试人员。
2> 设置 id 时也要注意同一页面中不要有同名 id, 并且需要的该 UI 元素被添加到父视图 ( addSubview ) 后再设置。
3> 一些设置 hidden = YES 的视图可能 Appnium 工具无法定位到,可以使用设置 alpha 的形式来代替。
4> 一些其他的原因导致的无法定位元素。。。

针对手动埋属性及其他一些问题,我们可以使用开源库 TBUIAutoTest 来帮助我们进行 iOS 平台上的自动化测试。

TBUIAutoTest

TBUIAutoTest 这个库代码并不是很多,其中最重要的就是 hook 了 UIView accessibilityIdentifier 的 get 方法,下面来看下这个方法的主要逻辑:

code-screenshot

首先判断了是不是已经手动设置过,如果没有会去寻找该视图在容器中的变量名称,如果有则使用该名称,如果还没有就会根据这个 UI 元素的类型来决定用什么来做 identifier, 比如如果是 button 则使用 title,如果是 label 则使用 text 来做标识符。

另外其对 accessibilityLabel 这个属性也做了类似的 hook 处理,不过这个属性会对 VoiceOver 功能产生影响,所以不推荐去手动设置难以理解的内容。。

关于 TBUIAutoTest,作者本人也写了一篇文章对这个库的开发做了一些解读,链接如下:

为 UIAutomation 添加自动化测试标签的探索

DevOps 中的自动化测试

通常来讲,我们需要在打发布包或者 RT 包的时候先要跑一遍自动化测试,来减少人工测试的时间,简要的流程大概如下:

release-flow

而整个流程都可以通过脚本,以及借助 jenkins pipeline 实现,减少人工操作带来的问题。
在各种报告生成后,开发以及项目人员通过报告来做分析决策即可。

-- EOF --
以上为本篇博客的全部内容,欢迎提出建议和指正,
个人联系方式详见关于

Comments
Write a Comment